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 1 | 188.214.34.20:34123(キプロス・EDIS GmbH) |
| C2 IP 2 | 169.40.2.68:45191(ラトビア・VEESP) |
| ドメイン | ado-read-parser.com(2025 年 2 月 6 日登録) |
| User-Agent | Mozilla/3.0 (compatible; Adobe Synchronizer 23.8.20533) |
エンドポイント
| 種別 | 値 |
|---|---|
| レジストリ永続化 | HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Adobe Reader Synchronizer |
| Mutex | Global_MSIExecute、Global\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 から正式なパッチが提供された時点で本記事を更新する。