hacktricks/pentesting-web/h2c-smuggling.md

5.8 KiB
Raw Blame History

ヘッダースマグリングのアップグレード

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

最も重要な脆弱性を見つけて修正を迅速化します。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。無料でお試しください 今すぐ。

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


H2C スマグリング

HTTP2 Over Cleartext (H2C)

H2C、または http2 over cleartext は、標準のHTTP 接続を永続的なものにアップグレード することで、一時的なHTTP接続の通常から逸脱します。このアップグレードされた接続は、平文のHTTPの単一リクエストの性質とは異なり、継続的な通信のためにhttp2バイナリプロトコルを利用します。

スマグリングの問題の核心は、リバースプロキシの使用にあります。通常、リバースプロキシはHTTPリクエストを処理し、バックエンドに転送し、その後バックエンドの応答を返します。ただし、HTTPリクエストに Connection: Upgrade ヘッダーが存在する場合websocket接続で一般的に見られる、リバース プロキシはクライアントとサーバーの間に永続的な接続を維持 し、特定のプロトコルで必要な連続した交換を容易にします。H2C接続の場合、RFCへの遵守には、特定の3つのヘッダーが存在する必要があります

Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings

脆弱なプロキシ

脆弱性は、リバースプロキシがUpgradeおよび時折Connectionヘッダーを処理する方法に依存しています。次のプロキシは、プロキシパス中にこれらのヘッダーを暗黙的に転送し、それによってH2Cスマグリングを可能にします

  • HAProxy
  • Traefik
  • Nuster

一方、これらのサービスはプロキシパス中に両方のヘッダーを暗黙的に転送しません。ただし、UpgradeおよびConnectionヘッダーを無選別に転送するように不安全に構成されている可能性があります:

  • AWS ALB/CLB
  • NGINX
  • Apache
  • Squid
  • Varnish
  • Kong
  • Envoy
  • Apache Traffic Server

悪用

重要なのは、すべてのサーバーが、準拠したH2C接続アップグレードに必要なヘッダーを暗黙的に転送するわけではないということです。そのため、AWS ALB/CLB、NGINX、Apache Traffic Serverなどのサーバーは、H2C接続をブロックします。それでも、Connection: Upgradeバリアント(ConnectionヘッダーからHTTP2-Settings値を除外したもの)でテストする価値があります。なぜなら、一部のバックエンドが標準に準拠していない可能性があるからです。

{% hint style="danger" %} proxy_pass URL内で指定された特定のパス(例:http://backend:9999/socket.io)に関係なく、確立された接続はデフォルトでhttp://backend:9999になります。これにより、このテクニックを利用して、その内部エンドポイント内の任意のパスとやり取りすることが可能です。したがって、proxy_pass URL内でパスを指定してもアクセスが制限されません。 {% endhint %}

BishopFoxのh2csmugglerおよびassetnoteのh2csmugglerというツールは、H2C接続を確立することで、プロキシによって適用された保護を回避し、プロキシによって保護されたリソースにアクセスする試みを支援します。

この脆弱性に関する詳細情報、特にNGINXに関する情報については、この詳細なリソースを参照してください。