漏洞总结:Tinyproxy HTTP 请求解析反序列化漏洞 1. 漏洞概述 Tinyproxy 在处理 HTTP 请求的 头部时存在区分大小写的错误。根据 RFC 7230 标准,传输编码(如 )应不区分大小写。然而,Tinyproxy 在 的 函数中使用了 进行严格匹配。 触发条件: 当客户端发送 (首字母大写)时,Tinyproxy 无法识别其为分块传输编码。 后果: Tinyproxy 误认为请求没有 Body,直接转发头部给后端服务器,并切换到 (原始 TCP 代理)模式。此时,客户端发送的未解析 Body 数据被盲目地代理到后端,未经过 HTTP 解析。 2. 影响范围 WAF/过滤绕过 (WAF / Filtering Bypass): 请求体不再经过 Tinyproxy 的 HTTP 解析层。任何依赖于解析请求体内容的逻辑(如 ICA/WAF 集成)都会被绕过,原始攻击载荷直接通过 TCP 中继转发给后端。 后端拒绝服务 (Backend Denial of Service / DoS): 攻击者可发送 但不完成 chunk 流。Tinyproxy 会立即转发头部并等待后端响应,而 RFC 合规的后端服务器会一直等待剩余的 chunk 流。这导致 Tinyproxy 连接保持占用,重复发送此类请求会导致后端 worker pool 耗尽,造成应用层 DoS。 3. 修复方案 修改 中的 函数: 将 替换为 。 或者在比较前对头部值进行规范化处理(Normalize header value)。 4. POC 代码 Node.js 后端示例 (用于复现): 利用代码 (curl 命令): 以下命令演示了利用 (大写 C) 绕过解析并导致后端挂起的情况: (注:正常请求应使用 ,上述命令中 会导致 Tinyproxy 无法识别,从而产生反序列化或 DoS 效果)