概要

**XXE(XML External Entity:XML外部実体参照)**はXMLパーサの機能を悪用してサーバ内部のファイルを読み取ったり、SSRF を引き起こす攻撃です。**SSRF(Server-Side Request Forgery:サーバサイドリクエスト偽造)**はサーバを踏み台として内部ネットワークやクラウドメタデータサービスへ不正アクセスする攻撃です。いずれも OWASP Top 10 の常連であり、SC試験でも近年出題が増えています。

XXE(XML外部実体参照)

仕組み

XMLには外部ファイルやURLを参照する「外部実体」機能があります。この機能を悪用します。

<!-- 攻撃者が送付するXML -->
<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<request>
  <data>&xxe;</data>
</request>

サーバが外部実体を展開すると /etc/passwd の内容が <data> に埋め込まれて返されます。

XXE攻撃の流れ
1
攻撃者
外部実体を含むXMLを送信
SYSTEM "file:///etc/passwd"
2
XMLパーサ
外部実体を展開してファイルを読み込む
3
サーバ
読み込んだファイル内容をレスポンスに埋め込む
4
攻撃者
レスポンスから機密情報を取得

XXEで可能な攻撃

攻撃種別内容
ファイル読み取り/etc/passwd・設定ファイル・AWS認証情報など
SSRFSYSTEM "http://169.254.169.254/" で内部サービスに到達
DoS(Billion Laughs)再帰的実体参照でメモリを枯渇させる
ポートスキャン内部ネットワークのポート開放状況を確認

XXEの対策

対策説明
外部実体を無効化XMLパーサの設定で外部実体参照を禁止(最重要)
JSON を使用XML の代わりに JSON を使うことで根本回避
ホワイトリスト検証許可するXMLスキーマを事前定義
WAFによる遮断XXEパターンのリクエストを検出・ブロック

SSRF(サーバサイドリクエスト偽造)

仕組み

アプリケーションが外部URLを取得する機能を悪用し、攻撃者がサーバに内部向けリクエストを発行させます。

攻撃者 → アプリサーバ(https://example.com/fetch?url=...)

         内部ネットワーク・クラウドメタデータサービスへのアクセス

クラウド環境でのSSRF(最重要)

クラウドのインスタンスメタデータサービス(IMDS)は内部IPからのみアクセス可能です。SSRFでこれにアクセスされると、IAM ロールの認証情報が漏洩します。

クラウドメタデータエンドポイント取得できるもの
AWShttp://169.254.169.254/latest/meta-data/IAMロール一時認証情報
GCPhttp://metadata.google.internal/サービスアカウントトークン
Azurehttp://169.254.169.254/metadata/マネージドID認証情報

**Capital One事件(2019年)**はSSRFによりAWS IAM認証情報が漏洩し、1億件超の個人情報が流出した代表的事例です。

SSRFによるクラウド認証情報窃取の流れ
1
攻撃者
URL取得機能に内部向けURLを指定してリクエスト
2
アプリサーバ
指定されたURLへ代理でリクエストを送信
3
インスタンスメタデータサービス
IAMロールの一時認証情報を返す
169.254.169.254 等
4
攻撃者
取得した認証情報でクラウドリソースへ不正アクセス

SSRFの対策

対策説明
URL検証のホワイトリスト化アクセス許可するドメイン・IPを限定
IMDSv2の使用(AWS)セッション指向のメタデータAPIでSSRF対策
プライベートIPへのアクセス禁止RFC1918アドレスへのリクエストをブロック
DNSリバインディング対策DNS解決後のIPも検証する
ネットワーク分離アプリサーバから内部ネットワークへの通信を制限

ブラインドSSRFとOOB検査

レスポンスが直接返ってこない「ブラインドSSRF」では、攻撃者が制御するサーバへのリクエストを確認する帯域外(OOB:Out-of-Band)技法で脆弱性を検証します。

SC試験での頻出ポイント

  • XXEを防ぐ最重要対策:XMLパーサで外部実体参照を無効化すること
  • SSRFがクラウドで特に危険な理由:インスタンスメタデータサービス経由でIAM認証情報が取得できる
  • XXEとSSRFの関係:XXEの SYSTEM URLをhttp://に向けることでSSRFを引き起こせる
  • IMDSv2(AWS)の目的:SSRFによるメタデータ漏洩を防ぐセッション指向API
  • OWASPでの位置付け:SSRF は OWASP Top 10 2021 の A10(新規追加)

よくある誤問・ひっかけパターン

誤り① 「XXEはSQLインジェクションの一種」→ 。SQLインジェクションはDBに対する攻撃ですが、XXEはXMLパーサの機能悪用です。

誤り② 「SSRFはファイアウォールで防げる」→ 不完全。外部ファイアウォールはSSRFを防げません。アプリ内でのURL検証とネットワーク分離が必要です。

誤り③ 「JSONを使えばXXEは発生しない」→ 正しい(JSONはXML外部実体参照機能を持たない)。これは根本的な対策として有効です。

関連用語

重要キーワード

用語説明
XXEXMLの外部実体参照機能を悪用してファイル読み取りやSSRFを行う攻撃
SSRFサーバを踏み台として内部ネットワークに不正アクセスする攻撃
インスタンスメタデータサービスクラウドVMが自身の設定・認証情報を取得するための内部HTTP API
IMDSv2AWS のSSRF対策メタデータAPI。セッショントークンが必要
OOB(帯域外)攻撃結果を直接確認できない場合に外部サーバへの通信で脆弱性を検証する手法
Billion Laughs再帰的XML実体参照によるXXEベースのDoS攻撃