Like finding a critical flaw in a submarine's sonar decoder and telling every office building to panic
CVE-2025-29912 is a heap buffer overflow caused by an unsigned integer underflow in the Crypto_TC_ProcessSecurity function of NASA's CryptoLib, a C library implementing the CCSDS Space Data Link Security Protocol - Extended Procedures (SDLS-EP). When a Telecommand (TC) frame's fl (frame length) field is set to 0, the subtraction fl - 1 wraps to 65535, causing a massive out-of-bounds read/write in Crypto_TC_Parse_Check_FECF. The bug affects all versions from v1.0.3 through v1.3.3 and is fixed in v1.4.0. Under favorable heap layouts, code execution is theoretically possible; denial of service (crashing the TC processing pipeline) is reliable.
The vendor CVSS 3.1 score of 9.8 CRITICAL is mathematically correct for the abstract vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H), but it is profoundly misleading for enterprise patch prioritization. The 'Network' in AV:N refers to RF space data links and Space Link Extension (SLE) internal networks between ground stations and mission control centers — not the internet, not your corporate LAN, not anything reachable from a standard enterprise network. CryptoLib has 173 GitHub stars and ~69 forks. Its entire installed base consists of NASA missions, ESA partner programs, and a handful of aerospace defense contractors running cFS (core Flight System) test environments. Unless your 10,000 hosts include a satellite ground station, this CVE does not apply to you.
4 steps from start to impact.
Attacker gains access to the space data link or SLE network
- Physical access to the RF uplink path or logical access to the SLE ground network
- Knowledge of CCSDS TC frame structure and the specific mission's SCID/VCID configuration
- Ground stations are remote, physically secured, and staffed by cleared personnel
- SLE networks are isolated from corporate/internet networks — no IP path exists from enterprise environments
- RF uplink requires mission-specific modulation, frequency, and encoding knowledge
Craft a TC frame with fl=0
08 03 00 00 7F 0B...) that triggers the condition. No authentication bypass is needed because CryptoLib processes the frame header *before* cryptographic validation, so the underflow occurs during pre-auth parsing.- Ability to deliver the crafted frame to a CryptoLib instance (from step 1)
- The attacker must already have RF or SLE access — a precondition that filters out >99.999% of threat actors
- Frame delivery is one-shot; there's no interactive protocol to iterate
Trigger heap buffer overflow in Crypto_TC_Parse_Check_FECF
fl - 1 underflows to 65535, the function reads and writes far past the allocated TC frame buffer. In the best case for the attacker, this corrupts adjacent heap metadata or data structures, potentially hijacking control flow. In the common case, it causes an immediate crash (segfault) of the TC processing thread, resulting in denial of service to the spacecraft command pipeline.- The CryptoLib instance must be running a version ≤ 1.3.3
- The heap layout must be favorable for RCE; DoS is reliable
- Spacecraft flight software runs on RTOS (e.g., VxWorks, RTEMS) with radically different heap layouts than Linux — generic heap exploitation techniques don't apply
- cFS includes watchdog and fault-management that would restart the crashed app
- RCE exploitation on embedded space hardware is a nation-state-grade capability
Impact: DoS of spacecraft command link or theoretical RCE
- Successful completion of steps 1-3
- The blast radius is contained to the specific mission's TC pipeline
- No lateral movement path exists from a spacecraft to enterprise networks
cryptolib or nasa/CryptoLib. If absent (which it will be for >99.9% of enterprises), close this CVE as not-applicable in your vulnerability management system. No noisgate SLA applies — this is a LOW with no mitigation deadline. If present, escalate to your space/mission systems team immediately.-fsanitize=address to catch heap overflows during fuzzing and validation. This detects exploitation attempts in test but does not protect production flight software (which runs on RTOS without ASan support). Useful as a regression gate in CI pipelines.- WAF/IDS/IPS — CryptoLib processes CCSDS TC frames, not HTTP or IP-layer traffic. No web application firewall or network IDS has signatures for CCSDS protocol anomalies.
- EDR/antivirus — CryptoLib runs on embedded RTOS (VxWorks, RTEMS) or on Linux ground station backends that process RF-ingested frames. EDR agents don't inspect CCSDS frame payloads.
- Network segmentation — The relevant 'network' is an RF space link, not an IP network. Standard network segmentation controls have no bearing on RF uplink security.
The supporting signals.
| In-the-wild exploitation | None observed. Not listed on CISA KEV. No reports from any threat intelligence source of exploitation attempts. The attack surface (RF space links) makes opportunistic exploitation essentially impossible. |
|---|---|
| Proof-of-concept | Advisory-embedded PoC only. The GHSA-3f5x-r59x-p8cf advisory includes a hex payload that triggers ASan heap-buffer-overflow. A reproduction case exists in minhluannguyen/nice-archive PR #143. No standalone weaponized exploit or Metasploit/Nuclei module exists. No dedicated GitHub repos named after this CVE were found on pocindex.io or GitHub search. |
| EPSS score | 0.01122 (1.12%) — low probability of exploitation in the next 30 days, consistent with the niche attack surface. |
| KEV status | Not listed. No CISA KEV entry as of 2026-10-07. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8) — CVSS 4.0 rescores to 8.9 High. The AV:N is technically accurate (TC frames traverse a network-layer protocol) but the 'network' in question is an RF space link or isolated SLE network, not the internet. |
| Affected versions | CryptoLib v1.0.3 through v1.3.3 (all releases prior to v1.4.0). |
| Fixed version | v1.4.0 — fix commit ca39cb96 adds a frame-length floor check returning CRYPTO_LIB_ERR_TC_FRAME_LENGTH_UNDERFLOW before processing. |
| Scanning / exposure | Zero internet exposure. CryptoLib processes TC frames on spacecraft flight processors and ground station backend systems. These are air-gapped from the internet. No Shodan/Censys/GreyNoise/FOFA results exist because these systems do not listen on IP sockets accessible from the public internet. |
| Disclosure date | 2025-03-17 (GitHub Security Advisory publication). |
| Researchers | Discovered by mirkobitetto, coordinated by juriSacchetta and danmaam — affiliated with VisionSpace, who have found multiple CryptoLib vulnerabilities (CVE-2024-44910, CVE-2024-44911, CVE-2024-44912). |
Sources.
Why this verdict
- Attack surface is non-enterprise. The 'Network' vector in CVSS refers to CCSDS RF space data links and SLE ground networks — completely air-gapped from corporate networks and the internet. No enterprise perimeter device, no internal service, and no workstation exposes a CryptoLib TC processing endpoint. This single fact eliminates the vulnerability from enterprise patch queues.
- Installed base is near-zero in enterprise environments. CryptoLib has 173 GitHub stars, ~69 forks, and is used exclusively by NASA cFS missions and a small number of aerospace/defense ground station test environments. For a security team managing 10,000 hosts, the probability of CryptoLib being present is effectively 0% unless the organization operates satellite missions.
- Pre-auth parsing flaw is real but unreachable. The vulnerability *is* technically severe — pre-auth, no interaction, heap overflow — but severity without reachability is academic. The attacker needs RF uplink capability or SLE network access, both of which require physical presence at a ground station or nation-state-level RF interception capability.
- Role multiplier: CryptoLib's canonical deployment role is spacecraft flight software and ground station TC processing — both are mission-critical assets. However, this role falls entirely outside the enterprise high-value-role catalog (AD, IdP, hypervisors, CI/CD, backup, databases, EDR, network edge, SIEM, OT/ICS/SCADA controllers). While space systems are arguably adjacent to OT, they are managed by entirely separate organizations (NASA, ESA, defense primes) with different security frameworks. The blast radius — disruption of a spacecraft command link — is catastrophic *within that domain* but has zero lateral impact on enterprise networks. Because <0.01% of enterprise environments operate this component, the high-value-role floor does not apply.
- No exploitation pressure. Not KEV-listed, EPSS 1.12%, no known campaigns, no weaponized tooling, no Metasploit/Nuclei modules. The attack surface makes opportunistic exploitation impossible — only a targeted nation-state operation against a specific space mission could plausibly attempt this.
Why not higher?
A MEDIUM or higher rating would imply that enterprise security teams should allocate patching resources to this CVE. That is not warranted. CryptoLib is not present in enterprise environments, the attack surface (RF space links) is unreachable from any enterprise network path, and no exploitation tooling or campaigns exist. Elevating this would waste defender attention that should be focused on actually reachable vulnerabilities.
Why not lower?
An IGNORE rating would be appropriate for most enterprise environments, but we rate LOW rather than IGNORE because: (1) defense contractors and aerospace companies *do* manage ground station test environments alongside their enterprise fleet, and a shared vulnerability management system might surface this CVE; (2) the underlying bug class (unsigned integer underflow → heap overflow) is real and the PoC payload is public, so organizations that *do* run CryptoLib need to act; (3) the CVSS 4.0 rescore to 8.9 and the pre-auth nature of the flaw mean it should not be completely dismissed from tracking.
Crowdsourced verification payload.
Run this on any Linux/macOS host where you want to check if CryptoLib is installed or present as a build artifact. No special privileges required — it searches common paths and package databases. Invoke with: bash check_cve_2025_29912.sh
#!/usr/bin/env bash
# CVE-2025-29912 CryptoLib Heap Buffer Overflow Check
# Checks whether NASA CryptoLib <= 1.3.3 is present on this host.
# Exit codes: 0 = VULNERABLE, 1 = PATCHED, 2 = UNKNOWN (not found)
set -euo pipefail
VULN_MAX_MAJOR=1
VULN_MAX_MINOR=3
VULN_MAX_PATCH=3
check_version() {
local ver="$1"
local major minor patch
major=$(echo "$ver" | cut -d. -f1)
minor=$(echo "$ver" | cut -d. -f2)
patch=$(echo "$ver" | cut -d. -f3)
if [[ -z "$major" || -z "$minor" || -z "$patch" ]]; then
return 2
fi
if (( major < VULN_MAX_MAJOR )); then
return 0 # vulnerable
elif (( major == VULN_MAX_MAJOR )); then
if (( minor < VULN_MAX_MINOR )); then
return 0 # vulnerable
elif (( minor == VULN_MAX_MINOR )); then
if (( patch <= VULN_MAX_PATCH )); then
return 0 # vulnerable
fi
fi
fi
return 1 # patched
}
FOUND=0
# Check 1: Look for libcryptolib shared objects
for lib in $(find /usr /opt /home -name 'libcrypto_lib*' -o -name 'libCryptoLib*' -o -name 'libcryptolib*' 2>/dev/null || true); do
echo "[*] Found CryptoLib artifact: $lib"
FOUND=1
done
# Check 2: Look for CryptoLib source/build directories
for d in $(find /usr /opt /home /root -maxdepth 5 -type d -iname 'cryptolib' 2>/dev/null || true); do
echo "[*] Found CryptoLib directory: $d"
# Try to find version in CMakeLists.txt
cmake_file="$d/CMakeLists.txt"
if [[ -f "$cmake_file" ]]; then
ver=$(grep -oP 'project\s*\(.*VERSION\s+\K[0-9]+\.[0-9]+\.[0-9]+' "$cmake_file" 2>/dev/null || true)
if [[ -n "$ver" ]]; then
echo "[*] Detected CryptoLib version: $ver"
if check_version "$ver"; then
echo "VULNERABLE - CryptoLib $ver is affected by CVE-2025-29912 (fixed in 1.4.0)"
exit 0
else
echo "PATCHED - CryptoLib $ver is not affected by CVE-2025-29912"
exit 1
fi
fi
fi
FOUND=1
done
# Check 3: Search for crypto_tc.c containing the vulnerable function
for f in $(find /usr /opt /home -name 'crypto_tc.c' 2>/dev/null || true); do
if grep -q 'Crypto_TC_ProcessSecurity' "$f" 2>/dev/null; then
echo "[*] Found CryptoLib source file: $f"
if grep -q 'CRYPTO_LIB_ERR_TC_FRAME_LENGTH_UNDERFLOW' "$f" 2>/dev/null; then
echo "PATCHED - Source contains the CVE-2025-29912 fix"
exit 1
else
echo "VULNERABLE - Source lacks the CVE-2025-29912 underflow check"
exit 0
fi
fi
done
if [[ $FOUND -eq 1 ]]; then
echo "UNKNOWN - CryptoLib artifacts found but version could not be determined"
exit 2
fi
echo "UNKNOWN - CryptoLib not found on this host (likely not applicable)"
exit 2