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 | 不 |
雲耀 | 不 |
快速地 | 不 |
Google經典 | 不 |
谷歌_全球 | 不 |
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
- 受影響的程序:
- 阿帕契流量伺服器:
- 2023 年 10 月 10 日:透過 GH 問題報告。
- 2024 年 2 月 13 日:已在 PR 中修復。
- 佔位符:)
-
Transfer-Encoding: ,chunked
標頭原封不動地轉發,並解釋為相當於chunked
。
- 使用案例:請求走私
- 要求:伺服器既忽略未知的
Transfer-Encoding
,又將,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
在標頭值中被錯誤轉送。
- 使用案例:請求走私
- 要求:伺服器將
r
視為與標頭欄位中的rn
等效。 - 風險:中。請參閱伺服器錯誤 13。
- 有效負載:
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn
- Google Cloud 經典應用程式負載平衡器:
- 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
- 受影響的程序:
- HA代理:
- 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
- 受影響的程序:
- HA代理:
- 2023 年 9 月 19 日:透過電子郵件報告。
- 2024 年 1 月 31 日:已在提交中修復。
- OpenLite速度:
- 2023 年 11 月 3 日:透過電子郵件報告。
- 2024 年 7 月 10 日:在此日期或之前修復。
- 裸露的
n
被接受作為區塊行終止符。
- 使用案例:?
- 要求:不適用
- 風險:無
- 有效負載:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- 受影響的程序:
- HA代理:
- 2024 年 1 月 25 日:透過電子郵件報告。
- 2024 年 1 月 30 日:在提交 7b737da 和 4837e99 中修復。
- 不帶
:
的字段行按原樣轉送。
- 使用案例:請求走私
- 要求:後端伺服器會錯誤解釋不帶
:
的標頭欄位行。 - 風險:中。請參閱感測器錯誤 28 和 37。
- 有效負載:
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- 受影響的程序:
- OpenLite速度:
- 2023 年 11 月 3 日:透過電子郵件報告。
- 2024 年 7 月 10 日:在此日期或之前修復。
- 如果無法辨識
Transfer-Encoding
值,則包含Content-Length
和Transfer-Encoding
標頭的請求將會按原樣轉送。
- 使用案例:請求走私
- 需求:後端伺服器將
,chunked
視為等同於chunked
,並優先考慮Transfer-Encoding
而非Content-Length
。這些行為是標準所允許的。 - 風險:高。這允許請求走私到符合標準的伺服器。
- 有效負載:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn
- 受影響的程序:
- OpenLite速度:
- 2023 年 11 月 3 日:透過電子郵件報告。
- 2024 年 7 月 10 日:在此日期或之前修復。
- 磅:
- 2024 年 2 月 4 日:透過 GH 問題報告。
- 2024 年 3 月 29 日:已在提交中修復。
- 在轉發的訊息中,
n
未標準化為rn
。
- 使用案例:請求走私
- 要求:後端伺服器不將
n
解釋為以標題行結尾的行。該標準允許伺服器將n
轉換為
。 - 風險:高。此錯誤可針對符合標準的伺服器進行利用。
- 有效負載:
GET / HTTP/1.1nHost: whatevernConnection: closenn
- 受影響的程序:
- OpenLite速度:
- 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
headers 被完整轉發,並且不被解釋為等同於chunked
。
- 使用案例:請求走私
- 要求:伺服器將
,chunked
解釋為等同於chunked
,標準規定您可以這樣做。 - 風險:高。這是一個請求走私漏洞,可用於針對符合標準的後端。
- 有效負載:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- 受影響的程序:
- OpenBSD 轉送:
- 2023 年 11 月 10 日:透過電子郵件報告。
- 2023 年 11 月 28 日:在提交中修補。
- 帶有
+
、 -
和0x
前綴的區塊大小將被解釋和轉發。
- 使用案例:請求走私
- 要求:將區塊大小解釋為其最長有效前綴的伺服器。
- 風險:高。請參閱伺服器錯誤 22。
- 有效負載:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- 受影響的程序:
- OpenBSD 轉送:
- 2023 年 11 月 10 日:透過電子郵件報告。
- 2023 年 11 月 28 日:在提交中修補。
- 磅:
- 2023 年 10 月 10 日:透過 GH 問題報告。
- 2023 年 10 月 11 日:透過提交 60a4f42 和 f70db92 修復。
- 包含
x00
或n
的標頭將會連接到前一個標頭的值。
- 使用案例:請求走私
- 要求:任何符合標準的後端伺服器。
- 風險:高。這是一個通用請求走私漏洞。
- 有效負載:
GET / HTTP/1.1rna:brncx00rnrn
- 受影響的程序:
- OpenBSD 轉送:
- 2023 年 11 月 10 日:透過電子郵件報告。
- 2023 年 11 月 29 日:在提交中修補。
- 訊息正文從
GET
請求中剝離,但不刪除其Content-Length
標頭。
- 使用案例:請求走私
- 要求:任何支援管道的後端伺服器。
- 風險:高。這是一個通用請求走私漏洞。
- 有效負載:
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- 受影響的程序:
- OpenBSD 轉送:
- 2023 年 11 月 28 日:透過電子郵件報告。
- 2023 年 12 月 1 日:在提交中修補。
- 包含多個
Content-Length
標頭的請求將被轉發,優先考慮最後一個標頭。
- 使用案例:請求走私
- 要求:伺服器接受包含多個
Content-Length
標頭的請求,優先考慮第一個標頭。 - 風險:高。請參閱伺服器錯誤 23。
- 有效負載:
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn
- 受影響的程序:
- OpenBSD 轉送:
- 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 轉送:
- 2023 年 11 月 30 日:透過電子郵件報告。
- 2024 年 7 月 10 日:仍未修復。
- 接受並轉送以空格為前綴的區塊大小。
- 使用案例:?
- 要求:不適用
- 風險:無
- 有效負載:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn 0rnrn
- 受影響的程序:
- OpenBSD 轉送:
- 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 Garden 並發送範例請求偶然發現的錯誤。它們並不真正重要,因為它們不需要使用花園,但我認為無論如何我都應該記錄它們。
- 傳遞給
memcpy
NULL 參數會觸發未定義的行為。
- 使用案例:?
- 要求:不適用
- 風險:無
- 有效負載:任何帶有空訊息正文的請求將被轉發到 proxy_fcgi 後端。
- 受影響的程序:
- 阿帕奇httpd:
- 2023 年 12 月 2 日:透過 Bugzilla 問題報告。
- 2023 年 12 月 19 日:在修訂版 1914775 中修復。
- 烏沃斯吉:
- 2024 年 1 月 1 日:透過 GH 問題報告。
- 2024 年 2 月 8 日:在 PR 中進行了修補。
- 釋放後使用。
- 用例:DoS
- 需求:伺服器使用
attach_server_session_to_client
- 風險:低。雖然這確實會導致 ATS 崩潰,但很容易注意到,一個理智的人不會在生產中部署易受攻擊的實例。
- 有效負載:任何請求。
- 受影響的程序:
- 阿帕契流量伺服器:
- 2023 年 7 月 31 日:透過 GH 問題報告。
- 2023 年 9 月 13 日:透過 PR 修復。
- 在帶有分塊訊息正文的請求之後發送額外的位元組會導致伺服器因段錯誤而崩潰。
- 用例: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 日:仍未修復。
- 收到任何請求後取消引用 NULL。
- 用例:DoS
- 要求:
mod_dir
透過某些配置選項啟用。 - 風險:低。這個錯誤非常明顯,任何理智的人都不會部署易受攻擊的伺服器。
- 有效負載:任何東西。
- 受影響的程序:
- 阿帕奇httpd:
- 2024 年 1 月 24 日:透過 Bugzilla 問題報告。
- 2024 年 1 月 24 日:仍未修復。
獎金獎金錯誤
這些是我們在 Garden 支援 HTTP/2 時發現的錯誤。我們刪除了 HTTP/2 支持,因為它有點不成熟,但希望能夠將其加回!
- 在 HTTP/2 降級到 HTTP/1.1 期間,不會從欄位值中刪除空格字元。
- 使用案例:?
- 要求:不適用
- 風險:無
- 有效負載:
PRI * HTTP/2.0rnrnSMrnrnx00x00x00x04x00x00x00x00x00x00x00Ex01x05x00x00x00x01x00n:authoritytlocalhostx00x05:pathx01/x00x07:methodx03GETx00x07:schemex04httpx00x05test1x03tat
- 受影響的程序:
- 使者:
- 2023 年 7 月 7 日:透過 GH 問題報告。
- 2023 年 10 月 7 日:仍未修復。
- 水:
- 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 降級,且後端拒絕空標頭名稱(大多數情況都是如此)。
- 風險:低。這個bug可以用來製作一個合理的伺服器400,這將破壞連線共享。
- 有效負載:
PRI * HTTP/2.0rnrnSMrnrnx00x00x00x04x00x00x00x00x00x00x00=x01x05x00x00x00x01x00n:authoritytlocalhostx00x05:pathx01/x00x07:methodx03GETx00x07:schemex04httpx00x00x00
- 受影響的程序:
- 水:
- 2023 年 7 月 7 日:透過 GH 問題報告。
- 2023 年 7 月 18 日:在 PR #3256 中修復。