5.4 KiB
アップグレードヘッダースマグリング
htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したいまたは HackTricks をPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- **💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmで フォロー してください。
- ハッキングトリックを共有するために、PRを HackTricks と HackTricks Cloud のgithubリポジトリに提出してください。
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
H2Cスマグリング
クリアテキスト上のHTTP2(H2C)
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に関する情報は、この詳細なリソースを参照してください。