Proxy / WAF Protections Bypass
Nginx ACLルールのパス名操作によるバイパス
Nginxのルール例:
NodeJS - Express
Nginx Version | Node.js Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Flask
Nginx Version | Flask Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Spring Boot
Nginx Version | Spring Boot Bypass Characters |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
PHP-FPM
Nginx FPM configuration:
Nginxは/admin.php
へのアクセスをブロックするように設定されていますが、/admin.php/index.php
にアクセスすることでこれをバイパスすることが可能です。
防止方法
Mod Securityルールのバイパス
パスの混乱
この投稿では、ModSecurity v3(3.0.12まで)がREQUEST_FILENAME
変数を適切に実装していなかったことが説明されています。この変数はアクセスされたパス(パラメータの開始まで)を含むはずでした。これは、パスを取得するためにURLデコードを実行したためです。
したがって、Mod Securityでのhttp://example.com/foo%3f';alert(1);foo=
というリクエストは、%3f
が?
に変換されてURLパスが終了するため、パスが単に/foo
であると仮定しますが、実際にサーバーが受信するパスは/foo%3f';alert(1);foo=
になります。
変数REQUEST_BASENAME
とPATH_INFO
もこのバグの影響を受けました。
Mod Securityのバージョン2でも同様のことが起こり、特定の拡張子を持つファイル(例:.bak
などのバックアップファイル)へのアクセスを防ぐ保護をバイパスすることができました。単にドットをURLエンコードした%2e
を送信することで、例えば、https://example.com/backup%2ebak
。
AWS WAF ACLのバイパス
不正なヘッダー
この研究によると、AWS WAFが適用されたHTTPヘッダーをバイパスすることが可能であり、AWSが適切に解析しなかったがバックエンドサーバーが解析した「不正な」ヘッダーを送信することで実現できました。
例えば、次のリクエストにSQLインジェクションを含むヘッダーX-Queryを送信することが挙げられます:
参考
Last updated