HTTP 花园
HTTP Garden 是配置为可组合的 HTTP 服务器和代理的集合,以及与它们交互的脚本,使查找漏洞变得更加容易。有关可以通过 HTTP Garden 找到的一些很酷的漏洞演示,请查看我们的 ShmooCon 2024 演讲。
致谢
我们要感谢 Galois、Trail of Bits、Narf Industries 和达特茅斯学院的朋友们使这个项目成为可能。
本材料基于国防高级研究计划局 (DARPA) 根据合同号 HR0011-19-C-0076 支持的工作。
入门
依赖关系
- HTTP Garden 在 x86_64 Linux 上运行,未经在其他平台上进行测试。
- 目标服务器是在 Docker 容器中构建和运行的,因此您需要 Docker。
- 您还需要以下 Python 包,您可以从 PyPI(即使用
pip
)或系统包管理器获取这些包:
如果您使用系统包管理器安装 Python 包,请注意包名称可能需要以py3-
、 python3-
或python-
为前缀,具体取决于系统。
- 我还强烈建议您从包管理器中安装 rlwrap,因为它使 Garden repl 变得更加有趣。
建筑
docker build ./images/http-garden-soil -t http-garden-soil
该映像包含一些基本实用程序,以及一个分叉的 AFL++,该 AFL++ 有助于从进程中收集覆盖范围而不杀死它们。
docker compose build gunicorn hyper nginx haproxy nginx_proxy
当然,HTTP 花园中的目标比我们刚刚构建的目标要多得多。只是构建它们需要很长时间。即使构建这几个也需要几分钟!
跑步
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- 通过 HAProxy 过滤基本的 GET 请求,然后通过 Nginx 反向代理,然后将结果发送到 Gunicorn、Hyper 和 Nginx 源服务器,并显示它们的解释是否匹配:
garden> payload 'GET / HTTP/1.1rnHost: whateverrnrn' # Set the payload
garden> transduce haproxy nginx_proxy # Run the payload through the reverse proxies
[1]: 'GET / HTTP/1.1rnHost: whateverrnrn'
haproxy
[2]: 'GET / HTTP/1.1rnhost: whateverrnrn'
nginx_proxy
[3]: 'GET / HTTP/1.1rnHost: echornConnection: closernrn'
garden> servers gunicorn hyper nginx # Select the servers
garden> grid # Show their interpretations
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ ✓
hyper | ✓ ✓
nginx | ✓
看来他们都同意。让我们尝试一个更有趣的有效负载:
garden> payload 'POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0nrn'
garden> grid
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ X
hyper | ✓ X
nginx | ✓
有差距啊!这是因为 Nginx 支持n
作为以块行结尾的行,但 Hyper 和 Gunicorn 不支持。 Nginx 在技术上违反了 RFC 9112,但影响可能很小。
目录布局
images
images
目录包含 Garden 中每个 HTTP 服务器和转换器的子目录。每个目标都有自己的 Docker 镜像。所有程序都尽可能从源代码构建。为了让我们可以轻松地构建每个目标的多个版本,所有目标都使用存储库 URL ( APP_REPO
)、分支名称 ( APP_BRANCH
) 和提交哈希 ( APP_VERSION
) 进行参数化。
tools
tools
目录包含用于与服务器交互的脚本。在里面你会发现
diagnose_anomalies.py
:用于枚举被测系统中在模糊测试期间要忽略的良性 HTTP 解析怪癖的脚本,-
repl.py
:HTTP Garden 的主要用户界面, -
update.py
:更新docker-compose.yml
中提交哈希值的脚本, - ...还有一些不面向用户的脚本。
目标
HTTP 服务器
姓名 | 在本地运行? | 收集覆盖范围? |
---|
aiohttp | 是的 | 是的 |
apache_httpd | 是的 | 是的 |
apache_tomcat | 是的 | 不 |
切鲁特 | 是的 | 是的 |
cpp_httplib | 是的 | 不 |
dart_stdlib | 是的 | 不 |
日食_灰熊 | 是的 | 不 |
日食码头 | 是的 | 不 |
快速http | 是的 | 不 |
go_stdlib | 是的 | 不 |
古尼康 | 是的 | 是的 |
水 | 是的 | 是的 |
haproxy_fcgi | 是的 | 不 |
超级 | 是的 | 不 |
超级玉米 | 是的 | 是的 |
克托尔 | 是的 | 不 |
自由事件 | 是的 | 不 |
libmicrohttpd | 是的 | 不 |
库汤 | 是的 | 不 |
轻量级 | 是的 | 是的 |
猫鼬 | 是的 | 是的 |
网蒂 | 是的 | 不 |
nginx | 是的 | 是的 |
节点标准库 | 是的 | 不 |
开放式速度 | 是的 | 不 |
openwrt_uhttpd | 是的 | 是的 |
php_stdlib | 是的 | 不 |
phusion_乘客 | 是的 | 不 |
协议_http1 | 是的 | 不 |
美洲狮 | 是的 | 不 |
服务谈话 | 是的 | 不 |
龙卷风 | 是的 | 不 |
扭曲的 | 是的 | 不 |
独角兽 | 是的 | 不 |
独角兽 | 是的 | 是的 |
女服务员 | 是的 | 是的 |
韦伯里克 | 是的 | 不 |
信息系统 | 不 | 不 |
openbsd_httpd | 不 | 不 |
HTTP 转换器
姓名 | 在本地运行? |
---|
apache_httpd_代理 | 是的 |
apache_traffic_server | 是的 |
go_stdlib_proxy | 是的 |
h2o_代理 | 是的 |
哈代理 | 是的 |
haproxy_无效 | 是的 |
lighttpd_proxy | 是的 |
nghttpx | 是的 |
nginx_代理 | 是的 |
openlitespeed_proxy | 是的 |
平戈拉 | 是的 |
磅 | 是的 |
乌贼 | 是的 |
漆 | 是的 |
阿卡迈 | 不 |
awselb_经典 | 不 |
awselb_应用程序 | 不 |
aws_cloudfront | 不 |
云耀 | 不 |
快速地 | 不 |
谷歌经典 | 不 |
谷歌_全球 | 不 |
iis_代理 | 不 |
openbsd_relayd | 不 |
虫子
这些是我们使用 HTTP Garden 发现的错误。如果您找到了自己的一些内容,请提交 PR 将它们添加到此列表中!每个错误均通过以下字段进行描述:
- 用例:攻击者可以利用此错误执行的攻击类型
- 要求:需要配置选项或其他服务器才能利用此错误。
- 风险:无|低|中|高,后面有简短的解释。
- 无:该错误可能无法被利用。
- 低:该错误可能是可利用的,但它需要一个非常奇怪的配置,或者依赖于代理以我从未见过的方式运行。
- 中:该错误可能是可利用的,但影响不大,或者需要不太可能的服务器/传感器组合。
- 高:该错误可在常见配置和服务器/传感器组合中利用。
- 有效负载:触发错误的示例有效负载
- 受影响的程序:存在此错误的服务器列表,以及报告和补丁时间表。由于一些实现错误很常见,这可以防止它们使列表变得混乱:)
服务器错误
这些是服务器接受和解释请求的方式中的错误。
- Python
int
构造函数用于解析块大小,因此0x
、 _
、 +
和-
会被误解。
- 用例:请求走私
- 要求:一个转换器,将块大小解释为其最长的有效前缀,但按原样转发它们。
- 风险:中。请参阅传感器错误 7。
- 有效负载:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 8 月 1 日:通过 GH 安全咨询报告。
- 2023 年 10 月 7 日:在版本 3.8.6 中修复。
- 鳐鱼:
- 2023 年 8 月 1 日:通过 GH 问题报告。
- 2023 年 12 月 25 日:已在提交中修复。
- 龙卷风:
- 2023 年 8 月 2 日:通过 GH 安全咨询报告。
- 2023 年 8 月 10 日:已在提交中修复。
- 标头值中错误地允许
x00
、 r
或n
。
- 用例:请求走私
- 要求:一个转换器,可以在标头值中转发这些字节,或者接受并转发
n
作为标头行终止符。 - 风险:高。请参阅传感器错误 10、12 和 16。
- 有效负载:
GET / HTTP/1.1rnHost: arnHeader: vnx00raluernrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 8 月 1 日:通过 GH 安全咨询报告。
- 2023 年 10 月 7 日:在版本 3.8.6 中修复。
- 鳐鱼:
- 2024 年 1 月 31 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。
- 龙卷风:
- 2023 年 8 月 11 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。
- 标题名称末尾的空格被错误地去除。
- 用例:请求走私
- 要求:一个转换器将
:
之前的空格视为标头名称的一部分。 - 风险:低。我不知道有任何易受攻击的传感器,但詹姆斯·凯特尔说至少存在一个。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnContent-Length : 34rnrnGET / HTTP/1.1rnHost: whateverrnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 8 月 2 日:通过 GH 安全咨询报告。
- 2023 年 10 月 7 日:在版本 3.8.6 中修复。
- 雪茄:
- 2024 年 2 月 4 日:通过 GH 问题报告。
- 2024 年 2 月 4 日:仍未修复。
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 2023 年 8 月 14 日:已分配 CVE-2023-40518。
- 空格被错误地从第一个标头名称的开头去除。
- 用例:请求走私
- 要求:转换器将第一个标头名称开头的空格视为标头名称的一部分。
- 风险:低。我不知道有任何易受攻击的传感器。
- 有效负载:
GET / HTTP/1.1rntContent-Length: 1rnrnX
- 受影响的程序:
- AIOHTTP:
- 2023 年 8 月 20 日:通过 GH 安全咨询评论报告。
- 2023 年 10 月 7 日:在版本 3.8.6 中修复。
- HTTP 版本被解释为其最长的有效前缀。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET /test HTTP/1.32rnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 10 月 14 日:通过 GH 问题和 PR 报告。
- 2023 年 10 月 15 日:已在提交中修复。
- HTTP 方法被解释为其最长的有效前缀。
- 使用案例:ACL 绕过
- 要求:按原样转发无效方法名称的转换器。
- 风险:中。由于尚未报告相应的错误,因此省略了说明。
- 有效负载:
G=":<>(e),[T];?" /get HTTP/1.1rnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 10 月 14 日:通过 GH 问题和 PR 报告。
- 2023 年 10 月 15 日:已在提交中修复。
- URI 未经任何验证。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET ! HTTP/1.1rnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 10 月 16 日:通过 GH 问题报告。
- 2023 年 10 月 16 日:已在 PR 中修复。
- 标头名称中错误地允许某些非 ASCII 字节。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET / HTTP/1.1rnxefoo: barrnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 10 月 17 日:通过 PR 报道。
- 2023 年 10 月 18 日:通过合并上述 PR 修复。
- 芫:
- 2024 年 2 月 4 日:通过 GH 问题报告。
- 2024 年 2 月 10 日:已在提交中修复。
- 猫鼬:
- 2023 年 10 月 13 日:通过 GH 问题报告。
- 2023 年 12 月 5 日:已在提交中修复。
-
n
允许作为请求行中的分隔空格。
- 用例:请求走私
- 要求:一个转换器,可以按
n
转发 HTTP/0.9 请求,并重用底层连接。 - 风险:低。我不知道有任何易受攻击的传感器。
- 有效负载:
GET /nHTTP/1.1rnrn
- 受影响的程序:
- AIOHTTP:
- 2023 年 10 月 17 日:通过 PR 报道。
- 2023 年 10 月 18 日:通过合并修复。
- Python
int
构造函数用于解析Content-Length
值,因此_
、 +
和-
会被误解。
- 用例:请求走私
- 要求:转换器将
Content-Length
值解释为最长的有效前缀,但按原样转发它们。 - 风险:低。我不知道有任何易受攻击的传感器,但马特·格伦菲尔德说至少存在一个。
- 有效负载:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789
- 受影响的程序:
- AIOHTTP:
- 2023 年 8 月 1 日:通过 GH 安全咨询报告。
- 2023 年 10 月 7 日:在版本 3.8.6 中修复。
- CPython http.server:
- 2023 年 4 月 2 日:通过 GH 问题报告。
- 2023 年 4 月 2 日:已在提交中修复。
- 龙卷风:
- 2023 年 8 月 2 日:通过 GH 安全咨询报告。
- 2023 年 8 月 10 日:已在提交中修复。
- 工厂:
- 2023 年 6 月 1 日:通过 GH 问题报告。
- 2023 年 6 月 7 日:在提交 88c5c78 中修复。
- 包含多个
Transfer-Encoding: chunked
标头的请求将被接受并被视为没有消息正文。
- 用例:请求走私
- 要求:转发包含多个
Transfer-Encoding
标头的请求的转换器。 - 风险:高。请参阅传感器错误 28。
- 有效负载:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn
- 受影响的程序:
- 龙卷风:
- 2023 年 10 月 7 日:通过 GH 安全咨询报告。
- 2024 年 6 月 6 日:在安全公告发布中修复。
-
xa0
和x85
从标头值的开头和结尾删除。
- 用例:请求走私
- 要求:转发未知
Transfer-Encoding
值并将其视为与chunked
不同的转换器。 - 风险:中。请参阅传感器错误 18。
- 有效负载:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: xa0chunkedxa0rnrn0rnrn
- 受影响的程序:
- 龙卷风:
- 2024 年 2 月 4 日:通过 GH 安全咨询评论报告。
- 2024 年 2 月 4 日:仍未修复。
-
r
在标题字段行中被视为行终止符。
- 用例:请求走私
- 要求:一个在标头名称中转发
r
的转换器。 - 风险:高。请参阅传感器错误 10。
- 有效负载:
GET / HTTP/1.1rnVisible: :/rSmuggled: :)rnrn
- 受影响的程序:
- CPython http.server:
- 2024 年 1 月 31 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。
- 猫鼬:
- 2023 年 7 月 7 日:通过 GH 问题报告。
- 2023 年 7 月 9 日:在提交 6957c37 中修复。
- 标头名称中错误地允许不允许的 ASCII 字符。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET / HTTP/1.1rnx00x01x02x03x04x05x06x07x08tx0bx0cx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f "(),/;<=>?@[/]{}: whateverrnrn
- 受影响的程序:
- 芫:
- 2024 年 2 月 4 日:通过 GH 问题报告。
- 2024 年 2 月 10 日:已在提交中修复。
- 猫鼬:
- 2023 年 10 月 13 日:通过 GH 问题报告。
- 2023 年 12 月 5 日:已在提交中修复。
- 龙卷风:
- 2023 年 8 月 11 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。 OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- HTTP 版本未经验证。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET / HTTP/rr1.1rnrn
- 受影响的程序:
- 快速HTTP:
- 2024 年 2 月 4 日:通过 GH 问题报告。
- 2024 年 2 月 11 日:已在提交中修复。
- 空
Content-Length
值被视为0
。
- 用例:请求走私
- 要求:一个将空
Content-Length
值解释为 0 以外的值的转换器。 - 风险:低。我不知道有任何这样的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnContent-Length: rnrn
- 受影响的程序:
- 转到网络/http:
- 2023 年 7 月 31 日:通过 GH 问题报告
- 2023 年 8 月 11 日:已在提交中修复。
- 轻量级:
- 2023 年 8 月 1 日:通过问题跟踪器报告。
- 2023 年 8 月 3 日:已在提交中修复。
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 空块大小被视为
0
。
- 用例:请求走私
- 要求:一个能够在块之间接受和转发额外
rn
转换器。 - 风险:低。我不知道有任何这样的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnrnrn
- 受影响的程序:
- 转到网络/http:
- 2023 年 12 月 2 日:通过 GH 问题报告。
- 2024 年 1 月 4 日:已在提交中修复。
- 超级:
- 2023 年 12 月 1 日:通过电子邮件报告。
- 2023 年 12 月 18 日:已在提交中修复。
- 猫鼬:
- 2024 年 1 月 3 日:通过 GH 问题报告。
- 2024 年 1 月 3 日:已在 PR 中修复。
- 错误地接受空标头名称。
- 用例:请求走私
- 要求:一个接受并转发
rn:rn
转换器,并将其视为标头块的末尾。 - 风险:低。我不知道有任何这样的传感器。
- 有效负载:
GET / HTTP/1.1rn: ignoredrnHost: whateverrnrn
- 受影响的程序:
- 转到网络/http:
- 2024 年 1 月 24 日:通过 GH 问题报告。
- 2024 年 1 月 30 日:已在提交中修复。
- 鳐鱼:
- 2023 年 12 月 4 日:通过 GH 问题报告。
- 2023 年 12 月 25 日:已在提交中修复。
- 节点.js:
- 2023 年 10 月 13 日:通过 GH 问题报告。
- 2023 年 10 月 17 日:已在提交中修复。
- 龙卷风:
- 2023 年 10 月 13 日:通过 GH 问题评论报告。
- 2023 年 10 月 15 日:仍未修复。
- 所有非
rn
空白序列都将从标头值的开头( :
之后)删除。
- 用例:请求走私
- 要求: 一个接受并转发场线中裸
n
线结尾的传感器。 - 风险:中。请参阅传感器错误 16。
- 有效负载:
GET / HTTP/1.1rnHost: arnUseless:nnGET / HTTP/1.1rnrn
- 受影响的程序:
- 鳐鱼:
- 2023 年 6 月 2 日:通过电子邮件报告。
- 2024 年 1 月 31 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。
-
xa0
和x85
字节从标头名称末尾、 :
之前被删除。
- 用例:请求走私
- 要求:一个接受并转发标头名称中的
xa0
或x85
的转换器。 - 风险:中。请参阅传感器错误 6。
- 有效负载:
GET / HTTP/1.1rnHost: arnContent-Lengthx85: 10rnrn0123456789
- 受影响的程序:
- 鳐鱼:
- 2023 年 6 月 27 日:通过电子邮件报告。
- 2023 年 12 月 25 日:已在提交中修复。
-
,chunked
被视为与chunked
不同的编码。
- 用例:请求走私
- 要求:一个转发传输
Transfer-Encoding
值的转换器,chunked
,并将其解释为相当于chunked
。 - 风险:高。请参阅传感器错误 9。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- 鳐鱼:
- 2023 年 11 月 6 日:通过 GH 问题报告。
- 2023 年 12 月 25 日:已在提交中修复。
- 猫鼬:
- 2023 年 11 月 6 日:通过 GH 问题报告。
- 2023 年 12 月 1 日:已在提交中修复。
- 乘客:
- 2023 年 11 月 6 日:通过电子邮件报告。
- 2024 年 1 月 22 日:已在发布中修复。
- 无效的块大小被解释为其最长的有效前缀。
- 用例:请求走私
- 要求: 一个接受并转发无效前缀块大小(例如带有
0x
前缀)的转换器。 - 风险:高。请参阅传感器错误 2 和 19。
- 有效负载:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- 水:
- 2023 年 8 月 1 日:通过电子邮件报告。
- 2023 年 12 月 12 日:已在 PR 中修复。
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 韦瑞克:
- 2023 年 11 月 9 日:通过 GH 问题报告。
- 2024 年 2 月 3 日:已在 PR 中修复。
- 接受具有多个冲突的
Content-Length
标头的请求,优先考虑第一个标头。
- 用例:请求走私
- 要求:一个转换器接受并转发带有 2 个
Content-Length
标头的请求,优先考虑最后一个标头。 - 风险:中。请参阅传感器错误 22。
- 有效负载:
GET / HTTP/1.1rnHost: arnContent-Length: 1rnContent-Length: 0rnrnZ
- 受影响的程序:
- 水:
- 2023 年 11 月 30 日:通过电子邮件报告。
- 2024 年 7 月 10 日:通过 GH 问题报告。
- 2024 年 7 月 10 日:仍未修复。
- OpenLite速度:
- 2024 年 6 月 26 日:通过 GH 问题报告。
- 2024 年 7 月 10 日:仍未修复。
- HTTP 版本号中的 8 位整数溢出。
- 使用案例:???
- 要求:不适用
- 风险:无
- 有效负载:
GET / HTTP/4294967295.255rnrn
- 受影响的程序:
- 自由事件:
- 2024 年 1 月 17 日:提交 PR。
- 2024 年 1 月 18 日:在合并中修复。
- 块大小使用
strtoll(,,16)
进行解析,因此0x
、 +
和-
前缀被错误地接受。
- 用例:请求走私
- 要求:一个转换器,将块大小解释为其最长的有效前缀,但按原样转发它们。
- 风险:中。请参阅传感器错误 2。
- 有效负载:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn
- 受影响的程序:
- 自由事件:
- 2024 年 1 月 18 日:提交 PR。
- 2024 年 2 月 18 日:在合并中修复。
- OpenLite速度:
- 2023 年 8 月 2 日:通过电子邮件报告。
- 2023 年 8 月 11 日:OLS 1.7.18 中已修复。
- 负
Content-Length
标头可用于强制服务器进入无限繁忙循环。
- 用例:DoS
- 要求:无。
- 风险:高。这个错误很容易被利用。
- 有效负载:
GET / HTTP/1.1rnHost: arnContent-Length: -48rnrn
- 受影响的程序:
- 猫鼬:
- 2023 年 4 月 27 日:通过电子邮件报告。
- 2023 年 5 月 16 日至 18 日:在提交 4663090、926959a 和 2669991 中修复。
- 已分配 CVE-2023-34188。
- 当收到没有名称或值的标头时,HTTP 标头块将被截断。
- 用例:请求走私
- 要求:转发空标头名称的转换器。
- 风险:中。请参阅奖金奖金错误 2。
- 有效负载:
GET / HTTP/1.1rn:rnI: am chopped offrnrn
- 受影响的程序:
- 猫鼬:
- 2023 年 6 月 26 日:通过 GH 问题报告。
- 2023 年 6 月 29 日:在提交 415bbf2 中修复。
- 标头名称可以仅在空间上与值分开;否
:
必需。
- 用例:请求走私
- 要求:转发不包含
:
的标题行的转换器。 - 风险:中。请参阅传感器错误 14。
- 有效负载:
GET / HTTP/1.1rnContent-Length 10rnrn0123456789
- 受影响的程序:
- 猫鼬:
- 2023 年 7 月 7 日:通过 GH 问题报告。
- 2023 年 7 月 7 日:在提交 5dff282 中修复。
- 无效的
Content-Length
标头被解释为等同于其最长的有效前缀。
- 用例:请求走私
- 要求:转发具有无效前缀(例如
0x
或+
)的Content-Length
值的转换器 - 风险:高。请参阅传感器错误 1。
- 有效负载:
GET / HTTP/1.1rnContent-Length: 1ZrnrnZ
- 受影响的程序:
- 猫鼬:
- 2023 年 7 月 31 日:通过 GH 问题报告
- 2023 年 8 月 17 日:已在提交中修复。
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 标头块可能会错误地终止于
rnrX
,其中X
可以是任何字节。
- 使用案例:???
- 要求:转发以
r
开头的标头名称,或允许r
作为行折叠行开头空白的转换器。 - 风险:低。我不知道有这样的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn
- 受影响的程序:
- 节点.js:
- 2023 年 7 月 7 日:通过 HackerOne 报告进行报道。
- 2023 年 7 月 31 日:在 llhttp 提交中修复。
- 2023 年 9 月 16 日:在节点提交中修复。
- 块行在
rX
上错误终止,其中X
可以是任何字节。
- 用例:请求走私。
- 要求:一个在块扩展中的可选空白内转发
r
的转换器。 - 风险:高。请参阅传感器错误 3。
- 有效负载:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- 节点.js:
- 2023 年 7 月 9 日:通过 HackerOne 评论举报。
- 2023 年 7 月 31 日:在 llhttp 提交中修复。
- 2023 年 9 月 16 日:在节点提交中修复。
-
Content-Length
标头使用strtoll(,,0)
进行解释,因此前导0
、 +
、 -
和0x
会被误解。
- 用例:请求走私
- 要求:转发
Content-Length
值中前导0
的转换器,这是标准允许的。 - 风险:高。这可用于符合标准的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnContent-Length: 010rnrn01234567
- 受影响的程序:
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 接受具有多个冲突的
Content-Length
标头的请求,优先考虑最后一个标头。
- 用例:请求走私
- 要求:一个转换器接受并转发带有 2 个
Content-Length
标头的请求,优先考虑第一个标头。 - 风险:低。我不知道有任何这样的传感器,但似乎极有可能存在这样的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 1rnrnZ
- 受影响的程序:
- 快速HTTP:
- 2024 年 2 月 4 日:通过电子邮件报告。
- 2024 年 2 月 11 日:已在提交中修复。
- 标头值中允许使用
r
。
- 使用案例:???
- 要求:一个能够误解并转发标头值中的
r
转换器。 - 风险:低。我不知道有任何这样的传感器。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnHeader: varluernrn
- 受影响的程序:
- OpenLite速度:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 10 日:在 OLS 1.7.18 中修复。
- 标头值在
x00
处被截断。
- 使用案例:ACL 绕过
- 要求:一个在标头值中转发
x00
的转换器。 - 风险:中。请参阅传感器错误 12。
- 有效负载:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn
- 受影响的程序:
- OpenLite速度:
- 2023 年 11 月 3 日:通过电子邮件报告。
- 2024 年 7 月 10 日:在此日期或之前修复。
- 自由事件:
- 2024 年 1 月 29 日:通过 GH 安全咨询报告。
- 2024 年 1 月 31 日:仍未修复。
- 回车符在块扩展中分号后面的可选空格内转发。
- 用例:请求走私
- 要求: 在此位置将
rr
视为等同于rn
的服务器。 - 风险:高。请参阅服务器错误 31。
- 有效负载:
POST /abc HTTP/1.1rnTransfer-Encoding: chunkedrnHost: h2o.http-garden.usrnrn41;a=brrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 412rnrn0rnrnGET /def HTTP/1.1rnHost: h2o.http-garden.usrnrn
- 受影响的程序:
- 阿卡迈 CDN:
- 2023 年 12 月 3 日:通过电子邮件报告。
- 2024 年 7 月 10 日:在此日期或之前修复。
- 标题名称可以跨行继续。
- 用例:请求走私。
- 要求:转发不包含
:
的标题行的转换器。 - 风险:中。请参阅传感器错误 14。
- 有效负载:
POST / HTTP/1.1rnHost: whateverrnTransfer-rnEncoding: chunkedrnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- 乘客:
- 2023 年 11 月 6 日:通过电子邮件报告。
- 2024 年 1 月 22 日:已在发布中修复。
- 请求中的空
Content-Length
被解释为“读取直到发生超时”。
- 用例:请求走私
- 要求:一个转换器接受并转发空的
Content-Length
标头值,并将它们视为等同于 0。 - 风险:中。请参阅传感器错误 5 和 11。
- 有效负载:
GET / HTTP/1.1rnHost: localhostrnContent-Length: rnrnGET / HTTP/1.1rnHost: localhostrnrn
- 受影响的程序:
- 美洲狮:
- 2023 年 6 月 16 日:通过电子邮件报告。
- 2023 年 8 月 17 日:在 Puma 6.3.1 和 5.6.7 中修复。请参阅咨询。
- 分块消息体在
rnXX
处终止,其中XX
可以是任意两个字节。
- 用例:请求走私
- 要求:转换器保留尾部字段并且不在尾部字段内的
:
和值之间添加空格。 (ATS 就是这样的服务器之一) - 风险:高。利用此错误的要求并不要求传感器违反标准。
- 有效负载:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn0rnX:POST / HTTP/1.1rnrn
- 受影响的程序:
- 美洲狮:
- 2023 年 7 月 31 日:通过电子邮件报告。
- 2023 年 8 月 17 日:在 Puma 6.3.1 和 5.6.7 中修复。请参阅咨询。
- 已分配 CVE-2023-40175。
- HTTP 方法和版本未经验证。
- 使用案例:???
- 要求:不适用
- 风险:无。
- 有效负载:
x00 / HTTP/............0596.7407.rnrn
- 受影响的程序:
- 女服务员:
- 2023 年 10 月 17 日:提交 PR。
- 2024 年 2 月 4 日:在 PR 合并中修复。
-
xa0
和x85
从标头值的开头和结尾删除, Transfer-Encoding
标头除外。
- 用例:标头值 ACL 绕过
- 要求:一个接受并转发
xa0
和x85
的转换器。 - 风险:中。该标准允许传感器转发标头值中的 obs 文本。
- 负载:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn
- 受影响的程序:
- 女服务员:
- 2024 年 2 月 4 日:通过 GH 问题报告。
- 2024 年 2 月 4 日:已在提交中修复。
- 空
Content-Length
值被解释为相当于0
,并且优先于任何后续Content-Length
值。
- 用例:请求走私
- 要求:转换器在非空
Content-Length
值之前转发空内容长度值,并解释非空内容长度值。 - 风险:高。请参阅传感器错误 11。
- 有效负载:
GET / HTTP/1.1rnContent-Length: rnContent-Length: 43rnrnPOST /evil HTTP/1.1rnContent-Length: 18rnrnGET / HTTP/1.1rnrn
- 受影响的程序:
- 韦瑞克:
- 2023 年 8 月 14 日:通过 GH 问题报告。
- 2023 年 8 月 15 日:已在 PR 中修复。
-
x00
从标头值的末尾删除。
- 使用案例:ACL 绕过
- 要求:一个在标头值中转发
x00
的转换器。 - 风险:中。请参阅传感器错误 12。
- 有效负载:
GET / HTTP/1.1rnEvil: evilx00rnrn
- 受影响的程序:
- 韦瑞克:
- 2023 年 11 月 30 日:通过 GH 问题报告。
- 2024 年 2 月 3 日,2024 年:已在 PR 中修复。
- 所有未知的传输编码都被视为等同于
chunked
。
- 用例:请求走私
- 要求:转发除
identity
和chunked
之外的传输编码的转换器。这是标准允许的。 - 风险:高。这允许针对某些符合标准的传感器进行请求走私。
- 有效负载:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: bleghrnrn1rnZrn0rnrn
- 受影响的程序:
- 快速HTTP:
- 2024 年 2 月 4 日:通过电子邮件报告。
- 2024 年 2 月 11 日:已在提交中修复。
- 当有效请求之后通过管道传输无效请求时,连接会提前关闭。
- 使用案例:???
- 要求:无。
- 风险:无。
- 负载:
GET / HTTP/1.1rnConnection: closernrnInvalidrnrn
- 受影响的程序:
- 猫鼬:
- 2024 年 1 月 29 日:通过 GH 问题报告。
- 2024 年 2 月 13 日:已在提交中修复。
- 独角兽:
- 2024 年 1 月 29 日:通过 GH 讨论评论报告。
- 2024 年 2 月 6 日:无意中修复了提交。
- 大于
x80
的字节将从标头值的开头和结尾去除。
- 使用案例:麻烦不断。
- 要求:转发包含大于
x80
字节的主机标头的转换器。 - 风险:中。
- 有效负载:
POST / HTTP/1.1rnHost: xffaxffrnTransfer-Encoding: xffchunkedxffrnrn1rnZrn0rnrn
- 受影响的程序:
- 包子:
- 2024 年 2 月 13 日:通过 GH 问题报告。
- 2024 年 2 月 13 日:仍未修复。
- 当接收到无效块时,连接不会关闭,并且下一条消息的开始位置位于无效块后面的第一个
rn
之后。
- 使用案例:响应队列中毒。
- 需求:转发无效块的转换器。
- 风险:中。
- 有效负载:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnINVALID!!!rnGET / HTTP/1.1rnHost: whateverrnrn
- 受影响的程序:
- 雪茄:
- 2024 年 2 月 14 日:通过 GH 问题报告。
- 2024 年 2 月 14 日:仍未修复。
- 初始请求缓冲区中的管道请求被解释为缓冲区中第一个请求的消息正文,即使它具有
Content-Length: 0
标头。
- 用例:请求走私
- 要求:一个不改变传入流元素边界的传感器。
- 风险:低。我不知道有任何这样的传感器
- 有效负载:
POST / HTTP/1.1rnContent-Length: 0rnConnection:keep-alivernHost: arnid: 0rnrnPOST / HTTP/1.1rnHost: arnid: 1rnContent-Length: 34rnrn
GET / HTTP/1.1rnHost: arnid: 2rnrn
- 受影响的程序:
- 美洲狮:
- 2024 年 2 月 2 日:通过电子邮件报告。
- 2024 年 2 月 2 日:已在提交中修复。
传感器缺陷
这些是传感器解释、标准化和转发请求的方式中的错误。
-
0x
前缀的Content-Length
值被错误地接受和转发,且未验证消息正文。
- 用例:请求走私
- 要求:服务器将
Content-Length
解释为其最长的有效前缀,或解释0x
前缀的Content-Length
。 - 风险:中。请参阅服务器错误 10、29 和 32。
- 有效负载:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnContent-Length: 0x10rnrnZ
- 受影响的程序:
- 阿卡迈 CDN:
- 2023 年 9 月 7 日:通过电子邮件报告。
- 2023 年 11 月 27 日:通过电子邮件通知修复。
- 无效的块大小值被错误地接受和转发。
- 用例:请求走私
- 要求:HTTP/1.1 后端服务器
- 风险:高。此错误可用于针对任意后端的请求走私。
- 有效负载:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnTransfer-Encoding: chunkedrnrnZrnZZrnZZZrnrn
- 受影响的程序:
- 阿卡迈 CDN:
- 2023 年 9 月 7 日:通过电子邮件报告。
- 2023 年 11 月 27 日:通过电子邮件通知修复。
-
r
被错误地允许出现在 ; 之前的 chunk-ext 空白中;
。
- 用例:请求走私
- 要求: 在此位置误解
r
的服务器。 - 风险:高。请参阅服务器错误 31。
- 有效负载:
POST / HTTP/1.1rnHost: server.my-domain.coolrnTransfer-Encoding: chunkedrnrn2rr;arn02rn41rn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 430rnrn0rnrnGET / HTTP/1.1rnHost: server.my-domain.coolrnrn
- 受影响的程序:
- 阿卡迈 CDN:
- 2023 年 9 月 7 日:通过电子邮件报告。
- 2023 年 11 月 27 日:通过电子邮件通知修复。
- 阿帕奇流量服务器:
- 2023 年 9 月 20 日:通过 GH 问题报告。
- 2024 年 2 月 13 日:已在 PR 中修复。
- Google Cloud 经典应用程序负载均衡器:
- 2023 年 9 月 13 日:通过 Google IssueTracker 报告。
- 2024 年 1 月 30 日:在此日期或之前修复。
- 包含无效块的消息将在不带消息正文的情况下转发。
- 使用案例:???
- 要求:不适用
- 风险:无。
- 有效负载:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1r0n
- 受影响的程序:
- 磅:
- 2024 年 6 月 13 日:通过 GH 问题报告。
- 2024 年 6 月 14 日:已在提交中修复。
- 空
Content-Length
标头会被错误转发。
- 用例:请求走私
- 要求:将空
Content-Length
值解释为 0 以外的任何值的服务器 - 风险:中。请参阅服务器错误 38。
- 有效负载:
GET / HTTP/1.1rnhost: whateverrncontent-length: rnrn
- 受影响的程序:
- 阿帕奇流量服务器:
- 2023 年 8 月 2 日:通过 GH 问题报告。
- 2023 年 8 月 6 日:通过 PR 修复。
- 不允许的字节在标头名称中被接受和转发。
- 用例:请求走私
- 要求:服务器会误解标头名称中的这些无效字节。
- 风险:中。请参阅服务器错误 41。
- 有效负载:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn
- 受影响的程序:
- 阿帕奇流量服务器:
- 2023 年 6 月 29 日:通过电子邮件报告。
- 2023 年 9 月 18 日:通过 GH 问题报告。
- 2024 年 1 月 31 日:仍未修复。
- OpenBSD 转发:
- 2023 年 11 月 10 日:通过电子邮件报告。
- 2023 年 11 月 28 日:在提交中修补。
- 块大小被解释为其最长的有效前缀,并重新发出。
- 用例:请求走私
- 要求:能够解释块大小的
0_
或0x
前缀的服务器。 - 风险:高。请参阅服务器错误 1 和 25,以及传感器错误 19。
- 有效载荷:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1these-bytes-never-get-validatedrnZrn0rnrn
- 受影响的程序:
- Apache流量服务器:
- 2023年10月10日:通过GH问题进行了报告。
- 2024年2月13日:固定在PR中。
- 占位符:)
-
Transfer-Encoding: ,chunked
标头完整完整,被解释为等同于chunked
。
- 用例:请求走私
- 需求:均忽略未知
Transfer-Encoding
S和Treats的服务器,chunked
与chunked
不同。 - 风险:高。请参阅服务器错误21。
- 有效载荷:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn
- 受影响的程序:
- Azure CDN:
- 2023年10月15日:通过MSRC漏洞报告进行了报告。
- 2023年11月29日:固定在此日期之前或之前。
- 2023年12月12日:“此案不符合MSRC维修的标准,因为HTTP走私不是一个脆弱性,我们将关闭此案。”
- nghttpx:
- 2023年10月14日:通过电子邮件报告。
- 2023年10月17日:固定在PR中。
-
r
在标题值中错误地转发。
- 用例:请求走私
- 要求:将
rn
r
视为等效的服务器。 - 风险:中等。请参阅服务器错误13。
- 有效载荷:
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn
- Google Cloud Classic应用程序负载平衡器:
- 2023年9月7日:通过Google Issuetracker进行了报告。
- 2024年1月30日:固定在此日期或之前。
- 即使在其他
Content-Length
标头的情况下,只要空内容长度的标头首先出现,即使在存在其他Content-Length
标题的情况下,空的Content-Length
标头也会错误地转发。
- 用例:请求走私
- 要求:将空
Content-Length
值解释为0并接受传入请求中的多个Content-Length
标头的服务器,优先考虑第一个。 - 风险:中等。请参阅服务器错误42。
- 有效载荷:
GET / HTTP/1.1rnhost: whateverrncontent-length: rncontent-length: 59rnrnPOST /evil HTTP/1.1rnhost: whateverrncontent-length: 34rnrnGET / HTTP/1.1rnhost: whateverrnrn
- 受影响的程序:
- haproxy:
- 2023年8月2日:通过GH问题进行了报告。
- 2023年8月9日:固定在提交中。
- 2023年8月10日:分配了CVE-2023-40225。
-
x00
以标头值转发。
- 用例:ACL旁路
- 要求:截断标题值
x00
的服务器。 - 风险:中等。请参阅服务器错误35和43,以及传感器错误20。
- 有效载荷:
GET / HTTP/1.1rnHost: google.comx00.kallus.orgrnrn
- 受影响的程序:
- haproxy:
- 2023年9月19日:通过电子邮件报告。
- 2024年1月31日:固定在提交中。
- Openlitespeed:
- 2023年11月3日:通过电子邮件报告。
- 2024年7月10日:固定在此日期之前或之前。
- 裸露
n
被接受为块终结者。
- 用例:???
- 要求:N/A。
- 风险:无
- 有效载荷:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- 受影响的程序:
- haproxy:
- 2024年1月25日:通过电子邮件报告。
- 2024年1月30日:固定在Commmits 7B737DA和4837E99中。
- 否
:
将其转发为IS。
- 用例:请求走私
- 要求:误解了否定标头字段线的后端服务器
:
。 - 风险:中等。请参阅传感器错误28和37。
- 有效载荷:
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- 受影响的程序:
- Openlitespeed:
- 2023年11月3日:通过电子邮件报告。
- 2024年7月10日:固定在此日期之前或之前。
- 如果未识别
Transfer-Encoding
值,则将包含Content-Length
和Transfer-Encoding
标头的请求转发为IS。
- 用例:请求走私
- 需求:一种可对待的后端服务器
,chunked
相当于chunked
,并优先考虑Transfer-Encoding
而不是Content-Length
。这些行为是由标准允许的。 - 风险:高。这允许请求将符合标准的服务器走私。
- 有效载荷:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn
- 受影响的程序:
- Openlitespeed:
- 2023年11月3日:通过电子邮件报告。
- 2024年7月10日:固定在此日期之前或之前。
- 磅:
- 2024年2月4日:通过GH发行报告。
- 2024年3月29日:固定在提交中。
-
n
在转发消息中未标准化为rn
。
- 用例:请求走私
- 要求:不将
n
解释为标头线结束的后端服务器。该标准允许服务器将n
转换为
。 - 风险:高。此错误可在符合标准的服务器上利用。
- 有效载荷:
GET / HTTP/1.1nHost: whatevernConnection: closenn
- 受影响的程序:
- Openlitespeed:
- 2023年11月3日:通过电子邮件报告。
- 2024年1月31日:仍然没有固定。
- 在终结器块之前没有额外的
rn
块状消息主体,而无需用Content-Length
替换Transfer-Encoding
标头。
- 用例:请求走私
- 要求:无。
- 风险:高。此错误可利用任意后端服务器。
- 有效载荷:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn17rn0rnrnGET / HTTP/1.1rnrnrnrn0rnrn
- 受影响的程序:
- OpenLiteSpeed
- 2023年11月30日:通过电子邮件报告。
- 2024年7月10日:固定在此日期之前或之前。
-
Transfer-Encoding: ,chunked
标头完整地转发,并且不被解释为等同于chunked
。
- 用例:请求走私
- 要求:一台解释的服务器
,chunked
分为相当于chunked
,标准表示您可以做到这一点。 - 风险:高。这是一个要求符合标准的后端的走私漏洞。
- 有效载荷:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月10日:通过电子邮件报告。
- 2023年11月28日:在提交中进行补丁。
- 解释和转发带有
+
, -
和0x
前缀的块大小。
- 用例:请求走私
- 要求:将块大小解释为最长有效前缀的服务器。
- 风险:高。请参阅服务器错误22。
- 有效载荷:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月10日:通过电子邮件报告。
- 2023年11月28日:在提交中进行补丁。
- 磅:
- 2023年10月10日:通过GH问题进行了报告。
- 2023年10月11日:通过CONSITS 60A4F42和F70DB92修复。
- 包含
x00
或n
的标头串联到先前的标头值中。
- 用例:请求走私
- 要求:任何符合标准的后端服务器。
- 风险:高。这是一个通用的请求走私漏洞。
- 有效载荷:
GET / HTTP/1.1rna:brncx00rnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月10日:通过电子邮件报告。
- 2023年11月29日:在提交中修补。
- 消息主体从
GET
请求中删除,而无需删除其Content-Length
标题。
- 用例:请求走私
- 要求:任何支持管道的后端服务器。
- 风险:高。这是一个通用的请求走私漏洞。
- 有效载荷:
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月28日:通过电子邮件报告。
- 2023年12月1日:在提交中进行修补。
- 转发包含多个
Content-Length
标头的请求,优先考虑最后一个。
- 用例:请求走私
- 要求:接受包含多个
Content-Length
标头的请求的服务器,优先考虑第一个。 - 风险:高。请参阅服务器错误23。
- Payload:
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月30日:通过电子邮件报告。
- 2024年7月10日:仍然没有固定。
- 转发包含
Content-Length
和Transfer-Encoding
的请求。
- 用例:请求走私
- 要求:将
Content-Length
优先于Transfer-Encoding
的服务器,或不支持Transfer-Encoding: chunked
。 - 风险:高。这是走私向量的经典要求。
- 有效载荷:
POST / HTTP/1.1rnHost: arnContent-Length: 5rnTransfer-Encoding: chunkedrnrn0rnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月30日:通过电子邮件报告。
- 2024年7月10日:仍然没有固定。
- 惠特(Whitespace)预装的块尺寸被接受和转发。
- 用例:???
- 要求:N/A。
- 风险:无
- 有效载荷:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn 0rnrn
- 受影响的程序:
- OpenBSD Relayd:
- 2023年11月30日:通过电子邮件报告。
- 2024年1月31日:仍然没有固定。
- 磅:
- 2023年10月15日:通过GH问题进行了报告。
- 2023年11月25日:固定在提交中。
- 包含多个
Transfer-Encoding: chunked
标头,并将其视为等同于单个此类标头。
- 用例:请求走私
- 要求:处理多个
Transfer-Encoding: chunked
标头不等于没有Transfer-Encoding: chunked
或连接多个Transfer-Encoding
标头,并将其块对处理chunked,chunked
与chunked
不同。 - 风险:中等。请参阅服务器错误21。
- 有效载荷:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn0rnrn
- 受影响的程序:
- 磅:
- 2023年10月7日:通过GH问题进行了报告。
- 2023年10月12日:固定在提交中。
奖励错误
这些是我们仅通过设置HTTP花园并发送示例请求来偶然发现的错误。他们并没有真正算在内,因为他们不需要使用花园,但是我认为我应该记录下来。
- null的论点传递给了触发器的不确定行为中的
memcpy
。
- 用例:???
- 要求:N/A。
- 风险:无
- 有效载荷:任何带有空的消息主体的请求,将转发给Proxy_FCGI后端。
- 受影响的程序:
- apache httpd:
- 2023年12月2日:通过Bugzilla问题进行了报告。
- 2023年12月19日:修订版1914775。
- UWSGI:
- 2024年1月1日:通过GH问题进行了报告。
- 2024年2月8日:在PR中进行补丁。
- 无使用后。
- 用例:DOS
- 要求:服务器使用
attach_server_session_to_client
- 风险:低。尽管这确实崩溃了,但很容易注意到,一个合理的人不会在生产中部署脆弱的实例。
- 有效载荷:任何请求。
- 受影响的程序:
- Apache流量服务器:
- 2023年7月31日:通过GH问题进行了报告。
- 2023年9月13日:通过PR修复。
- 在请求后发送一个额外的字节,并带有块状消息主体将服务器用segfault崩溃。
- 用例:DOS
- 要求:启用了FastCGI。
- 风险:高。这是一个崩溃服务器的微不足道的错误。
- 有效载荷:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrn0rnrnx00
- 受影响的程序:
- OpenBSD httpd:
- 2023年11月1日:通过电子邮件报告。
- 2023年11月8日:固定在提交中。
- 在发送响应之前,向传入的请求主体回荡。
- 用例:DOS
- 要求:启用了FastCGI。
- 风险:中等。对于任何块的消息,这将使请求流无效,这将破坏共享的连接。
- 有效载荷:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn
- 受影响的程序:
- OpenBSD httpd:
- 2024年1月4日:通过电子邮件报告。
- 2024年1月31日:仍然没有固定。
- 收到任何请求后的无效解释。
- 用例:DOS
- 要求:
mod_dir
具有某些配置选项启用。 - 风险:低。这个错误是如此明显,以至于没有一个理智会部署脆弱的服务器。
- 有效载荷:任何东西。
- 受影响的程序:
- apache httpd:
- 2024年1月24日:通过Bugzilla问题进行了报告。
- 2024年1月24日:仍然没有固定。
奖励奖金错误
这些是我们在花园获得HTTP/2支撑时发现的错误。我们删除了HTTP/2的支持,因为它有点半生,但很乐意将其添加回!
- 空格字符未从HTTP/2期间的字段值删除,从HTTP/1.1降级。
- 用例:???
- 要求:N/A。
- 风险:无
- 有效载荷:
PRI * HTTP/2.0rnrnSMrnrnx00x00x00x04x00x00x00x00x00x00x00Ex01x05x00x00x00x01x00n:authoritytlocalhostx00x05:pathx01/x00x07:methodx03GETx00x07:schemex04httpx00x05test1x03tat
- 受影响的程序:
- 使者:
- 2023年7月7日:通过GH发行报告。
- 2023年10月7日:仍然没有固定。
- H2O:
- 2023年7月7日:通过GH发行报告。
- 2023年7月18日:固定在PR#3256中。
- 清漆缓存:
- 2023年7月7日:通过GH发行报告。
- 2023年8月22日:固定在提交中。
- 空头名称在HTTP/2上保存至HTTP/1.1翻译,从而导致无效HTTP/1.1的产生。
- 用例:DOS
- 要求:正在执行HTTP/2降级,后端拒绝空标题(就像大多数人一样)。
- 风险:低。此错误可用于制作合理的服务器400,这将破坏连接共享。
- 有效载荷:
PRI * HTTP/2.0rnrnSMrnrnx00x00x00x04x00x00x00x00x00x00x00=x01x05x00x00x00x01x00n:authoritytlocalhostx00x05:pathx01/x00x07:methodx03GETx00x07:schemex04httpx00x00x00
- 受影响的程序:
- H2O:
- 2023年7月7日:通过GH发行报告。
- 2023年7月18日:固定在PR#3256中。