Ghostscript の脆弱性 CVE-2026-39919:PDF 1つでサーバーが乗っ取られうる仕組みと、本当に危ないのは誰か

サーバールームの机の上で白い布をかぶって小さなおばけに扮した子猫と、布の端をそっと持ち上げる女性

Ghostscript を自分でインストールしたことがある人はほとんどいませんし、使っていると自覚している人もまずいません。それでもこのプログラムは、膨大な数のサーバーの裏側で動いています。WordPress、文書管理システム、メールゲートウェイ、「PDF をオンラインで圧縮」といったサービスで、アップロードされた PDF をサムネイルに変えているのがこのプログラムです。2026年9月、細工された PDF によって、そのファイルを処理するマシン上で第三者のコードが実行されうる脆弱性が修正されました。

以下では、確かにわかっていること、わかっていないこと、自分のサーバーの確認方法、そしてこの件が文書をネット上で処理してもらうすべての人にとって何を意味するかをまとめます。

要点

  • 脆弱性:CVE-2026-39919。Ghostscript の JPEG 2000 画像処理におけるヒープバッファオーバーフローです。細工した画像を含む PDF が一つあれば発動します。
  • 影響を受けるバージョン:発見者によれば 9.21 から 10.07.1 まで(CVE レコードでは大まかに「10.08.0 より前」)。
  • 修正:2026年9月8日に公開された Ghostscript 10.08.0。Linux ディストリビューションは修正を古いバージョン番号にバックポートするため、重要なのは gs --version の表示ではなく、パッケージの完全なリビジョンです。
  • 深刻度:CVE レコードでは CVSS 3.1 で 9.8、Red Hat の評価では 7.8(「Moderate」)。どちらの数字も誠実なもので、想定しているシナリオが違うだけです。
  • 実際の攻撃:これまでに確認されたものはありません。動作したエクスプロイトは研究室で作られ、特定のビルドに合わせて調整されたものでした。
  • -dSAFER では防げません。サンドボックスを有効にしていても不具合は発生します。

何が起きたのか

この脆弱性を見つけたのは、WordPress のセキュリティを専門とする Wordfence 社です。同社の AI 支援テストシステム Argus によるもので、2026年8月23日、WordPress 7.1 のセキュリティ評価の最中でした。このツールは、アップロードされたファイルを受け付けた PHP コードのさらに先まで追跡しました。Imagick 拡張を通り、ImageMagick を通り、一番下にある Ghostscript と JPEG 2000 デコーダーまでです。

Ghostscript を開発する Artifex 社は翌日に報告を確認し、9月8日に修正を含むバージョン 10.08.0 を公開しました。CVE レコードは9月15日に公開されています。Wordfence は10月12日に技術的な詳細を公表し、その翌日に BleepingComputer をはじめとする業界メディアが報じました。

不具合の仕組み

理解するのに C 言語の知識は要りません。画像はサンプルの格子です。JPEG 2000 では、画像の各成分(たとえば明るさと透明度)が異なる解像度を持つことができ、1つのサンプルが 8 ビット未満で表されることもあります。2 ビットのサンプルなら、1 バイトに 4 つ入ります。

研究者が示した例では、画像の1行にこうしたサンプルが 1,024 個あります。詰めて格納すれば 256 バイトで、Ghostscript も正しく 256 バイトを確保します。ところが上の2つの条件が同時にそろうと、行を埋めるループが 1 バイトに 4 つ詰める代わりにサンプル1つにつき丸ごと1バイトを書き込みます。256 バイトのバッファに 1,024 バイトが入ることになります。各行で余った 768 バイトは、Ghostscript が自分の管理データを置いているメモリを上書きします。しかもそのバイトは画像から来るので、中身を決めるのはファイルの作成者です。

古い郵便局の木製の仕分け棚。どの区画にも子猫が入っていて、列の端では子猫たちが床にこぼれ落ちている

これは「プログラムがクラッシュした」から「プログラムが攻撃者の思いどおりに動いた」へと至る典型的な道筋です。現代のシステムはこの道をかなり険しくしています(メモリ配置のランダム化などの保護機能)が、完全にふさいでいるわけではありません。

WordPress で PDF が Ghostscript に届くまで

WordPress は PDF のプレビューを自分では描きません。バージョン 4.7 以降、アップロードされた文書の1ページ目の画像を作れるようになりましたが、それは他のプログラムの力を借りて行っています。流れは次のとおりです。

WordPress → PHP 拡張 Imagick → ImageMagick → Ghostscript

Ghostscript は独立したプロセスとして、通常は Web サーバーと同じアカウントで動きます。起動するのは、何かが PDF の画像を求めたときだけです。ファイルをディスクに保存するだけで他に何もしないフォームが、Ghostscript を起動することはありません。

この経路での攻撃には、次の4つの条件がすべて同時に満たされている必要があります。

  1. 外部の誰か(匿名、または権限の低いアカウント)が PDF をアップロードできる。
  2. サイトがそのファイルのプレビューやサムネイルを要求する。
  3. サーバーに、そのために Ghostscript を呼び出す Imagick などのツールがあり、ImageMagick のポリシーが PDF の読み込みを許可している。
  4. インストールされている Ghostscript に修正が入っていない。

重要な但し書きがあります。標準の WordPress では、匿名の訪問者はメディアライブラリにファイルをアップロードできません。攻撃者には、その経路を開くプラグイン、添付ファイル欄のあるフォーム、あるいはアカウントが必要です。Wordfence は WordPress の公式 Docker イメージも調べました。そこには脆弱な Ghostscript 10.05.1、Imagick 拡張、そして動作する PDF プレビューの経路がそろっていました。それでも、イメージ単体では匿名の攻撃には足りませんでした。

攻撃者に有利に働く細部が一つあります。プレビュー生成の最初の試みが失敗すると、WordPress は設定を変えて自動的にもう一度試みます。つまり悪意ある添付ファイル3つで、Ghostscript は6回実行されます。Wordfence のテストでは、Ghostscript が裏で静かにクラッシュしている間も、フォームは「アップロード成功」と表示し続けていました。

これは WordPress やフォームプラグインの不具合ではありません。それらは、ファイルが Ghostscript に届くまでの通り道だっただけです。

実際の危険度はどのくらいか

ここは立ち止まって考える価値があります。「PDF 1つでサーバーが乗っ取られる」といった見出しは、真実の半分しか語っていないからです。

評価が2つある理由。CVE レコードは 10 点満点中 9.8(CVSS 3.1)と 9.3(CVSS 4.0)を付けています。これらの数字は最悪のケース、つまりネットから到達でき、ログインも人の操作もなしに PDF を受け付けるアプリケーションを想定しています。Red Hat は同じ脆弱性を 7.8 と評価し「Moderate」としていますが、これはユーザーが自分のパソコンで悪意あるファイルを開くシナリオを採点しているためです。どちらも間違いではなく、違う問いに答えているのです。

試行回数と成功回数。Wordfence は研究室のビルド向けに動作するエクスプロイトを2つ作り、それを他の10の環境で 10,240 回実行しました。Debian、Ubuntu、Fedora、AlmaLinux、Alpine、そして WordPress の公式コンテナです。一度も成功しませんでした。一方、作成対象のビルドでは、フォント、言語設定、主要なシステムライブラリの一つを変えても、毎回ではないものの動作し続けました。

結論には二つの面があります。世界中のあらゆるサーバーを開けられる単一のファイルは存在しません。しかし、特定の企業や、何百ものサイトが同一のシステムイメージで動いているホスティングを狙う攻撃者には、万能のファイルなど必要ありません。研究者たちは、libheif ライブラリに関する似た事例で、別のチームが AI の助けを借りて、新しい標的ごとに1〜2日でエクスプロイトを適合させていたことを指摘しています。

どの権限で動くか。攻撃者のコードは PDF を処理するアカウント、通常は Web サーバーのアカウントで実行されます。自動的に root になるわけではありませんが、このアカウントはたいていサイトのファイルを読めます。データベースのパスワードを含む設定ファイルもその一つです。

実際の攻撃:本稿執筆時点で、研究室の外でこの脆弱性が悪用されたという報告はありません。

自分のサーバーの確認方法

ノートパソコンに向かう眼鏡の女性と、その隣で画面をじっと見つめるキジトラの子猫。机の上には虫眼鏡が置かれている

シェルにアクセスできるなら、3つの問いから始めてください。

1. そもそも Ghostscript はあるか。パッケージのリビジョンは何か。

  • Debian と Ubuntu:dpkg -s ghostscript | grep Version
  • Fedora、RHEL、AlmaLinux:rpm -q ghostscript
  • 念のため:gs --version。ただし、この番号だけでは何も判断できません。

なぜ番号だけでは足りないのか。Ubuntu 22.04 はパッケージ 9.55.0~dfsg1-0ubuntu5.14 でこの脆弱性を修正しましたが、このパッケージはバージョンを尋ねられると今も「9.55.0」と答えます。Debian 13 では 10.05.1~dfsg-1+deb13u2 に修正が入っています(勧告 DSA-6516-1)。Red Hat は 10月1日から6日にかけて RHEL 10、9、8 向けの修正を公開しました。Debian のトラッカーによれば、Debian 12(bookworm)はまだ脆弱と表示されています。必ずご利用のディストリビューションの勧告と照らし合わせてください。

逆方向の落とし穴もあります。10.08.0 のリリース候補版(RC)は 10.08.0 と名乗りますが、修正は入っていません。Wordfence のテストマシンで動いていたのがまさにこれでした。Ghostscript をソースからビルドした場合は、最終リリースであることを確かめてください。

2. PHP に Imagick はあるか。php -m | grep -i imagick。WordPress の管理画面では、ツール → サイトヘルス → 情報 → メディア処理。これは出発点にすぎません。Imagick が PDF を認識するかはわかりますが、Ghostscript が修正済みかどうかは何もわかりません。

3. ImageMagick は PDF を読めるか。convert -list format | grep -i pdf(ImageMagick 7 では magick -list format)。PDF の横に rw とあれば、Ghostscript への道は開いています。

コンテナ:再起動では足りません。更新されたベースイメージを取得し、キャッシュ済みのレイヤーを使わずにビルドし直して、デプロイし直してください。

共用ホスティング:多くの場合、自分では確認できません。事業者に2つ質問してください。サーバー上の Ghostscript パッケージに CVE-2026-39919 の修正が含まれているか。そして、顧客がアップロードした PDF がシステムのどこかでプレビューに変換されているか。

すぐに更新できない場合

  • 匿名の訪問者や権限の低いアカウントからの PDF の受け付けをやめる。サーバーに届かないファイルは、Ghostscript にも届きません。
  • ImageMagick のポリシーで PDF の読み込みを無効にする。policy.xml(通常は /etc/ImageMagick-6/ または /etc/ImageMagick-7/ にあります)の <policymap> セクションに、<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" /> という行を追加します。副作用として、WordPress は PDF のサムネイルを作らなくなります。
  • 1回の送信あたりのファイル数とアップロード頻度を制限する。攻撃者が得られる試行回数は減りますが、何も修正されません。
  • 文書変換を分離する。サイトの秘密情報にアクセスできず、不要なネットワーク接続も持たない別のサービスで動かします。被害を限定できますが、これも修正ではありません。

やってはいけないこと:-dSAFER を防御策とみなさないでください。Ghostscript のサンドボックスは、文書化された PostScript の機能で文書が何をできるかを制限するものです。メモリ破壊は防げず、テストではサンドボックス有効の状態で不具合が発生しました。WordPress のプラグインではこれを直せません。Ghostscript は WordPress ではなく、OS やコンテナイメージから提供されるからです。

この脆弱性を CVE-2026-65640 と混同しないでください。これは別の問題で、PostScript ファイルのアップロードによる WordPress でのリモートコード実行です。こちらも Imagick と Ghostscript を経由しますが、ファイルをアップロードできる権限のあるアカウント(通常は投稿者以上の権限グループ)が必要です。WordPress 7.0.4 で修正され、4.7 ブランチまでバックポートされました。

WordPress だけの問題ではない

WordPress は、見知らぬ人の PDF が Ghostscript に届く数多くの経路の一つにすぎません。文書管理システム、プリントサーバー、請求書処理、プレビュー生成、添付ファイルを検査するメールゲートウェイ、ファイル変換 API も同じです。問いは常に一つです。このソフトウェアは、他人から届いた PDF をレンダリングしているか。

自分のアプリケーションのコードで「Ghostscript」という語を検索しても、何も見つからないかもしれません。たいていは間に ImageMagick などのライブラリがあり、Ghostscript を呼び出すのはそちらだからです。

PDF をネットにアップロードするときに意味すること

この話には、あまり語られないもう一つの側面があります。ブラウザで使う「PDF 圧縮」「PDF を画像に変換」「PDF 結合」といったサービスは、まさに上で述べた種類のサーバーです。見知らぬ人からファイルを受け取り、それを分解して組み立て直すツールに通します。あなたの文書が何で、どのバージョンで処理されるのか、9月8日以降に更新されたのかは、あなたにはわかりません。わかっているのは、あなたのファイルが少なくともしばらくの間、何千人もの他人のファイルと同じマシンに置かれ、その中には細工されたものもありうるということです。

これは、すべてのオンラインサービスが穴だらけだという意味ではありません。契約書や身分証のスキャン、検査結果をアップロードするとき、安全性を確かめようのない場所に預けているという意味です。詳しくは、オンライン変換でデータに何が起きるかについての記事をご覧ください。

公平を期すために言えば、ローカルでの処理も本質的に安全というわけではありません。自分で Ghostscript を使って PDF を圧縮しているなら、10.08.0 以降に更新してください。オフラインで作業する利点は別のところにあります。文書があなたのパソコンから出ることはなく、それを処理するソフトウェアのバージョンを決めるのは、会ったこともない誰かではなくあなた自身です。

PDF の結合、分割、暗号化、Word への変換をよく行うなら、どこにもアップロードせずに済ませられます。PDF Manipulator は無料で、Windows と Linux で動作し、どのファイルもあなたのパソコンから出ません。

出典

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

上部へスクロール