Hello there, ('ω')ノ
ブラウザ URI 正規化を使用した URL 検証バイパスを。
脆弱性:
URL検証バイパス
記事:
https://marxchryz.medium.com/url-validation-bypass-using-browser-uri-normalization-cf545d33d13f
今回のターゲットを redacted.com と呼ぶことに。
URI (Uniform Resource Identifier) の正規化:
ブラウザに HTTPS://GOOGLE.COM と入力すると。
自動的に https://google.com (小文字) に変換されることに気付き。
URI 正規化とは、Web ブラウザーが URI を変更して。
標準化された一貫性のあるものにするプロセスで。
https://en.wikipedia.org/wiki/URI_normalization
URI の正規化はこれだけではなく。
URI 正規化は、URL 検証をバイパスするために。
使用できる他の多くのものも変換し。
ここではいくつかの例を。
図 1: ⒼⓄⓄⒼⓁⒺ.com は google.com として扱われ
図 2: 𝓰𝓸𝓸𝓰𝓵𝓮.𝓬𝓸𝓶は google.com として扱われ
図 3: google。com は google.com として扱われ
。 (ピリオド記号) は、JS の String.normalize 関数では処理されないことに注意して。
図 4: URI 正規化のおかげで、この呪われたテキスト lol は依然として。
有効な URL として扱われ
URI 正規化プロセス
上に示した URI 正規化は、ブラウザが同等の互換性を見つける例で。
互換性の等価性の例をいくつかを。
https://unicode.org/reports/tr15/
表 1: 互換性の等価性の例
同等の互換性を確認する簡単な方法は次のとおりで。
図 5: これはコードと出力で
URI 正規化とは何かを理解したので、これを使用して。
URL 検証フィルタをバイパスできて。
たとえば、ウェブサイトが google.com を入力することを望まない場合は。
ⒼⓄⓄⒼⓁⒺ.com を使用して検証をバイパスできて。
搾取
見つけたバグは、この Hackerone レポートの zurke とよく似ていて。
https://hackerone.com/reports/713
1.API の POST パラメータは、「profilePicture」パラメータを受け入れ。
「https://mydomain.com/1.jpg」のような URL を入力すると。
「無効な値が入力されました」という応答が返され。
2.しかし、「https://img.redacted.com/random.jpg」のような URL を入力すると。
変更が成功したことが応答でわかり。
3.これらの観察に基づいて、バックエンドが img.redacted.com からの。
画像のみを入力できるようにする何らかのホワイトリストを。
使用していると推測でき。
これは、このホワイトリストをバイパスする必要があることを意味して。
- https://img.redacted.com。mydomain.com/1.jpg
- https://img.redacted.com.ⓜⓨⓓⓞⓜⓐⓘⓝ.ⓒⓞⓜ/1.jpg
ただし、ペイロードはどれも機能せず。
5.ホワイトリストへの一般的なバイパスを思い出し。
それは次のとおりで。
- https://img.redacted.com@mydomain.com
それでもうまくいかず。
6.URI の正規化についてさらに調査したところ、何かに遭遇し。
図 6: 複数の @ 記号の使用
7.すぐにペイロードを使用してホワイトリスト フィルタをバイパスしようとして。
https://img.redacted.com@@mydomain.com/1.jpg
インターネットのどこにも見つからないと思うので。
このペイロードが存在することを知ってなくて。
swisskyrepo の PayloadAllTheThings でさえ、これはなくて。
Best regards, (^^ゞ