Critical OpenPGP.js Flaw Allows Message Signature Spoofing
2025/05/21 SecurityOnline — 安全なメッセージングと暗号化のために広く利用される、JavaScript ライブラリを提供する OpenPGP.js プロジェクトが、深刻な脆弱性 CVE-2025-47934 を修正した。この脆弱性を悪用する攻撃者は、メッセージの署名を偽装し、本物を装いながらコンテンツ操作を可能にするという。この脆弱性は、ブラウザベースのメール・クライアント/エクステンション/Web サービスなどの、OpenPGP.js を利用する広範なアプリケーションにおける、署名付き通信と暗号化された通信の整合性を脅かすものだ。

OpenPGP.js は、ネイティブ GPG (GNU Privacy Guard) のインストールを不要にするために設計された、JavaScript によるオープンソースの OpenPGP 実装である。
ブラウザまたはサーバの環境内で、メッセージの署名/暗号化/復号化/検証をサポートする。したがって、メールの暗号化や、安全なメッセージング・アプリ、本人確認ツールにとって不可欠なビルディング・ブロックとなっている。
OpenPGP.js のアドバイザリには、「悪意を持って改変されたメッセージを openpgp.verify/openpgp.decrypt 関数に受け渡すと、これらの関数は有効な署名検証結果を返すが、実際には署名されていないデータを返す可能性がある」と説明されている。
この脆弱性は、OpenPGP.js バージョン 5/6 に影響を及ぼす。攻撃者は、署名済みメッセージまたは署名および暗号化されたメッセージを改変することで、データが改竄されている状態であっても、有効な署名があると見せかけることが可能になる。
この署名偽装は、以下のメッセージに適用される:
- インライン署名メッセージ (openpgp.verify を使用して検証済み)
- 署名/暗号化されたメッセージ(openpgp.decrypt と verificationKeys を使用)
なお、分離署名検証は影響を受けない。
この脆弱性を悪用するには、攻撃者は以下のものが必要となる:
- 有効な署名 (インライン署名または分離署名)
- 署名されたオリジナルの平文メッセージ
攻撃者は、新しいコンテンツを作成し、オリジナル署名を用いて署名することで、アプリケーションを欺き、正当なものとして受け入れさせることが可能になる。
すでに、この問題は、バージョン v5.11.3/v6.1.1 で修正されている。
パッチが適用されるまでの間、ユーザーは以下の回避策を適用できる。
- インライン署名メッセージの場合:
openpgp.readMessage() を用いて、データと署名を抽出する。
openpgp.verify() を用いて、分離署名として検証する。
. - 署名付き暗号化メッセージの場合:
verificationKeys を指定せずに openpgp.decrypt() を呼び出す。
復号されたコンテンツから新しいメッセージを作成し、手動で検証する。
メールなどの通信の暗号化に広く利用されている OpenPGP.js に、脆弱性が発見されました。ご利用のチームは、迅速なアップデートをご検討下さい。よろしければ、カテゴリ _OpenSource も、ご参照ください。
You must be logged in to post a comment.