CVE-2025-47934

OpenPGP.js is a JavaScript implementation of the OpenPGP protocol. Startinf in version 5.0.1 and prior to versions 5.11.3 and 6.1.1, a maliciously modified message can be passed to either `openpgp.verify` or `openpgp.decrypt`, causing these functions to return a valid signature verification result while returning data that was not actually signed. This flaw allows signature verifications of inline (non-detached) signed messages (using `openpgp.verify`) and signed-and-encrypted messages (using `openpgp.decrypt` with `verificationKeys`) to be spoofed, since both functions return extracted data that may not match the data that was originally signed. Detached signature verifications are not affected, as no signed data is returned in that case. In order to spoof a message, the attacker needs a single valid message signature (inline or detached) as well as the plaintext data that was legitimately signed, and can then construct an inline-signed message or signed-and-encrypted message with any data of the attacker's choice, which will appear as legitimately signed by affected versions of OpenPGP.js. In other words, any inline-signed message can be modified to return any other data (while still indicating that the signature was valid), and the same is true for signed+encrypted messages if the attacker can obtain a valid signature and encrypt a new message (of the attacker's choice) together with that signature. The issue has been patched in versions 5.11.3 and 6.1.1. Some workarounds are available. When verifying inline-signed messages, extract the message and signature(s) from the message returned by `openpgp.readMessage`, and verify the(/each) signature as a detached signature by passing the signature and a new message containing only the data (created using `openpgp.createMessage`) to `openpgp.verify`. When decrypting and verifying signed+encrypted messages, decrypt and verify the message in two steps, by first calling `openpgp.decrypt` without `verificationKeys`, and then passing the returned signature(s) and a new message containing the decrypted data (created using `openpgp.createMessage`) to `openpgp.verify`.
CVSS

No CVSS.

Configurations

No configuration.

History

21 May 2025, 20:25

Type Values Removed Values Added
Summary
  • (es) OpenPGP.js es una implementación en JavaScript del protocolo OpenPGP. A partir de la versión 5.0.1 y anteriores a las versiones 5.11.3 y 6.1.1, se puede pasar un mensaje modificado maliciosamente a `openpgp.verify` o `openpgp.decrypt`, lo que provoca que estas funciones devuelvan un resultado de verificación de firma válido, pero que devuelvan datos no firmados. Esta falla permite falsificar las verificaciones de firma de mensajes firmados en línea (no separados) (mediante `openpgp.verify`) y de mensajes firmados y cifrados (mediante `openpgp.decrypt` con `verificationKeys`), ya que ambas funciones devuelven datos extraídos que podrían no coincidir con los datos firmados originalmente. Las verificaciones de firma separadas no se ven afectadas, ya que en ese caso no se devuelven datos firmados. Para falsificar un mensaje, el atacante necesita una única firma de mensaje válida (en línea o separada), así como los datos de texto plano firmados legítimamente. Posteriormente, puede construir un mensaje firmado en línea o firmado y cifrado con cualquier dato que elija, que aparecerá como firmado legítimamente en las versiones afectadas de OpenPGP.js. En otras palabras, cualquier mensaje firmado en línea puede modificarse para que devuelva cualquier otro dato (sin dejar de indicar que la firma era válida). Lo mismo ocurre con los mensajes firmados y cifrados si el atacante puede obtener una firma válida y cifrar un nuevo mensaje (a elección del atacante) junto con esa firma. El problema se ha corregido en las versiones 5.11.3 y 6.1.1. Existen algunas workarounds. Al verificar mensajes firmados en línea, extraiga el mensaje y las firmas del mensaje devuelto por `openpgp.readMessage` y verifique cada firma como una firma independiente. Para ello, pase la firma y un nuevo mensaje que contenga solo los datos (creado con `openpgp.createMessage`) a `openpgp.verify`. Al descifrar y verificar mensajes firmados y cifrados, descifre y verifique el mensaje en dos pasos: primero, llame a `openpgp.decrypt` sin `verificationKeys` y, a continuación, pase las firmas devueltas y un nuevo mensaje que contenga los datos descifrados (creado con `openpgp.createMessage`) a `openpgp.verify`.

19 May 2025, 19:15

Type Values Removed Values Added
New CVE

Information

Published : 2025-05-19 19:15

Updated : 2025-05-21 20:25


NVD link : CVE-2025-47934

Mitre link : CVE-2025-47934

CVE.ORG link : CVE-2025-47934


JSON object : View

Products Affected

No product.

CWE
CWE-347

Improper Verification of Cryptographic Signature