hacktricks/pentesting-web/h2c-smuggling.md

66 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# アップグレードヘッダースマグリング
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で **フォロー** してください。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリに提出してください。
</details>
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
### H2Cスマグリング <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
#### クリアテキスト上のHTTP2H2C<a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
H2C、または**クリアテキスト上のhttp2**は、標準のHTTP **接続を永続的なものにアップグレード**することで、一時的なHTTP接続の通常から逸脱します。このアップグレードされた接続は、平文のHTTPの単一リクエストの性質とは異なり、継続的な通信のためにhttp2バイナリプロトコルを利用します。
スマグリングの問題の核心は、**リバースプロキシ**の使用に起因します。通常、リバースプロキシはHTTPリクエストを処理し、バックエンドに転送してからバックエンドの応答を返します。ただし、HTTPリクエストに `Connection: Upgrade` ヘッダーが存在する場合websocket接続で一般的に見られる、リバースプロキシはクライアントとサーバー間の**永続的な接続を維持**し、特定のプロトコルで必要な継続的な交換を容易にします。H2C接続の場合、RFCへの遵守には、3つの特定のヘッダーが存在する必要があります。
```
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings
```
### 脆弱なプロキシ <a href="#exploitation" id="exploitation"></a>
脆弱性は、リバースプロキシが`Upgrade`および時折`Connection`ヘッダーを処理する方法に依存しています。次のプロキシは、プロキシパス中にこれらのヘッダーを暗黙的に転送し、それによってH2Cスマグリングを可能にします
- HAProxy
- Traefik
- Nuster
一方、次のサービスはプロキシパス中に両方のヘッダーを暗黙的に転送しません。ただし、`Upgrade`および`Connection`ヘッダーをフィルタリングせずに転送するように不適切に構成されている可能性があります:
- AWS ALB/CLB
- NGINX
- Apache
- Squid
- Varnish
- Kong
- Envoy
- Apache Traffic Server
#### 悪用 <a href="#exploitation" id="exploitation"></a>
重要なのは、すべてのサーバーが、準拠した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**](https://github.com/BishopFox/h2csmuggler)および[**assetnoteのh2csmuggler**](https://github.com/assetnote/h2csmuggler)というツールは、H2C接続を確立することで、プロキシによって適用された保護を**回避**する試みを支援します。
この脆弱性に関する詳細情報、特にNGINXに関する情報は、[**この詳細なリソース**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection)を参照してください。