hacktricks/pentesting-web/h2c-smuggling.md

5.4 KiB
Raw Blame History

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

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

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

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


H2Cスマグリング

クリアテキスト上のHTTP2H2C

H2C、またはクリアテキスト上のhttp2は、標準の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に関する情報は、この詳細なリソースを参照してください。