CVE-2025-66570CVE-2025-66570是cpp-httplib库中的一个严重安全漏洞,CVSS评分高达10.0。该漏洞影响0.27.0之前的所有版本,允许攻击者通过注入特定HTTP头来操纵服务器可见的元数据、日志记录和授权决策。攻击者可以注入名为REMOTE_ADDR、REMOTE_PORT、LOCAL_ADDR、LOCAL_PORT的头部,这些头部通过read_headers()函数被解析到请求头multimap中。由于Request::get_header_value返回头部键的第一个条目,且客户端提供的头部在服务器插入的头部之前被解析,因此下游代码可能无意中使用了攻击者控制的值。此漏洞可能被用于IP欺骗、日志污染和通过头部隐藏实现授权绕过,对系统安全构成严重威胁。
该漏洞的根本原因在于cpp-httplib的HTTP头解析逻辑存在缺陷。在httplib.h的read_headers()函数中,headers.emplace()将攻击者可控的HTTP头添加到Request.headers multimap中。随后在Server::process_request中,服务器追加自己的内部元数据时使用相同的头名称,但未先清除已存在的重复项。Request::get_header_value方法返回指定头键的第一个条目(id==0),由于客户端头在服务器插入的头之前被解析,因此返回的是攻击者注入的值而非真实的服务器元数据。受影响的关键位置包括:httplib.h中的read_headers、Server::process_request、Request::get_header_value和get_header_value_u64函数,以及docker/main.cc中的get_client_ip、nginx_access_logger和nginx_error_logger函数。攻击者可通过发送包含REMOTE_ADDR等头部的HTTP请求,欺骗服务器的IP记录、日志系统和访问控制机制。