Shikata Ga Nai

Private? There is no such things.

URL Validation Bypass Using Browser URI Normalizationを訳してみた

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 からの。

 画像のみを入力できるようにする何らかのホワイトリストを。

 使用していると推測でき。

 これは、このホワイトリストをバイパスする必要があることを意味して。


4.URI 正規化を使用するいくつかのペイロードを試して。


     - 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 でさえ、これはなくて。

 

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md

 

Best regards, (^^ゞ