
James Kettle氏の(CVE-2025-32094)「HTTP/1.1 must die: the desync endgame」をテストするためのGoツールとNucleiテンプレート
このリポジトリには、James Kettle(PortSwigger)による画期的な研究に基づき、HTTP/1 リクエストスマグリング(desync)脆弱性を検出するための防御的セキュリティツールが含まれています。
この成果は、以下の技術に直接触発され、実装しています:
これらのツールに実装された攻撃パターン、技術、検出手法は、主要なウェブインフラストラクチャプロバイダーにわたる HTTP/1.1 プロトコル実装の根本的な欠陥を明らかにした James Kettle の先駆的な研究に基づいています。
James Kettle の研究は、以下に影響する脆弱性を実証しました:
HTTP/1.1 の曖昧なリクエスト境界定義は、James Kettle が「極度の曖昧さ」と呼んだ、リクエストの開始と終了に関する問題を引き起こします。これにより、フロントエンドとバックエンドのサーバー間でパーサーの不整合が生じ、高度なリクエストスマグリング攻撃が可能になります。これらのツールは、防御的セキュリティテストのためにそのような脆弱性を特定するのに役立ちます。
http1-desync-test.go)複数の攻撃パターンを実装した、包括的な HTTP/1 desync 脆弱性テスターです。
Content-Length: 0 の処理の違いを悪用Expect: 100-continue を使用Content-Length と Transfer-Encoding の競合をテスト# リポジトリのクローン
git clone https://github.com/nconsolo/echteeteepee.git
cd echteeteepee
# 依存関係のインストール
go mod download
# ツールのビルド
go build -o http1-desync-test http1-desync-test.go
# すべての攻撃パターンをテスト
./http1-desync-test -target https://example.com
# 特定の攻撃パターンをテスト
./http1-desync-test -target https://example.com -test vh
# 詳細出力を有効にする
./http1-desync-test -target https://example.com -verbose
# カスタムタイムアウトを設定
./http1-desync-test -target https://example.com -timeout 10s
-target: ターゲット URL(必須)-test: テストタイプ: all、vh、0cl、expect、double、clte(デフォルト: all)-timeout: リクエストタイムアウト(デフォルト: 5s)-verbose: 生のリクエスト/レスポンスを表示する詳細出力を有効化nuclei-templates/http1-desync.yaml)大規模に HTTP/1 desync 脆弱性を検出するための Nuclei 自動スキャンテンプレートです。
# Nuclei のインストール(未インストールの場合)
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# テンプレートを Nuclei テンプレートディレクトリにコピー
cp nuclei-templates/http1-desync.yaml ~/.nuclei-templates/
# 単一ターゲットのスキャン
nuclei -u https://example.com -t nuclei-templates/http1-desync.yaml
# 複数ターゲットのスキャン
nuclei -l targets.txt -t nuclei-templates/http1-desync.yaml
# レート制限付きスキャン
nuclei -u https://example.com -t nuclei-templates/http1-desync.yaml -rl 10
すべての攻撃パターンは James Kettle の研究結果と実証済みの悪用技術に基づいています。
出典: James Kettle の「HTTP/1 Must Die」研究
フロントエンドプロキシがあるリクエスト境界を認識する一方で、バックエンドサーバーが別の境界を認識するという不整合を悪用します。攻撃ペイロードは、フロントエンドにはヘッダーデータに見えるものの中に隠れたリクエストを埋め込みますが、バックエンドはそれを独立したリクエストとして解釈します。
研究からの例: 主要な CDN プロバイダーにおけるパーサーの違いを実証するために使用されました。
出典: James Kettle の IIS および T-Mobile 脆弱性の発見
サーバー間での Content-Length: 0 ヘッダーの解釈の違いを利用します。一部のサーバーは CL=0 の場合にボディを無視しますが、他のサーバーはそれを処理するため、リクエスト境界の混乱を引き起こします。
実際の影響: IIS サーバーおよび T-Mobile インフラストラクチャに対して実際に悪用されました。
出典: James Kettle の T-Mobile および LastPass 研究
フロントエンドとバックエンドが継続処理を異なる方法で扱う Expect: 100-continue メカニズムを悪用します。これにより、フロントエンドが 100-continue レスポンスを待っている間にリクエストをスマグリングする機会が生まれます。
研究背景: T-Mobile および LastPass の認証システムに対して実証されました。
出典: James Kettle の高度な desync 手法
複数の desync 攻撃を連鎖させてレスポンスキューを汚染し、攻撃者が他のユーザーが受け取るレスポンスを制御できるようにします。これは研究の中で最も高度な攻撃の一つです。
重要な発見: 正規ユーザーに悪意のあるレスポンスを配信することで、サイトの完全な乗っ取りを可能にします。
出典: James Kettle による中核的な HTTP/1.1 曖昧さの研究
Content-Length と Transfer-Encoding: chunked ヘッダーの間の競合を悪用します。サーバーによってこれらのヘッダーの優先順位が異なり、リクエストスマグリングを可能にするパーサーの不整合が生じます。
基礎: これらの競合は、James Kettle が HTTP/1.1 仕様で特定した根本的な欠陥を表しています。
James Kettle の研究方法論に基づき、これらのツールは以下を探します:
James Kettle の影響分類に従います:
これらのツールは以下を目的としています:
以下の目的でこれらのツールを使用しないでください:
James Kettle の方法論に従い、ツールは desync 状態を適切にテストするために永続的な HTTP/1.1 接続を維持します。各テストは単一の TCP 接続を作成し、パーサーの違いを観察するために複数のリクエストを送信します。
攻撃ペイロードは、James Kettle が研究で使用した正確なパターンに基づいて慎重に作成され、彼が文書化したサーバー動作との互換性を確保しています。
検出ロジックは、James Kettle が 35万ドル以上のバグ報奨金研究で成功した desync 攻撃を特定するために使用したのと同じ指標を実装しています。
James Kettle の発見と推奨事項に基づきます:
MIT ライセンス - 詳細は LICENSE ファイルを参照してください
これらのツールは、教育および防御的なセキュリティ目的でのみ提供されます。ユーザーは、システムをテストする前に適切な認可を確保する責任があります。著者は、これらのツールの誤用またはそれによって引き起こされた損害について一切の責任を負いません。