HTTP ガーデン
HTTP ガーデンは、コンポーザブルに構成された HTTP サーバーとプロキシのコレクションであり、脆弱性の発見をより簡単にする方法でそれらと対話するためのスクリプトも含まれています。 HTTP Garden で見つかる脆弱性のクールなデモについては、ShmooCon 2024 の講演をご覧ください。
謝辞
このプロジェクトを可能にしてくれた Galois、Trail of Bits、Narf Industries、ダートマス大学の友人たちに感謝します。
この資料は、契約番号 HR0011-19-C-0076 に基づいて国防高等研究計画局 (DARPA) によって支援された研究に基づいています。
はじめる
依存関係
- HTTP ガーデンは 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++ が含まれています。
- いくつかの HTTP サーバーとプロキシを構築します。
docker compose build gunicorn hyper nginx haproxy nginx_proxy
もちろん、HTTP ガーデンには、私たちが構築したばかりのターゲットよりもはるかに多くのターゲットがあります。ただ、それらをすべて構築するには時間がかかります。これらのいくつかを構築するだけでも数分かかります。
ランニング
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- 基本的な GET リクエストを HAProxy 経由でフィルタリングし、次に 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
ディレクトリには、ガーデン内の各 HTTP サーバーとトランスデューサのサブディレクトリが含まれています。各ターゲットは独自の Docker イメージを取得します。すべてのプログラムは可能な限りソースからビルドされます。各ターゲットの複数のバージョンを簡単に構築できるように、すべてのターゲットはリポジトリ URL ( APP_REPO
)、ブランチ名 ( APP_BRANCH
)、およびコミット ハッシュ ( APP_VERSION
) でパラメータ化されます。
tools
tools
ディレクトリには、サーバーとの対話に使用されるスクリプトが含まれています。その中に、次のものがあります。
-
diagnose_anomalies.py
: ファジング中に無視される、テスト対象のシステム内の無害な HTTP 解析の癖を列挙するためのスクリプト。 -
repl.py
: HTTP ガーデンへの主要なユーザー インターフェイス。 -
update.py
: docker-compose.yml
内のコミット ハッシュを更新するスクリプト。 - ...ユーザー向けではないスクリプトがさらにいくつかあります。
ターゲット
HTTPサーバー
名前 | ローカルで実行しますか? | 報道が集まりましたか? |
---|
aiohttp | はい | はい |
apache_httpd | はい | はい |
apache_tomcat | はい | いいえ |
チェルート | はい | はい |
cpp_httplib | はい | いいえ |
dart_stdlib | はい | いいえ |
日食_グリズリー | はい | いいえ |
eclipse_jetty | はい | いいえ |
速いhttp | はい | いいえ |
go_stdlib | はい | いいえ |
ガニコーン | はい | はい |
h2o | はい | はい |
haproxy_fcgi | はい | いいえ |
ハイパー | はい | いいえ |
ハイパーコーン | はい | はい |
クトル | はい | いいえ |
リベベント | はい | いいえ |
libmicrohttpd | はい | いいえ |
リブスープ | はい | いいえ |
ライトTPD | はい | はい |
マングース | はい | はい |
ネットティ | はい | いいえ |
nginx | はい | はい |
ノードstdlib | はい | いいえ |
オープンライトスピード | はい | いいえ |
openwrt_uhttpd | はい | はい |
php_stdlib | はい | いいえ |
phusion_passenger | はい | いいえ |
プロトコル_http1 | はい | いいえ |
プーマ | はい | いいえ |
サービストーク | はい | いいえ |
竜巻 | はい | いいえ |
ねじれた | はい | いいえ |
ユニコーン | はい | いいえ |
ユビコーン | はい | はい |
ウェイトレス | はい | はい |
ウェブリック | はい | いいえ |
iis | いいえ | いいえ |
openbsd_httpd | いいえ | いいえ |
HTTP トランスデューサー
名前 | ローカルで実行しますか? |
---|
apache_httpd_proxy | はい |
apache_traffic_server | はい |
go_stdlib_proxy | はい |
h2o_proxy | はい |
ハプロキシ | はい |
haproxy_invalid | はい |
lighttpd_proxy | はい |
nghttpx | はい |
nginx_proxy | はい |
openlitespeed_proxy | はい |
ピンゴラ | はい |
ポンド | はい |
イカ | はい |
ワニス | はい |
アカマイ | いいえ |
awselb_classic | いいえ |
awselb_application | いいえ |
aws_クラウドフロント | いいえ |
クラウドフレア | いいえ |
早く | いいえ |
グーグルクラシック | いいえ |
グーグルグローバル | いいえ |
iis_proxy | いいえ |
openbsd_relayd | いいえ |
バグ
これらは、HTTP Garden を使用して発見されたバグです。独自のものを見つけたら、PR を送信してこのリストに追加してください。各バグは次のフィールドで説明されます。
- ユースケース: 攻撃者がこのバグを利用して実行できる攻撃の種類
- 要件: このバグが悪用されるために必要な構成オプションまたは他のサーバー。
- リスク: なし|低|中|高、その後に短い説明が続きます。
- なし: このバグは悪用できない可能性があります。
- Low: このバグは悪用可能かもしれませんが、非常に奇妙な設定が必要か、見たことのない方法で動作するプロキシに依存する可能性があります。
- 中: このバグは悪用可能である可能性がありますが、中程度の影響しかないか、サーバーとトランスデューサーのありそうもない組み合わせが必要です。
- 高: このバグは、一般的な構成およびサーバー/トランスデューサーの組み合わせで悪用可能です。
- ペイロード: バグを引き起こすペイロードの例
- 影響を受けるプログラム: このバグが存在するサーバーのリストと、レポートとパッチのタイムライン。いくつかの実装バグは一般的であるため、これによりリストが乱雑になるのを防ぎます:)
サーバーのバグ
これらは、サーバーがリクエストを受け入れて解釈する方法におけるバグです。
- 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日:未修正のまま。
- ヘッダー名の末尾から空白が誤って削除されます。
- ユースケース: 密輸のリクエスト
- 要件:
:
の前の空白をヘッダー名の一部とみなすトランスデューサ。 - リスク: 低い。私は脆弱なトランスデューサーを知りませんが、James Kettle 氏は少なくとも 1 つは存在すると述べています。
- ペイロード:
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 日: 未修正のままです。
- オープンライト速度:
- 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号・広報にて報道。
- 2023 年 10 月 15 日: コミットで修正されました。
- HTTP メソッドは、最長の有効なプレフィックスとして解釈されます。
- 使用例: ACL バイパス
- 要件: 無効なメソッド名をそのまま転送するトランスデューサー。
- リスク: 中。該当するバグは報告されていないため説明を省略します。
- ペイロード:
G=":<>(e),[T];?" /get HTTP/1.1rnrn
- 影響を受けるプログラム:
- AIOHTTP:
- 2023年10月14日:GH号・広報にて報道。
- 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日:広報より報告。
- 2023 年 10 月 18 日: 上記の PR のマージにより修正されました。
- ダフネ:
- 2024年2月4日:GH号にて報道。
- 2024 年 2 月 10 日: コミットで修正されました。
- マングース:
- 2023年10月13日:GH号にて報道。
- 2023 年 12 月 5 日: コミットで修正されました。
-
n
リクエスト行の分離空白として使用できます。
- ユースケース: 密輸のリクエスト
- 要件: HTTP/0.9 リクエストを
n
そのままの状態で転送し、基礎となる接続を再利用するトランスデューサ。 - リスク: 低い。脆弱なトランスデューサーは知りません。
- ペイロード:
GET /nHTTP/1.1rnrn
- 影響を受けるプログラム:
- AIOHTTP:
- 2023年10月17日:広報より報告。
- 2023 年 10 月 18 日: マージによって修正されました。
- Python
int
コンストラクターはContent-Length
値の解析に使用されるため、 _
、 +
、および-
は誤って解釈されます。
- ユースケース: 密輸のリクエスト
- 要件:
Content-Length
値を最長の有効なプレフィックスとして解釈しますが、それらをそのまま転送するトランスデューサー。 - リスク: 低い。私は脆弱なトランスデューサーを知りませんが、Matt Grenfeldt 氏は少なくとも 1 つは存在すると述べています。
- ペイロード:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789
- 影響を受けるプログラム:
- AIOHTTP:
- 2023 年 8 月 1 日: GH セキュリティ アドバイザリを通じて報告されました。
- 2023 年 10 月 7 日: リリース 3.8.6 で修正されました。
- CPython http.サーバー:
- 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.サーバー:
- 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日:未修正のまま。オープンライト速度:
- 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 日: コミットで修正されました。
- ライトTPD:
- 2023 年 8 月 1 日: 問題トラッカー経由で報告されました。
- 2023 年 8 月 3 日: コミットで修正されました。
- オープンライト速度:
- 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 日: コミットで修正されました。
- Node.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
- 影響を受けるプログラム:
- H2O:
- 2023 年 8 月 1 日: メールで報告。
- 2023 年 12 月 12 日: PR を修正しました。
- オープンライト速度:
- 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
- 影響を受けるプログラム:
- H2O:
- 2023 年 11 月 30 日: メールで報告。
- 2024年7月10日:GH号にて報道。
- 2024 年 7 月 10 日: 未修正のままです。
- オープンライト速度:
- 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 日: マージで修正されました。
- オープンライト速度:
- 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 日: コミットで修正されました。
- オープンライト速度:
- 2023 年 7 月 31 日: メールで報告されました。
- 2023 年 8 月 10 日: OLS 1.7.18 で修正されました。
- ヘッダー ブロックが
rnrX
で誤って終了する可能性があります。X X
任意のバイトです。
- 使用事例: ???
- 要件:
r
で始まるヘッダー名を転送する、またはr
改行行頭の空白として許可するトランスデューサー。 - リスク: 低い。私はそのような変換器を知りません。
- ペイロード:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn
- 影響を受けるプログラム:
- Node.js:
- 2023 年 7 月 7 日: HackerOne レポート経由で報告。
- 2023 年 7 月 31 日: llhttp コミットで修正されました。
- 2023 年 9 月 16 日: ノードコミットで修正されました。
- チャンク行が
rX
で誤って終了します。X X
任意のバイトです。
- 使用例: 密輸をリクエストします。
- 要件: チャンク拡張子のオプションの空白内で
r
転送するトランスデューサー。 - リスク: 高。トランスデューサーのバグ 3 を参照してください。
- ペイロード:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 影響を受けるプログラム:
- Node.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
- 影響を受けるプログラム:
- オープンライト速度:
- 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
- 影響を受けるプログラム:
- オープンライト速度:
- 2023 年 7 月 31 日: メールで報告されました。
- 2023 年 8 月 10 日: OLS 1.7.18 で修正されました。
- ヘッダー値は
x00
で切り捨てられます。
- 使用例: ACL バイパス
- 要件: ヘッダー値で
x00
を転送するトランスデューサー。 - リスク: 中。トランスデューサーのバグ 12 を参照してください。
- ペイロード:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn
- 影響を受けるプログラム:
- オープンライト速度:
- 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 XX
任意の 2 バイトです。
- ユースケース: 密輸のリクエスト
- 要件: トレーラー フィールドを保持し、トレーラー フィールド内の
:
と値の間に空白を追加しないトランスデューサー。 (ATS もそのようなサーバーの 1 つです) - リスク: 高。このバグを悪用するための要件では、トランスデューサが標準に違反する必要はありません。
- ペイロード:
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-text を転送できます。
- ペイロード:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn
- 影響を受けるプログラム:
- ウェイトレス:
- 2024年2月4日:GH号にて報道。
- 2024 年 2 月 4 日: コミットで修正されました。
- 空の
Content-Length
値は0
と同等であると解釈され、後続のContent-Length
値よりも優先されます。
- ユースケース: 密輸のリクエスト
- 要件: 空でない 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
以外の Transfer-Encoding を転送するトランスデューサー。これは標準で許可されています。 - リスク: 高。これにより、一部の規格に準拠したトランスデューサに対するリクエストの密輸が可能になります。
- ペイロード:
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
-prefixed 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 日: 電子メールで修正が通知されました。
- Apacheトラフィックサーバー:
- 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
- 影響を受けるプログラム:
- Apacheトラフィックサーバー:
- 2023年8月2日:GH号にて報道。
- 2023 年 8 月 6 日: PR により修正されました。
- 許可されていないバイトはヘッダー名内で受け入れられ、転送されます。
- ユースケース: 密輸のリクエスト
- 要件: ヘッダー名内のこれらの無効なバイトを誤って解釈するサーバー。
- リスク: 中。サーバーのバグ 41 を参照してください。
- ペイロード:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn
- 影響を受けるプログラム:
- Apacheトラフィックサーバー:
- 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とトリートを無視するサーバーは,chunked
chunked
とは異なるものとしてチャンクされています。 - リスク:高。サーバーバグ21を参照してください。
- ペイロード:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn
- 影響を受けるプログラム:
- Azure CDN:
- 2023年10月15日:MSRC脆弱性レポートを介して報告されています。
- 2023年11月29日:この日付以前に修正。
- 2023年12月12日:「このケースは、HTTP密輸は脆弱性を考慮しておらず、このケースを締めくくるため、MSRCによるサービスのためのバーを満たしていません。」
- 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日:この日付以前に修正。
- Bare
n
、チャンクラインターミネーターとして受け入れられます。
- 使用事例: ???
- 要件:n/a
- リスク:なし
- ペイロード:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- 影響を受けるプログラム:
- haproxy:
- 2024年1月25日:電子メールで報告されました。
- 2024年1月30日:Commmits 7B737DAおよび4837E99で修正。
- no
:
no:as-as-asのフィールドライン。
- ユースケース:密輸をリクエストします
- 要件:ヘッダーフィールドラインを誤解しているバックエンドサーバー
:
- リスク:中程度。トランスデューサーのバグ28および37を参照してください。
- ペイロード:
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- 影響を受けるプログラム:
- OpenLiteSpeed:
- 2023年11月3日:電子メールで報告されています。
- 2024年7月10日:この日付以前に修正。
-
Content-Length
とTransfer-Encoding
ヘッダーの両方を含むリクエストは、 Transfer-Encoding
値が認識されていない場合、そのまま転送されます。
- ユースケース:密輸をリクエストします
- 要件:処理し
,chunked
chunked
に相当するものとしてチャンクし、 Content-Length
超えてTransfer-Encoding
を優先するバックエンドサーバー。これらの動作は標準によって許可されます。 - リスク:高。これにより、標準に準拠したサーバーへの密輸要求が可能になります。
- ペイロード:
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日:infixedのままです。
- ターミネーターチャンクの前に余分な
rn
含むチャンクされたメッセージ本文は、 Transfer-Encoding
ヘッダーをContent-Length
に置き換えることなく、チャンキングされていません。
- ユースケース:密輸をリクエストします
- 要件:なし。
- リスク:高。このバグは、任意のバックエンドサーバーに対して悪用可能です。
- ペイロード:
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 reayd:
- 2023年11月10日:電子メールで報告されています。
- 2023年11月28日:コミットでパッチが適用されました。
-
+
、 -
、および0x
プレフィックスを使用したチャンクサイズは解釈され、転送されます。
- ユースケース:密輸をリクエストします
- 要件:チャンクサイズを最も長い有効なプレフィックスとして解釈するサーバー。
- リスク:高。サーバーバグ22を参照してください。
- ペイロード:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- 影響を受けるプログラム:
- OpenBSD reayd:
- 2023年11月10日:電子メールで報告されています。
- 2023年11月28日:コミットでパッチが適用されました。
- ポンド:
- 2023年10月10日:GH問題を介して報告されています。
- 2023年10月11日:Commits 60A4F42およびF70DB92経由で修正。
-
x00
またはn
を含むヘッダーは、以前のヘッダーの値に連結されます。
- ユースケース:密輸をリクエストします
- 要件:標準に準拠したバックエンドサーバー。
- リスク:高。これは、脆弱性を密輸する一般的なリクエストです。
- ペイロード:
GET / HTTP/1.1rna:brncx00rnrn
- 影響を受けるプログラム:
- OpenBSD reayd:
- 2023年11月10日:電子メールで報告されています。
- 2023年11月29日:コミットでパッチが適用されました。
- メッセージ本文は、
Content-Length
ヘッダーを削除せずにGET
リクエストから剥奪されます。
- ユースケース:密輸をリクエストします
- 要件:パイプラインをサポートするバックエンドサーバー。
- リスク:高。これは、脆弱性を密輸する一般的なリクエストです。
- ペイロード:
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- 影響を受けるプログラム:
- OpenBSD reayd:
- 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 reayd:
- 2023年11月30日:電子メールで報告されています。
- 2024年7月10日:infixedのままです。
-
Content-Length
とTransfer-Encoding
両方を含むリクエストは転送されます。
- ユースケース:密輸をリクエストします
- 要件:
Transfer-Encoding
よりもContent-Length
を優先するサーバー、またはTransfer-Encoding: chunked
をサポートしないサーバー。 - リスク:高。これは、ベクトルを密輸する古典的なリクエストです。
- ペイロード:
POST / HTTP/1.1rnHost: arnCon