Read the docs
TI-2023-21663 Aliases CVE-2023-41037GHSA-ch3c-v47x-4pgp

Cleartext Signed Message Signature Spoofing in openpgpjs

Priority LOW 20CWE-347Published · Updated

Key facts

Attack vector
Network
Privileges required
None
User interaction
Required
Attack complexity
Low
Impact type
Security bypass
Confidentiality · integrity · availability
None · Low · None
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-347.

Summary

OpenPGP.js is a JavaScript implementation of the OpenPGP protocol. In affected versions OpenPGP Cleartext Signed Messages are cryptographically signed messages where the signed text is readable without special tools. These messages typically contain a "Hash: ..." header declaring the hash algorithm used to compute the signature digest. OpenPGP.js up to v5.9.0 ignored any data preceding the "Hash: ..." texts when verifying the signature. As a result, malicious parties could add arbitrary text to a third-party Cleartext Signed Message, to lead the victim to believe that the arbitrary text was signed. A user or application is vulnerable to said attack vector if it verifies the CleartextMessage by only checking the returned `verified` property, discarding the associated `data` information, and instead _visually trusting_ the contents of the original message. Since `verificationResult.data` would always contain the actual signed data, users and apps that check this information are not vulnerable. Similarly, given a CleartextMessage object, retrieving the data using `getText()` or the `text` field returns only the contents that are considered when verifying the signature. Finally, re-armoring a CleartextMessage object (using `armor()` will also result in a "sanitised" version, with the extraneous text being removed. This issue has been addressed in version 5.10.1 (current stable version) which will reject messages when calling `openpgp.readCleartextMessage()` and in version 4.10.11 (legacy version) which will will reject messages when calling `openpgp.cleartext.readArmored()`. Users are advised to upgrade. Users unable to upgrade should check the contents of `verificationResult.data` to see what data was actually signed, rather than visually trusting the contents of the armored message.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00354 29th percentileScored 2026-11-07
Public exploit Yes 1 exploit referenceTagged by NVD
Fix Fixed openpgpjs (openpgpjs): 4.10.11, 5.10.1openpgp (npm): 4.10.11, 5.10.1

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
openpgpjsopenpgpjsbefore 4.10.11; 5.0.0 to before 5.10.14.10.11, 5.10.1Patch availableCNA
—openpgp (npm)before 4.10.114.10.11Patch availableGHSA-ch3c-v47x-4pgp
—openpgp (npm)5.0.0 to before 5.10.15.10.1Patch availableGHSA-ch3c-v47x-4pgp
  • openpgpjs Vendoropenpgpjs Affected before 4.10.11; 5.0.0 to before 5.10.1 Fixed in 4.10.11, 5.10.1 Patch available CNA
  • openpgp (npm) Vendor— Affected before 4.10.11 Fixed in 4.10.11 Patch available GHSA-ch3c-v47x-4pgp
  • openpgp (npm) Vendor— Affected 5.0.0 to before 5.10.1 Fixed in 5.10.1 Patch available GHSA-ch3c-v47x-4pgp

CPE configurations NVD · 1

CPEVersionsRoleVendor
cpe:2.3:a:openpgpjs:openpgpjs:*:*:*:*:*:*:*:*before 4.10.11; 5.0.0 to before 5.10.0Vulnerableopenpgpjs
  • cpe:2.3:a:openpgpjs:openpgpjs:*:*:*:*:*:*:*:* Versions before 4.10.11; 5.0.0 to before 5.10.0 Vulnerable ·openpgpjs

Remediation

  • Fix · CNA openpgpjs (openpgpjs) Fixed in 4.10.11, 5.10.1
  • Fix · GHSA-ch3c-v47x-4pgp openpgp (npm) Fixed in 4.10.11 Advisory →
  • Fix · GHSA-ch3c-v47x-4pgp openpgp (npm) Fixed in 5.10.1 Advisory →

Timeline

  1. 2026-10-02 Threatist record created from CVE-2023-41037
  2. 2026-10-03 Alias added: GHSA-ch3c-v47x-4pgp

References

  • TI-2015-06663 s2k.js in OpenPGP.js will decrypt arbitrary messages regardless of passphrase for crafted… CVSS 3.0HIGH 7.5
  • TI-2019-06617 Improper Verification of a Cryptographic Signature in OpenPGP.js <=4.1.2 allows an… CVSS 3.0HIGH 7.5
  • TI-2019-06618 Improper Verification of a Cryptographic Signature in OpenPGP.js <=4.1.2 allows an… CVSS 3.0HIGH 7.5
  • TI-2019-06619 A cryptographic issue in OpenPGP.js <=4.2.0 allows an attacker who is able provide forged… CVSS 3.0MEDIUM 5.9

Sources