技術 約5分で読めます

Adobe ReaderのゼロデイがPDF経由で4ヶ月間悪用、未パッチのままRCEが成立

いけさん目次

EXPMON の Haifei Li と研究者 Gi7w0rm が、Adobe Reader/Acrobat に未パッチのゼロデイ脆弱性が存在し、少なくとも 2025 年 11 月下旬から実際の攻撃に使われていたと公開した。
パッチが存在しない状態で 4 ヶ月以上にわたって悪用が続いており、公開時点の最新版(Adobe Reader 26.00121367)を含むすべてのバージョンが影響を受ける。

何が起きているか

悪意ある PDF を開くだけで攻撃が成立する。
Adobe Reader のサンドボックスをバイパスし、最終的にリモートコード実行(RCE)まで到達できる 2 段階の脆弱性チェーンが使われている。

アンチウイルス検出率は 6/77(7.8%)と極めて低い。
確認されているサンプルはロシア語圏の組織を標的としたおとり PDF で、ガス供給・労働安全・緊急対応などの公式文書に見せかけている。
エネルギーインフラや政府機関をターゲットにした標的型攻撃と推定される。

Adobe は公開時点でコメントを出しておらず、パッチも提供していない。

2バグの組み合わせによるサンドボックスバイパス

攻撃はメモリ破壊を使わないロジックベースの脆弱性チェーン。

Bug 1: 内部 UI への JavaScript 注入

Acrobat のダイアログレンダリング API が入力文字列を適切に検証していない。
サンドボックス内の PDF コンテキストから、本来アクセスできない内部 API を対象にした任意の JavaScript を実行できる。
バッファオーバーフローではなく純粋なロジックの欠陥で、サンドボックスが「同じプロセス内の別コンテキスト」を隔離しきれていない。

Bug 2: プロトタイプ汚染による権限昇格

Object.prototype.__defineGetter__() を使ってプロパティ定義を横取りし、未文書化の内部認証 API を掌握する。
これにより Acrobat 内部の全 API への無制限アクセスを取得する。
プロトタイプ汚染(prototype pollution)とは、JavaScript オブジェクトの共通祖先である Object.prototype のプロパティを改ざんし、全オブジェクトの挙動を変える手法だ。

2 つのバグを連鎖させると、通常は制限されている以下の API 群が呼び出せるようになる。

API用途
util.readFileIntoStream()任意ファイルの読み取り
RSS.addFeed() / removeFeed()C2(攻撃者の指令サーバー)との通信・データ窃取
app.trustedFunction()さらなる権限昇格
SOAP.streamDecode()Base64 デコード

攻撃フロー

flowchart TD
    A[被害者がPDFを開く] --> B[ステージ1: JSFuck難読化ローダー起動]
    B --> C[隠しフォームフィールドから<br/>攻撃コードをデコード]
    C --> D[500msの遅延で解析環境の検出回避]
    D --> E[ステージ2: 73936文字の難読化JavaScriptが実行]
    E --> F[Bug1+Bug2の連鎖でサンドボックスバイパス]
    F --> G[OS・AVソフト・Readerバージョンをフィンガープリント]
    G --> H[C2へHTTP GETでビーコン送信]
    H --> I{サンドボックスか?}
    I -->|Yes| J[空のJSを返す / 何もしない]
    I -->|No| K[ステージ3: AES-CTR暗号化JSをC2から受信]
    K --> L[復号してeval実行 / RCE成立]
    L --> M[レジストリRun経由で永続化]

JSFuck は ({}+[])[[+!+[]]] のように JavaScript の演算だけで任意の文字列を再構成する難読化手法で、静的解析ツールによる API 名の検出を回避する。

フィンガープリンティングの詳細

C2 に送信される前に、以下のシステム情報が収集される。

項目取得方法
言語設定app.language
Reader バージョンgetProdVersionString
OS バージョン(詳細)ntdll.dll のバイナリ解析
プラットフォームapp.platform
アンチウイルス製品プラグイン列挙
PDF のローカルパスDocument オブジェクト

OS バージョンの特定に ntdll.dll を読んでいる点が興味深い。
app.platform で大まかな OS は取れるが、Windows のビルド番号(10.0.19041.1288 のようなマイナーバージョン)は別途バイナリ解析で取り出している。
これは解析用のサンドボックス環境と実環境を区別するための精密なターゲティングに使われる。

C2 への通信は User-Agent を Mozilla/3.0 (compatible; Adobe Synchronizer 23.8.20533) と偽り、正規の Adobe Synchronizer のトラフィックに見せかける。

IOC(侵害の痕跡)

ネットワーク

種別
C2 IP 1188.214.34.20:34123(キプロス・EDIS GmbH)
C2 IP 2169.40.2.68:45191(ラトビア・VEESP)
ドメインado-read-parser.com(2025 年 2 月 6 日登録)
User-AgentMozilla/3.0 (compatible; Adobe Synchronizer 23.8.20533)

エンドポイント

種別
レジストリ永続化HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Adobe Reader Synchronizer
MutexGlobal_MSIExecuteGlobal\AdobeCrashProcessorLocalLowLock
SHA-256 (v2)54077a5b15638e354fa02318623775b7a1cc0e8c21e59bcbab333035369e377f
SHA-256 (v1)65dca34b04416f9a113f09718cbe51e11fd58e7287b7863e37f393ed4d25dde7

公開後に C2 インフラはオフライン化したとの報告があるが、インフラを切り替えて攻撃活動を継続する可能性がある。

現時点の対策

パッチが存在しないため、暫定的な回避策を取るしかない。

即時対応

  • 不審な送信元からの PDF を開かない
  • ネットワーク側で User-Agent に “Adobe Synchronizer” を含む外向きトラフィックを検知・ブロック
  • C2 IP(188.214.34.20、169.40.2.68)とドメイン(ado-read-parser.com)をブロック

PDF の代替ビューア ブラウザ内蔵の PDF ビューア(Chrome、Firefox)は Acrobat の JavaScript API を持たないため、このエクスプロイトの影響を受けない。
高リスク環境では Adobe Reader を使わずブラウザで開く運用が有効。

Sumatra PDF や Foxit Reader への一時的な切り替えも選択肢だが、それらが独自の脆弱性を持たないという保証はない。

関連する過去のクライアントサイド攻撃として、Magento の PolyShell RCE(/articles/magento-polyshell-rce)では異なるアプローチ(サーバーサイドのポリグロットファイル)が使われたが、「正規ファイルに見せかけてコードを実行する」という戦術は共通している。

Adobe から正式なパッチが提供された時点で本記事を更新する。