XXEを初心者でも分かりやすく解説

あなたのWebサイトのXML処理が、サーバーの全ファイルを丸見えにしているかもしれません。XXE(XML External Entity)攻撃は、XMLの便利な機能を悪用して、パスワードファイルやデータベース設定などの機密情報を盗み出す恐ろしい攻撃です。Webサイト・APIの弱点の中でも、設定一つで致命的な被害をもたらす危険な脆弱性です。本記事では、なぜXMLが危険になるのか、どのような被害が発生するのか、そして安全にXMLを処理するための実践的な対策について、技術的な知識がなくても理解できるように解説します。XMLを扱うすべてのシステムで確認すべき重要なセキュリティ対策を学びましょう。

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への移行も検討すべきです。

更新履歴

初稿公開

京都開発研究所

システム開発/サーバ構築・保守/技術研究

CMSの独自開発および各業務管理システム開発を行っており、 10年以上にわたり自社開発CMSにて作成してきた70,000以上のサイトを 自社で管理するサーバに保守管理する。