Description
bitcoinjs-lib is a JavaScript Bitcoin library for Node.js and browsers. From 2.3.0 until 5.2.1, 6.1.8, and 7.0.2, fastMerkleRoot pads odd Merkle-tree levels by hashing the final node with itself but does not report adjacent duplicate hashes. The affected block-root verifier was introduced as Block.checkMerkleRoot() alongside Block.calculateMerkleRoot(), while later versions expose validation through checkTxRoots() and __checkMerkleRoot; these validation paths can accept a recomputed root without checking for mutation. A peer can append duplicate transactions so a different transaction list retains the original Merkle root, block header, proof of work, and block identifier. Consumers that rely on block-root validation, including explorers, exchange indexers, or SPV clients, can process a duplicated transaction twice or blacklist the shared block hash and reject the honest block. This issue is fixed in versions 5.2.1, 6.1.8, and 7.0.2.
Published: 2026-11-04
Score: 9.3 Critical
EPSS: n/a
KEV: No
Impact: Blockchain transaction integrity compromise
Action: Immediate Patch
AI Analysis

Impact

bitcoinjs-lib calculates the Merkle root of a block by padding odd levels of the Merkle tree. The implementation does not detect adjacent duplicate hashes, allowing a peer to append duplicate transactions. As a result, a forged transaction list can produce the same Merkle root, block header, proof‑of‑work, and block identifier as a legitimate block. The flaw enables a malicious actor to process a duplicated transaction twice, or to make an honest block appear invalid and be rejected. The vulnerability is a direct compromise of transaction and block integrity, classified under CWE‑354.

Affected Systems

The affected library is bitcoinjs:bitcoinjs-lib. Versions from 2.3.0 up to and including 5.2.1, 6.1.8, and 7.0.2 contain the weakness. All builds of the library within these ranges used the same Merkle‑root calculation code.

Risk and Exploitability

The CVSS score of 9.3 indicates critical severity. EPSS information is not available, and the vulnerability is not listed in the CISA KEV catalog at this time. A direct attacker would need to supply a manipulated block or transaction list to a client or indexer that relies on the library’s Merkle‑root validation. If the application blindly accepts the recomputed root without validating mutations, the exploit is feasible and could lead to double‑spending or block rejection attacks. While the exact likelihood of exploitation is uncertain due to missing EPSS data, the high CVSS score and the fundamental nature of the flaw warrant immediate attention.

Generated by OpenCVE AI on November 4, 2026 at 20:21 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update bitcoinjs-lib to a fixed release (5.2.1, 6.1.8, or 7.0.2) as recommended in the security advisory.
  • Audit application code to ensure that it uses the updated checkTxRoots or __checkMerkleRoot methods for block validation.
  • After updating, verify that no legacy Merkle‑root calculation paths remain in the codebase; if they do, disable them until the patch is applied.

Generated by OpenCVE AI on November 4, 2026 at 20:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 04 Nov 2026 19:15:00 +0000

Type Values Removed Values Added
Description bitcoinjs-lib is a JavaScript Bitcoin library for Node.js and browsers. From 2.3.0 until 5.2.1, 6.1.8, and 7.0.2, fastMerkleRoot pads odd Merkle-tree levels by hashing the final node with itself but does not report adjacent duplicate hashes. The affected block-root verifier was introduced as Block.checkMerkleRoot() alongside Block.calculateMerkleRoot(), while later versions expose validation through checkTxRoots() and __checkMerkleRoot; these validation paths can accept a recomputed root without checking for mutation. A peer can append duplicate transactions so a different transaction list retains the original Merkle root, block header, proof of work, and block identifier. Consumers that rely on block-root validation, including explorers, exchange indexers, or SPV clients, can process a duplicated transaction twice or blacklist the shared block hash and reject the honest block. This issue is fixed in versions 5.2.1, 6.1.8, and 7.0.2.
Title bitcoinjs-lib: Undetected merkle node duplication in block root computation validates a forged transaction list
Weaknesses CWE-354
References
Metrics cvssV4_0

{'score': 9.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:L/SC:N/SI:H/SA:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-11-04T19:02:39.453Z

Reserved: 2026-10-08T22:34:49.291Z

Link: CVE-2026-107846

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-11-04T19:17:18.130

Modified: 2026-11-04T19:17:18.130

Link: CVE-2026-107846

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-11-04T20:30:17Z

Weaknesses
  • CWE-354

    Improper Validation of Integrity Check Value