OpenPGP.js Vulnerability Let Attackers Spoof Message Signature Verification
2025/06/12 CyberSecurityNews — 広く使用されている OpenPGP.js ライブラリに、深刻な脆弱性が発見された。この脆弱性を悪用する攻撃者は、悪意のコンテンツのデジタル署名を偽造することで、信頼できるソースによる正当な署名を装い、ユーザーを欺くことが可能になる。この脆弱性 CVE-2025-47934 は、暗号の信頼性を根本的に侵害するものであり、一般的な JavaScript 実装において OpenPGP 標準に依存する、多数の Web ベース・アプリケーションやメール・クライアントとの間の、安全な通信が損なわれる可能性が生じている。

この脆弱性は、OpenPGP.js バージョン 5.11.3 未満と v6.1.1 未満に影響を及ぼし、このライブラリを利用して、安全な通信を行う各種のアプリケーションや、暗号化されたメール・サービスなどに依存する、数百万のユーザーに影響を与える可能性がある。
影響を受けるプラットフォームとして注目すべきものには、Mailvelope などの Web ベース・メール・クライアントがあるが、Proton Mail は影響を受けないことが確認されている。
この脆弱性は、デジタル署名検証の基本原則を完全に覆すものであり、正当なソースからの有効な暗号署名を装う攻撃者に対して、悪意のコンテンツ提示を許すことになる。
Codean Labs の研究者たちは、セキュリティ研究プログラムを通じて、この脆弱性を発見した。彼らが実証したのは、標的ユーザーの有効な署名にアクセスする攻撃者が、検証プロセスを操作し、まったく異なるコンテンツを認証できることである。
この研究チームは、”legitimate” という単語への正当な署名を操作して、”malicious” という単語に対する正当な署名のように見せかけ、この攻撃を成功させた。つまり、暗号検証の成功を維持できることを実証したのだ。
この発見を受け、OpenPGP.js 開発チームは直ちに対応し、この脆弱性を修正するパッチをリリースした。この最新バージョンでは、将来における同様の攻撃を防ぐための、より厳格な文法検証が実装されている。
2025年5月初旬から、協調的な情報開示プロセスが開始され、問題をメンテナーが認識した2週間後に、修正プログラムとアドバイザリが公開された。
技術的な悪用メカニズム
この脆弱性は、OpenPGP.js がメッセージ検証中に、パケット・リストを処理する方法に起因する。
この攻撃は、ライブラリにおける圧縮/非圧縮データ・パケットの、柔軟な処理能力を悪用するものであり、同一メッセージ内の異なるパケット・シーケンスに対して、署名検証とデータ抽出が実行されるというシナリオを作り出す。
つまり、正当な署名付きメッセージに対して、任意のコンテンツを取り込んだ悪意の圧縮データ・パケットを追加する攻撃者は、不正なパケット・リストを作成できるようになる。
その結果として得られる構造には、オリジナルのワンパス署名パケット/正当なコンテンツを含むリテラル・データ・パケット/有効な署名パケットに加えて、攻撃者が制御する悪意のペイロードを取り込んだ、圧縮データ・パケットが含まれることになる。
OpenPGP.js による検証プロセスでは、ストリーミング可能なパケット・タイプに遭遇するまでパケットが読み取られ、最初は正当な署名付きコンテンツのみが処理される。
この限定されたパケット・リストを調べる unwrapCompressed() メソッドは、圧縮データが見つからないため、正当なコンテンツに対する署名の検証に成功する。
しかし、その後に、ライブラリがユーザーに返すメッセージ・データを取得する際に、完了したパケット・リストを再検証し、最初に遭遇した圧縮データ・パケットからコンテンツを抽出してしまう。この圧縮データ・パケットには、攻撃者が注入した悪意のペイロードが取り込まれている。
const verificationResult = await openpgp.verify({ message, verificationKeys: publicKey });
console.log(`Signed message data: ${verificationResult.data}`); // Returns malicious content
const { verified } = verificationResult.signatures[0];
await verified; // Signature verification succeeds
パケット処理における、このタイミングの不一致は、暗号的に検証されたコンテンツと、ユーザーに表示されるコンテンツの間に危険な乖離を生み出し、デジタル署名が提供するはずのセキュリティ保証を、根本から破壊してしまう。
暗号検証プロセスと表示データの処理順序の不一致を突く、深刻な脆弱性 CVE-2025-47934 が修正されました。署名検証が成功しても、表示されるコンテンツが改竄されるという、デジタル署名の信頼性を根本から揺るがすものだと、この記事は指摘しています。OpenPGP の影響が及ぶ範囲は、広いように思えます。ご利用のチームは、ご注意ください。なお、この脆弱性に関する第一報は、2025/05/21 の「OpenPGP.js の脆弱性 CVE-2025-47934 が FIX:メッセージへの偽装署名の恐れ」です。よろしければ、ご参照ください。
You must be logged in to post a comment.