Skip to main content

go-xrpl CVE-2026-61694

| EUVDEUVD-2026-114378 LOW
Integer Overflow or Wraparound (CWE-190)
2026-10-30 security-advisories@github.com
3.7
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Introduce MPT amount with magnitude ≥ 2^63
  2. Delivery
    go-xrpl parses 33-byte sfAmount via ParseMPTAmountBinary
  3. Exploit
    num.Int64() wraps to negative MPTRaw, no error
  4. Execution
    EscrowData.MPTAmount mis-stored
  5. Impact
    Ledger-state divergence from rippled

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Integer overflow checks
MITRE ATT&CK

1 technique across 1 tactic: Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a 33-byte MPToken (MPT) amount field whose 8-byte magnitude is at least 2^63 (0x8000000000000000 or higher) to be fed to one of the two internal decoders: ParseMPTAmountBinary in internal/ledger/state/ripple_state.go (reached via ParseEscrow for sfAmount fields in escrow ledger entries) or readMPTAmount in internal/tx/ledgerfields/decode_stream.go. The exploitation is strongly LIMITED by the fact that such a magnitude exceeds rippled's maximum valid MPT amount (maxMPTokenAmount = 2^63-1), so a conforming XRPL network will not normally emit it - the attacker must supply crafted/malformed binary ledger or transaction data (reflected in AC:H). It is further limited in scope: the public codec codec/binarycodec/types/amount.go already rejects these values, so only consumers using the two internal decoders are affected. Impact is integrity-only (wrong amount, node/rippled divergence); there is no confidentiality or availability effect and no authentication is required to submit the data.

Impact

This is a genuinely low-priority issue consistent across all available signals. The CVSS base score is 3.7 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N): network vector but high attack complexity, no privileges or user interaction, no confidentiality or availability impact, and only low integrity impact. The vuln.today Decision label is 'monitor,' the lowest urgency tier, which aligns with the score. No CISA KEV listing and no EPSS score are present in the input, so there is no signal of active or probable exploitation; absence of these is not evidence of safety but gives no cause for escalation. The published material includes a byte-level reproducer blob and a Zorya concolic-execution harness that independently identified the triggering byte (0x80), plus regression tests in the fix commit - so a public proof-of-concept reference exists, though it is a reproducer demonstrating the int64 wrap, not a verified working remote exploit. The AC:H is justified by mechanism: the flaw only triggers when an MPT magnitude of at least 2^63 reaches the internal decoder, a value that exceeds rippled's maxMPTokenAmount (2^63-1) and that a conforming XRPL network would not normally produce, so reaching the code path requires out-of-range/malformed ledger data. The real-world consequence is correctness/consensus divergence (a go-xrpl node interpreting an escrow MPT amount differently from rippled), not direct compromise. Net: a real correctness bug worth patching, but low operational risk and no indication of a priority emergency.

Exploit ScenarioDerived

A malformed or hostile MPT amount whose magnitude is at least 2^63 reaches a go-xrpl node - for example a 33-byte sfAmount in an escrow entry parsed by ParseEscrow. The internal ParseMPTAmountBinary calls num.Int64() without a 63-bit check, so the positive magnitude silently two's-complement-wraps into a large negative MPTAmount and is stored without error, and the streaming readMPTAmount similarly surfaces over-limit values as bogus decimal strings; downstream calculations and the node's interpretation of the entry then diverge from rippled. A reproducer blob and a Zorya concolic harness are published in the GHSA advisory, but no weaponized exploit; the AV:N/AC:H rating reflects that reaching the path requires crafted out-of-range data.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Integer overflow in go-xrpl's internal MPT amount decoders causes a crafted 33-byte MPToken amount with an 8-byte magnitude of 2^63 or greater to be decoded without proper range validation: ParseMPTAmountBinary wraps the value into a negative int64, and readMPTAmount emits an over-limit decimal string. This affects go-xrpl through 0.0.0-20260618134614-cb77d640ee26 and can corrupt EscrowData.MPTAmount and cause divergence from rippled's maxMPTokenAmount (2^63-1) interpretation, while the public binary codec already rejects such values. Exploitation requires supplying malformed ledger or transaction data (AC:H) and yields integrity-only impact; no CISA KEV entry or confirmed public exploit code was identified, although the advisory includes a local reproducer, and the vuln.today priority label is monitor.

RemediationAI

Upgrade go-xrpl to 0.0.0-20260624143208-9dbd3935ed6c, which contains commit 9dbd3935ed6c54f0232f2291edf9c012a0900dd5 (PR #1093) and adds a num.BitLen() > 63 guard in ParseMPTAmountBinary plus a mant > math.MaxInt64 check in readMPTAmount. If upgrading is not immediately possible, validate 33-byte MPT amounts before they reach the internal decoders: reject any magnitude field >= 2^63 (or big.Int.BitLen() > 63) and route parsing through the public codec codec/binarycodec/types/amount.go, which already rejects such values. The trade-off is that malformed or non-conforming escrow/transaction entries will be rejected rather than decoded, which is preferable to silently corrupting EscrowData.MPTAmount or diverging from rippled; do not rely on downstream checks to catch the wrapped negative value. Advisory: https://github.com/LeJamon/go-xrpl/security/advisories/GHSA-j5cw-qr86-mmv7.

Affected VersionsENISA

go-xrpl ≤ 0.0.0-20260618134614-cb77d640ee26

Affected Packages

euvd go_xrpl no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

go-xrpl is a Go implementation of the XRP Ledger protocol. MPToken (MPT) amounts in binary ledger fields are 33 bytes: a one-byte type/sign header, an eight-byte big-endian magnitude, and a 24-byte issuance ID. In ParseMPTAmountBinary (internal/ledger/state/ripple_state.go), the magnitude is assembled into a big.Int and converted with num.Int64() without checking num.BitLen() <= 63; a magnitude >= 2^63 therefore wraps two's-complement into a negative value and is returned without error. ParseEscrow passes 33-byte sfAmount fields to this parser and stores MPTRaw() in EscrowData.MPTAmount, so downstream escrow calculations can use the wrong sign/value. Independently, readMPTAmount in internal/tx/ledgerfields/decode_stream.go reads the magnitude as uint64 and formats it with FormatUint without enforcing math.MaxInt64, despite a comment claiming verifyMPTValue constrains the value. rippled limits MPT amounts to maxMPTokenAmount = 2^63-1, and the public codec codec/binarycodec/types/amount.go already has the correct BitLen guard, leaving the internal decoders inconsistent. The trigger is a crafted/malformed 33-byte amount field with magnitude 0x8000000000000000 or higher; conforming network data should not contain it. The advisory classifies the flaw as CWE-190 integer overflow/wraparound and CWE-681 incorrect conversion between numeric types.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (github) PRIMARY 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.7 LOW

Network-supplied ledger data (AV:N), no auth needed (PR:N), but the trigger value exceeds valid MPT bounds so reaching the path requires crafted out-of-range data (AC:H); only a low integrity/correctness impact (I:L), no C or A.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

DescriptionCVE.org

go-xrpl is a Go implementation of the XRP Ledger protocol. In versions through the June 18, 2026 revision identified by the advisory, ParseMPTAmountBinary in internal/ledger/state/ripple_state.go converts the eight-byte MPT magnitude using num.Int64() without checking that it fits in 63 bits. A positive magnitude of at least 2^63 silently wraps into a negative amount without an error. ParseEscrow passes 33-byte sfAmount fields to the parser and stores MPTRaw() in EscrowData.MPTAmount, causing incorrect downstream calculations and divergence from rippled's interpretation of the same escrow entry. Independently, readMPTAmount in internal/tx/ledgerfields/decode_stream.go accepts over-limit magnitudes and surfaces large decimal strings without enforcing the maximum signed 64-bit value. The public codec in codec/binarycodec/types/amount.go already rejects these values, leaving the internal decoders inconsistent with that safe path. A source fix is available in commit 9dbd3935ed6c54f0232f2291edf9c012a0900dd5.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
niche single-maintainer Go XRP Ledger library, limited production adoption
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

18
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +18
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Integer overflow occurs when an arithmetic operation produces a result that exceeds the maximum value a given integer type can store.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy