XXEとは?
XXE(XML External Entity)とは、XMLを処理するアプリケーションの脆弱性を悪用し、外部ファイルの読み取りやサーバー内部へのアクセスを可能にする攻撃手法です。Webサイト・APIの弱点の中でも特に危険な脅威で、XMLパーサーが外部エンティティ(外部参照)を処理する機能を悪用します。設定ファイル、APIのリクエスト、文書アップロード機能などでXMLを扱うシステムが標的となり、攻撃者はサーバー上の機密ファイルを盗み出したり、内部ネットワークをスキャンしたりすることができます。
XXEを簡単に言うと?
図書館の検索システムに例えると、本を探すために「この棚のこの本を見せて」という普通のリクエストに、「ついでに職員室の金庫の中身も見せて」という不正な命令を紛れ込ませるようなものです。XMLという「注文書」の中に、「外部の情報を取ってきて」という特殊な命令(外部エンティティ)を書き込むことで、システムが勝手に秘密のファイルを読み込んでしまいます。例えば、「/etc/passwd」というLinuxのパスワードファイルや、「C:\Windows\win.ini」というWindowsの設定ファイルなど、本来見せるべきでない情報を、XMLの処理を通じて盗み見ることができてしまう。システムが「親切すぎて」攻撃者の要求を何でも聞いてしまうのが、XXE攻撃の恐ろしさです。
XXEで発生する被害は?
XXEにより、サーバー内部の機密ファイル流出、内部ネットワークへの不正アクセス、サービス妨害攻撃などが発生します。Webサイト・APIの弱点を突かれることで、パスワードファイル、設定ファイル、ソースコードなどが丸見えになり、それらの情報を使った二次攻撃につながります。特にクラウド環境では、メタデータサービスから認証情報を盗まれると、クラウド環境全体が危険にさらされる可能性があります。
XXEで発生する直接的被害
- システムファイルの大量流出
/etc/passwdなどのシステムファイルが読み取られ、ユーザー名一覧が漏洩し、その後のパスワード攻撃の標的リストとして悪用される
- データベース設定の窃取
アプリケーションの設定ファイルからデータベースの接続情報が盗まれ、データベース全体への不正アクセスにつながり、全顧客情報が流出する
- ソースコードの漏洩
アプリケーションのソースコードが読み取られ、脆弱性の詳細が露呈して、より高度な攻撃を受ける準備情報を攻撃者に与えてしまう
XXEで発生する間接的被害
- 内部ネットワークの詳細露呈
XXE攻撃を使った内部ネットワークスキャンにより、ネットワーク構成が判明し、次の攻撃の標的が特定される
- DoS攻撃による業務停止
Billion Laughs攻撃などの手法でXMLパーサーを過負荷状態にし、サービスが長時間停止して業務に深刻な影響を与える
- クラウド環境の完全掌握
AWS等のメタデータエンドポイントから認証情報を取得され、クラウドリソース全体が攻撃者の支配下に置かれる
XXEの対策方法
XXEへの対策は、外部エンティティの無効化、XMLパーサーの安全な設定、入力検証の徹底が基本となります。Webサイト・APIの弱点を補強するために、DTD(Document Type Definition)の無効化、最新のXMLライブラリの使用、JSONなどの代替フォーマットへの移行が重要です。また、最小権限の原則に基づくファイルアクセス制限、WAFの導入により、XXE攻撃を効果的に防ぐことができます。
XXEの対策を簡単に言うと?
レストランの注文システムに例えると、まず「メニューにないものは注文できません」というルールを徹底し(外部エンティティ無効化)、厨房の材料庫への立ち入りを禁止します(アクセス制限)。注文票に変な指示が書かれていないか必ずチェックし(入力検証)、怪しい注文は受け付けません。可能であれば、複雑なXML形式の注文票をやめて、シンプルなJSON形式の注文票に変更します(フォーマット変更)。また、注文を処理するシステムを最新版に更新し(ライブラリ更新)、セキュリティの穴を塞ぎます。「お客様の要求は何でも聞く」という過剰なサービスをやめて、「できることとできないことを明確にする」ことが、XXE攻撃から身を守る基本的な考え方です。
XXEに関連した攻撃手法
Webサイト・APIの弱点において、XXEと密接に関連する3つの攻撃手法を解説します。
- SSRF(Server-Side Request Forgery)
XXEとSSRFは、どちらもサーバー側で不正なリクエストを実行させる点で共通しています。XXEはXML処理を通じて、SSRFはURL処理を通じて内部リソースにアクセスします。両者を組み合わせることで、より深刻な内部ネットワークへの侵入が可能になります。
- ディレクトリトラバーサル
XXEもディレクトリトラバーサルも、本来アクセスできないファイルを読み取る攻撃です。XXEはXMLの機能を悪用し、ディレクトリトラバーサルはパス指定を悪用します。XXE攻撃の中でディレクトリトラバーサルの手法を使うことで、より多くのファイルにアクセス可能になります。
- 安全でないデシリアライゼーション
XXEと同様に、データの処理過程で発生する脆弱性です。XMLのパース処理とオブジェクトのデシリアライゼーション処理は、どちらも外部から受け取ったデータを信頼しすぎることで攻撃を許してしまいます。両者への対策は、入力検証と安全な設定という共通点があります。
XXEのよくある質問
はい、JSONやProtocol Buffersなど、外部エンティティの概念がないフォーマットを使用すれば、XXE攻撃のリスクはなくなります。可能であればXMLの使用を避けることが最も確実な対策です。
はい、WordやExcelなどのOffice文書、SVG画像などもXMLベースのため、XXE攻撃の対象となります。アップロードされたファイルのXML処理には特に注意が必要です。
WAFである程度は防げますが、完全ではありません。巧妙にエンコードされた攻撃や、正規のXMLに見せかけた攻撃は通過する可能性があるため、根本的な対策が必要です。
XMLを処理する前にサニタイズ処理を行う、プロキシサーバーで外部エンティティを除去する、処理を隔離環境で実行するなどの代替策を検討してください。
アクセスログで/etc/passwdなどのシステムファイルへのアクセス、外部URLへの不審なリクエスト、XMLパース処理の異常なエラーなどを確認します。定期的な監査が重要です。
はい、SOAP APIはXMLベースのため、XXEのリスクが高いです。適切な設定を行わないと、Webサービス全体が危険にさらされる可能性があります。REST APIへの移行も検討すべきです。
更新履歴
- 初稿公開