← Back to Feed CACHED · 2026-10-06 19:08:50 · CACHE_KEY CVE-2025-29912
CVE-2025-29912 · CWE-122 · Disclosed 2025-03-17

NASA CryptoLib Heap Buffer Overflow via TC Frame Length Underflow in Crypto_TC_ProcessSecurity

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

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.

"Spacecraft crypto library bug scores 9.8 but lives on RF links your enterprise will never see"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Attacker gains access to the space data link or SLE network

The attacker must be able to inject crafted Telecommand (TC) frames into the RF uplink path between a ground station and a spacecraft, or into the SLE network between a ground station and mission control center. This requires either physical proximity to the RF link with compatible radio equipment, or compromise of the highly isolated ground station network. These are air-gapped, physically secured environments with strict personnel controls.
Conditions required:
  • 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
Where this breaks in practice:
  • 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
Detection/coverage: No commercial scanner covers this. Detection would be anomaly-based on TC frame validation failures in mission telemetry systems.
STEP 02

Craft a TC frame with fl=0

The attacker constructs a Telecommand frame with the frame length field set to 0. This is a trivial modification — the GHSA advisory includes a sample hex payload (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.
Conditions required:
  • Ability to deliver the crafted frame to a CryptoLib instance (from step 1)
Where this breaks in practice:
  • 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
Detection/coverage: AddressSanitizer catches this in dev/test environments. In production flight software, a crash or watchdog reset would be the observable symptom.
STEP 03

Trigger heap buffer overflow in Crypto_TC_Parse_Check_FECF

When 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.
Conditions required:
  • The CryptoLib instance must be running a version ≤ 1.3.3
  • The heap layout must be favorable for RCE; DoS is reliable
Where this breaks in practice:
  • 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
Detection/coverage: Crash telemetry from the spacecraft's fault management system. No enterprise detection tool covers this environment.
STEP 04

Impact: DoS of spacecraft command link or theoretical RCE

Successful exploitation disrupts the ability to send commands to the spacecraft (DoS) or, in the theoretical worst case, allows arbitrary code execution on the spacecraft's onboard processor or the ground station's CryptoLib instance. For a space mission, this is catastrophic. For an enterprise with no space mission assets, this has zero impact.
Conditions required:
  • Successful completion of steps 1-3
Where this breaks in practice:
  • The blast radius is contained to the specific mission's TC pipeline
  • No lateral movement path exists from a spacecraft to enterprise networks
03 · Compensating Control

1
LOW 2.0→IGNORE 0.0
SEVERITY REDUCED
Confirm CryptoLib is not in your software inventory — Run a software composition analysis (SCA) scan or query your SBOM/asset database for 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.
2
LOW 2.0→IGNORE 0.0
SEVERITY REDUCED
Upgrade to CryptoLib v1.4.0+ if present — For the rare organization that operates CryptoLib (aerospace/defense ground station environments), upgrade to v1.4.0 or later, which adds a frame-length floor check. The noisgate remediation SLA for LOW is backlog hygiene — no hard deadline — but given the pre-auth nature and the CVSS score in the mission context, space mission operators should treat this as CRITICAL within their own frameworks and patch within days.
3
LOW 2.0→LOW 1.5
Enable AddressSanitizer in test/dev CryptoLib builds — For development and integration test environments running CryptoLib, compile with -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.
What doesn't work
  • 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.
04 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone 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-conceptAdvisory-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 score0.01122 (1.12%) — low probability of exploitation in the next 30 days, consistent with the niche attack surface.
KEV statusNot listed. No CISA KEV entry as of 2026-10-07.
CVSS vectorCVSS: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 versionsCryptoLib v1.0.3 through v1.3.3 (all releases prior to v1.4.0).
Fixed versionv1.4.0 — fix commit ca39cb96 adds a frame-length floor check returning CRYPTO_LIB_ERR_TC_FRAME_LENGTH_UNDERFLOW before processing.
Scanning / exposureZero 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 date2025-03-17 (GitHub Security Advisory publication).
ResearchersDiscovered 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.

  1. GitHub Security Advisory GHSA-3f5x-r59x-p8cf
  2. NASA CryptoLib GitHub Repository
  3. Fix Commit ca39cb96
  4. OSV Database Entry — CVE-2025-29912
  5. VisionSpace — How to Crash a Spacecraft (prior CryptoLib research)
  6. CryptoLib Documentation
  7. CCSDS Space Data Link Security Protocol Specification
05 · The Call

Final Verdict
↓ DOWNGRADED to LOW (2.0/10)

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.

06 · Verification

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

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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