A 9.8 CVE that's terrifying if you fly satellites and irrelevant if you don't
CVE-2025-29912 is a heap buffer overflow in NASA's CryptoLib, an open-source implementation of the CCSDS Space Data Link Security Protocol – Extended Procedures (SDLS-EP) used to protect telecommand/telemetry links between spacecraft and ground stations. The bug lives in Crypto_TM_ProcessSecurity (crypto_tm.c:1735): the Secondary Header Length field is masked with & 0x3F (capping at 64) but the code never verifies that 6 + secondary_hdr_len stays inside the ingested packet buffer, so a crafted TM frame causes memcpy to write past the allocated heap chunk. Affected versions are 1.3.3 and earlier; the fix landed in the post-1.3.3 mainline, though follow-on CVEs (CVE-2025-29909, -30216, -30356) show the surrounding parsing code needed additional hardening.
The vendor CVSS of 9.8 (AV:N/AC:L/PR:N/UI:N) is technically correct — the parser takes attacker-controlled bytes with no auth — but the network vector is a purpose-built spacecraft link, not the public internet or a corporate LAN. For the ~0.001% of the world that operates ground station software linking cFS-based spacecraft, this is genuinely critical. For the enterprise defender with 10,000 Windows/Linux hosts, RHEL boxes, and Kubernetes clusters, CryptoLib will not appear on your SBOM. The score is real; the reachable population is not.
3 steps from start to impact.
Attacker reaches the SDLS-EP framing pipeline
Crypto_TM_ProcessSecurity. In practice this means the RF uplink/downlink path, the ground station's frame router, or a lab bench feeding cFS. Weaponization would use a hand-rolled scapy/python CCSDS packet crafter — no public PoC beyond the advisory's minimized case.- Access to the spacecraft/ground-station data link or a bus that feeds CryptoLib
- Knowledge of the deployed SDLS-EP configuration (SPI, MAP)
- CCSDS TM links are not internet-routable; access requires RF proximity, a compromised ground segment, or an insider on the mission network
- Frame Check Sequence and link-layer validation drop malformed packets before they reach the crypto layer in most flight/ground stacks
syft/grype against the ground-station image or grep for libcryptolib / crypto_tm.c.Craft the malformed Secondary Header Length
& 0x3F mask, produces a value larger than len_ingest - 6. The parser trusts the field and issues memcpy(dest, src, 6 + secondary_hdr_len), walking off the end of the heap chunk allocated for the ingested frame.- Ability to set arbitrary bytes in the Secondary Header Flag and Length nibbles
- No upstream frame-length sanity check in the caller
- Real deployments generally wrap CryptoLib inside a mission-specific handler that already validates frame length against the link's fixed TM frame size (typically 1115 or 2044 bytes)
Heap overflow → DoS, potentially RCE
- Repeatable frame injection to spray/shape the heap
- Absence of hardening flags (
_FORTIFY_SOURCE=2, heap canaries)
- cFS on RTEMS/VxWorks uses static memory pools — classic ptmalloc exploitation techniques don't apply
- Ground stations are typically air-gapped or on dedicated mission WANs monitored by the operations team
The supporting signals.
| CVE | CVE-2025-29912 — Heap Buffer Overflow in Crypto_TM_ProcessSecurity |
|---|---|
| CWE | CWE-122 (Heap-based Buffer Overflow) |
| Vendor CVSS | 9.8 CRITICAL AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — network vector is the CCSDS link, not the Internet |
| EPSS | 0.01129 (~1.1%) — negligible predicted exploitation probability |
| KEV | Not listed. No CISA KEV entry as of 2026-07-16 |
| Affected | nasa/CryptoLib ≤ 1.3.3 |
| Fixed in | Post-1.3.3 mainline commit adding secondary-header bounds check; follow-on CVEs (29909, 30216, 30356) indicate the parser required multiple rounds of hardening — track the main branch |
| PoC | Minimized reproducer in the GHSA advisory (GHSA-v3jc-5j74-hcjv). No public weaponized exploit; no Metasploit/Nuclei module |
| In-the-wild | No observed exploitation. GreyNoise / Shodan / Censys do not track SDLS-EP endpoints — the protocol runs over RF and mission-dedicated links |
| Disclosed | 2025-03-17 by NASA Goddard via GitHub Security Advisory |
| Deployment population | NASA cFS-based missions, aerospace primes, university cubesat programs, ESA experimental ground stations — measured in the low hundreds globally |
noisgate verdict.
Downgraded from CRITICAL 9.8 to LOW because the *decisive factor* is installed-base share below 0.01% of enterprise environments — CryptoLib is aerospace ground-segment/flight software, not a component that exists on typical enterprise SBOMs. If you operate a CCSDS ground station or cFS-based spacecraft this bug is a legitimate CRITICAL and the LOW rating does not apply to you; treat this verdict as scoped to general-purpose enterprise IT.
Why this verdict
- Reachable population is effectively zero for enterprise IT. CryptoLib is not in RHEL, Ubuntu, Debian, Alpine, or any major container base image. It ships only with NASA cFS and aerospace forks.
- Network vector is not the Internet. AV:N in CVSS terminology means "across a network" — here that network is a CCSDS TM link, reached via RF, mission fiber, or an insider on the ground segment. There is no shodan-scannable attack surface.
- Role multiplier — flight/ground software: On a NASA cFS spacecraft or a mission control ground station, the chain succeeds and blast radius is spacecraft compromise / telemetry corruption / potential safety-of-flight impact. That is a genuine floor of CRITICAL for aerospace operators, but the canonical component base is aerospace-only — general enterprises hold ~0% share, so the enterprise verdict floor drops out.
- No KEV, EPSS 1.1%, no weaponized PoC. Zero indicators of opportunistic exploitation.
- Follow-on CVEs (29909/30216/30356) mean the fix chain must be tracked as a set — patching only 29912 leaves siblings open. This is a maintenance note, not a severity driver.
Why not higher?
MEDIUM or higher would require either a plausible enterprise SBOM footprint (there is none) or evidence of active exploitation against ground stations (there is none). CRITICAL would require the CryptoLib parser to be reachable from the public internet on typical corporate infrastructure, which it is not.
Why not lower?
Not IGNORE because aerospace defenders, cubesat operators, and defense/space primes DO run this code and for them a crafted TM frame ending in heap corruption of the security frontend is a real safety-relevant bug. Documenting rationale without action would be wrong for that sub-population.
What to do — in priority order.
- Inventory: confirm CryptoLib is not on your SBOM — Run
syft/grype/trivyacross build artifacts and container images searching forcryptolib,crypto_tm.c,Crypto_TM_ProcessSecurity, and NASA cFS signatures. If nothing hits — and it won't in 99.99% of enterprises — close the ticket with rationale. Complete inventory sweep within the noisgate LOW backlog window (no SLA). - If you DO ship CryptoLib: upgrade past 1.3.3 and pull sibling CVE fixes — Track the nasa/CryptoLib
mainbranch and pull the fixes for CVE-2025-29909, -29912, -30216, and -30356 as a set — patching only one leaves the parser exploitable via a neighboring code path. For aerospace operators this is a CRITICAL for you and should be handled under noisgate mitigation SLA ≤ 3 days. - Enforce upstream frame-length validation — Wrap
Crypto_TM_ProcessSecurityin a caller-side length check that rejects any frame whose declared secondary header length exceedslen_ingest - 6. This is a durable defense across the sibling CVEs and takes effect immediately without waiting on a library release. - Rebuild with hardening flags — Compile flight/ground builds with
-D_FORTIFY_SOURCE=2 -fstack-protector-strong -Wl,-z,relro,-z,nowand, on ground-station Linux, enable ASan in test rigs. Reduces the exploitability of any residual parser bug.
- EDR / AV — CrowdStrike, SentinelOne, Defender do not have signatures for CCSDS frame malformations and are not deployed on RTEMS/VxWorks flight targets.
- WAF / NGFW — CCSDS TM traffic does not traverse HTTP, TLS, or IP paths that a WAF inspects. Palo Alto App-ID has no signature for SDLS-EP.
- Perimeter patching schedule for corporate infra — There is nothing to patch on your Windows/Linux fleet. Do not create a ticket per host; this is an SBOM/vendor-package question.
Crowdsourced verification payload.
Run this on any Linux build server, container-image scanner host, or ground-station box. It searches installed binaries and source trees for CryptoLib and reports the version. Invoke as ./check-cryptolib.sh /opt /usr/local /srv/cfs. No root required for read-only scans; use root if you need to walk /opt on locked-down systems.
#!/usr/bin/env bash
# noisgate: CVE-2025-29912 CryptoLib presence + version check
# Usage: ./check-cryptolib.sh [paths...]
# Exit: 0 PATCHED/absent, 1 VULNERABLE, 2 UNKNOWN
set -u
PATHS=("${@:-/opt /usr/local /usr/lib /srv}")
STATUS=0
FOUND=0
version_lte_133() {
# returns 0 if $1 <= 1.3.3
local v=$1
printf '%s\n1.3.3\n' "$v" | sort -V | head -1 | grep -qx "$v"
}
for P in "${PATHS[@]}"; do
[ -d "$P" ] || continue
# binary/library search
while IFS= read -r hit; do
FOUND=1
echo "[hit] $hit"
# try to extract a version string embedded in the binary
v=$(strings "$hit" 2>/dev/null | grep -Eo 'CryptoLib[[:space:]]*v?[0-9]+\.[0-9]+\.[0-9]+' | head -1 | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')
if [ -n "$v" ]; then
if version_lte_133 "$v"; then
echo "VULNERABLE: CryptoLib $v at $hit (<=1.3.3)"
STATUS=1
else
echo "PATCHED: CryptoLib $v at $hit"
fi
else
echo "UNKNOWN version for $hit — inspect manually"
[ $STATUS -eq 0 ] && STATUS=2
fi
done < <(find "$P" -type f \( -name 'libcryptolib*' -o -name 'cryptolib*' -o -name 'crypto_tm.c' \) 2>/dev/null)
done
if [ $FOUND -eq 0 ]; then
echo "PATCHED: CryptoLib not present in scanned paths — this host is not affected."
exit 0
fi
exit $STATUS
If you remember one thing.
Crypto_TM_ProcessSecurity with a caller-side length check, and remediate within 90 days by upgrading past 1.3.3 and pulling the sibling fixes for CVE-2025-29909, -30216, and -30356 as one bundle — patching 29912 alone leaves the parser exploitable via neighboring paths.Sources
- NVD — CVE-2025-29912
- GitHub Security Advisory GHSA-v3jc-5j74-hcjv
- Red Hat Security — CVE-2025-29912
- nasa/CryptoLib releases
- Sibling advisory GHSA-3f5x-r59x-p8cf (Crypto_TC_ProcessSecurity)
- Sibling advisory GHSA-q4v2-fvrv-qrf6 (Crypto_TC_Prep_AAD)
- AISLE research on NASA CryptoLib (CVE-2025-59534)
- CCSDS SDLS-EP Blue Book (355.1-B-1)
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.