← Back to Feed CACHED · 2026-09-18 08:52:12 · CACHE_KEY CVE-2026-74469
CVE-2026-74469 · CWE-190 · Disclosed 2026-08-15

In the Linux kernel

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

CVE-2026-74469 is a 16-bit integer wrap in the Linux kernel's SCTP subsystem.

CVE-2026-74469 is a 16-bit integer wrap in the Linux kernel's SCTP subsystem. The function sctp_assoc_add_peer() increments a u16 transport_count for each unique peer address added to an association. When the 65,536th peer wraps the counter to zero, any subsequent NETLINK_SOCK_DIAG query (e.g. ss -S, or a monitoring daemon) allocates a zero-length payload buffer but then copies one sockaddr_storage per entry in the real transport list — writing roughly 8 MiB past the skb tail into kernel heap. The bug was introduced in commit 8f840e47 (kernel 4.7, July 2016) and fixed in 6.6.151, 6.12.103, 6.18.44, 7.1.8, and 7.2-rc6. Affected distros include Ubuntu 24.04/22.04/20.04/18.04 LTS and RHEL/Rocky 8/9.

The vendor CVSS of 8.8 HIGH overstates real-world risk by at least two full points. The score assumes AV:N/AC:L, but ignores three compounding friction layers: (1) SCTP is a niche telecom protocol whose kernel module is not loaded by default on any major distro, (2) the attacker must inject 65,536 unique peer addresses into a single association — either via INIT address parameters or ASCONF ADD_IP chunks (the latter requires net.sctp.addip_enable=1, which defaults to OFF) — and (3) the actual heap overflow is not triggered by the network traffic itself but by a *separate* local NETLINK_SOCK_DIAG request, making this a two-stage attack. Ubuntu's own triage rated this Medium priority, which aligns with a realistic assessment.

"SCTP integer wrap causes 8 MiB heap overflow, but 65K-peer prerequisite and niche protocol limit real-world risk"
02 · The Attack Path

5 steps from start to impact.

STEP 01

SCTP module must be loaded

The sctp kernel module is not loaded by default on standard Linux distributions. It must be explicitly loaded via modprobe sctp or pulled in by an application that creates an SCTP socket (telecom stacks like Diameter, SIGTRAN, or 5G CNFs). Without this module, the vulnerable code path is entirely unreachable.
Conditions required:
  • Target kernel has CONFIG_IP_SCTP=m or =y
  • Module is loaded or auto-loads on socket creation
Where this breaks in practice:
  • SCTP is unused on the vast majority of enterprise Linux hosts — estimated <5% of the installed base
  • Default firewall rules on most distros do not permit SCTP (iptables/nftables rules typically cover TCP/UDP only, implicitly dropping SCTP)
STEP 02

Establish SCTP association with target

The attacker must initiate or be part of an SCTP association with the target host. This requires network reachability to an SCTP-listening port. In telecom deployments, SCTP endpoints are typically on isolated signaling networks (e.g., SS7-over-IP, Diameter), not exposed to the internet.
Conditions required:
  • Target is running an SCTP server application
  • Attacker has network path to the SCTP port
Where this breaks in practice:
  • Telecom SCTP endpoints sit on private signaling VLANs, rarely internet-facing
  • Enterprise firewalls generally do not pass SCTP (IP protocol 132)
Detection/coverage: Network IDS can flag SCTP INIT from unexpected sources; Shodan/Censys show negligible public SCTP exposure.
STEP 03

Inject 65,536 unique peer transport addresses

The attacker must cause sctp_assoc_add_peer() to be called 65,536 times with unique addresses on a single association. This can be attempted via INIT chunks containing many addresses, or via repeated ASCONF ADD_IP chunks. ASCONF ADD_IP requires the sysctl net.sctp.addip_enable=1 (default: 0). Even via INIT, kernel-side limits on INIT chunk size and address parsing impose practical ceilings well below 65K addresses per handshake, requiring sustained multi-packet interaction.
Conditions required:
  • Sustained SCTP association with the target
  • Either ASCONF ADD_IP enabled OR ability to send many INIT retries with distinct addresses
Where this breaks in practice:
  • Default addip_enable=0 blocks the ASCONF vector entirely
  • Kernel INIT parsing limits chunk sizes; reaching 65K addresses requires extraordinary sustained traffic that any rate limiter or monitoring would flag
  • Memory pressure from 65K transport structures (~hundreds of MB) may OOM-kill the association before the wrap
Detection/coverage: Anomaly detection on SCTP association transport counts; memory pressure alerts would fire long before 65K transports.
STEP 04

Trigger NETLINK_SOCK_DIAG dump

After the transport_count wraps to zero, a sock_diag query must occur. This happens when anyone runs ss -S, or when a monitoring agent (e.g., Prometheus node_exporter, Telegraf) queries socket diagnostics via netlink. The query is unprivileged — any local user or cron job can trigger it. The diag handler allocates a zero-byte INET_DIAG_PEERS payload but then iterates the real 65K-entry transport list, writing ~8 MiB past the skb tail.
Conditions required:
  • transport_count has wrapped to zero (step 3 completed)
  • Any local process issues a NETLINK_SOCK_DIAG request
Where this breaks in practice:
  • Requires a second stage — the network attacker alone cannot trigger the overflow without a local diag query
  • Timing dependency: diag must fire while the wrapped association is still alive
Detection/coverage: Kernel KASAN/KFENCE would catch the OOB write immediately in debug builds; crash dump analysis reveals skb overrun.
STEP 05

Kernel heap corruption → DoS or code execution

The 8 MiB overwrite corrupts adjacent kernel heap objects. The most likely outcome is an immediate kernel panic (DoS). Achieving reliable code execution from an 8 MiB linear overwrite is theoretically possible but practically very difficult — heap layout is non-deterministic, KASLR and SMEP/SMAP are in play, and the overwrite is not surgically controlled. Realistic impact is kernel crash / denial of service.
Conditions required:
  • Successful heap overwrite from step 4
Where this breaks in practice:
  • KASLR, SMEP, SMAP, and heap randomization make reliable RCE from a large linear overwrite extremely difficult
  • 8 MiB overwrite is more likely to hit unmapped pages and panic than land on a useful target
Detection/coverage: Kernel panic logs; kdump/crash analysis will show the skb tail overrun in the SCTP diag path.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo known exploitation. Not listed in CISA KEV. No campaigns or threat actor usage reported as of 2026-09-18.
Proof of ConceptNo public PoC available. No exploit code found in major PoC repositories (GitHub, Exploit-DB). The 65K-peer prerequisite makes weaponization non-trivial.
EPSS Score0.00469 (0.47%) — bottom quartile. FIRST model rates exploitation probability as very low within 30 days.
KEV StatusNot listed. No CISA KEV entry as of 2026-09-18.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — Vendor rates 8.8 HIGH. The AV:N component is misleading: the heap overflow trigger requires a *local* NETLINK_SOCK_DIAG request, making this effectively a two-stage local+network attack.
Affected VersionsLinux kernel 4.7 (commit 8f840e47, July 2016) through unpatched current branches. 10-year window across all major distro kernels.
Fixed VersionsUpstream: 6.6.151, 6.12.103, 6.18.44, 7.1.8, 7.2-rc6 (commit bd0e928). Ubuntu: patches tracking for noble/jammy/focal/bionic. RHEL/Rocky: CIQ kernel-src-tree PRs merged for EL8/EL9.
Scanning / ExposureSCTP exposure on public internet is negligible. Shodan/Censys show minimal SCTP (IP proto 132) listeners. GreyNoise has no tagged sensors for this CVE. The attack surface is overwhelmingly on private telecom signaling networks.
Disclosure Date2026-08-15 — published via linux-cve-announce. Last NVD modification 2026-08-19. Ubuntu tracked as of 2026-09-17.
Reporting ResearcherNot publicly attributed. Discovered via kernel commit review; no named researcher or coordinated disclosure program cited.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.5/10)

The single most decisive factor is the vanishingly small exposure population: SCTP is a niche telecom protocol whose kernel module is not loaded on >95% of enterprise Linux hosts, and the 65,536-unique-peer prerequisite makes weaponization impractical even where SCTP is present. The two-stage attack (network peer injection + local diag trigger) further compounds the friction beyond what the vendor's AV:N/AC:L vector conveys.

HIGH Vulnerability mechanics and affected versions
HIGH Friction assessment (SCTP deployment rarity, 65K-peer barrier)
MEDIUM Exploitability for code execution vs. DoS-only
LOW Exact fraction of enterprise hosts with SCTP loaded

Why this verdict

  • SCTP is not loaded by default — the sctp kernel module must be explicitly loaded or pulled in by a telecom application. On a fleet of 10,000 general-purpose Linux hosts, fewer than 500 are likely to have SCTP active, and most of those are on isolated signaling VLANs.
  • 65,536-peer barrier is enormous — the attacker must sustain a single SCTP association while injecting 65K unique transport addresses. This is orders of magnitude beyond normal SCTP usage, consumes hundreds of MB of kernel memory, and would trigger OOM or monitoring alerts long before the wrap. ASCONF ADD_IP (the easier injection vector) requires a sysctl that defaults to OFF.
  • Two-stage attack negates AV:N simplicity — the network traffic alone does not trigger the overflow. A separate local NETLINK_SOCK_DIAG query must occur while the wrapped association is alive. This is not a single-packet remote exploit; it requires either local access or reliance on a monitoring daemon's polling interval.
  • Role multiplier: SCTP deployments are concentrated in telecom infrastructure (mobile core, IMS, Diameter, SIGTRAN) which qualifies as high-value / OT-adjacent. If the chain succeeds on a telecom signaling node, the blast radius is service disruption to mobile subscribers. However, the 65K-peer prerequisite remains a hard practical barrier even in telecom, and these environments have dedicated security monitoring. The high-value-role floor for MEDIUM is satisfied but does not push to HIGH because the chain's practical feasibility is too low even in the worst-case role.
  • No PoC, no KEV, bottom-quartile EPSS — zero evidence of real-world exploitation or weaponization interest. The complexity of the trigger chain explains why.

Why not higher?

Upgrading to HIGH would require either active exploitation evidence, a credible PoC, or a realistic single-stage remote attack path. None of these exist. The 65K-peer prerequisite is not a theoretical limit — it is a hard practical barrier that requires sustained, noisy interaction with a niche protocol. Even in telecom (the worst-case role), the attack would be detected and the association killed long before reaching the wrap threshold.

Why not lower?

Downgrading to LOW would undercount the severity of the *impact* when the chain completes: an 8 MiB kernel heap overwrite is a guaranteed kernel panic and a plausible (if difficult) code execution primitive. The 10-year affected window means unpatched kernels will linger in LTS distros. And while SCTP is niche, it is not extinct — telecom and 5G CNF environments do run it in production, and a kernel crash on a signaling node has real operational impact.

05 · Compensating Control

What to do — in priority order.

  1. Unload the sctp kernel module where not needed — Run modprobe -r sctp and blacklist it via /etc/modprobe.d/blacklist-sctp.conf containing install sctp /bin/false. This eliminates the attack surface entirely on hosts that don't use SCTP. Verify across your fleet within the 365-day noisgate remediation SLA window, but prioritize this as a quick win.
  2. Set net.sctp.addip_enable=0 (confirm default) — Ensure sysctl net.sctp.addip_enable=0 is enforced via /etc/sysctl.d/. This blocks ASCONF ADD_IP chunks, which is the most practical vector for injecting large numbers of peer addresses. This should already be the default but verify explicitly on SCTP-enabled hosts.
  3. Firewall SCTP at the perimeter — Block IP protocol 132 (SCTP) at perimeter firewalls and host-based firewalls (iptables/nftables) unless explicitly required. Most enterprise firewall rulesets already omit SCTP, but audit for gaps. On hosts where SCTP is required, restrict source IPs to known signaling peers.
  4. Monitor SCTP association transport counts — On hosts that legitimately run SCTP, add monitoring for abnormal transport counts per association. Any association with >1,000 transports is anomalous and should trigger an alert. Use ss -S output or custom netlink monitoring.
What doesn't work
  • SELinux/AppArmor alone — these MAC frameworks do not restrict NETLINK_SOCK_DIAG access for unprivileged users, so they won't prevent the diag trigger stage.
  • Network-layer rate limiting on SCTP — while helpful for detection, rate limiting won't prevent a patient attacker from slowly accumulating 65K peers over hours or days within an established association.
  • Kernel live patching (kpatch/livepatch) — this specific fix changes a hot path in SCTP association management; verify with your livepatch vendor that the patch is available before relying on it as a substitute for a full kernel update.
06 · Verification

Crowdsourced verification payload.

Run this script on each target Linux host as root (needs access to /proc/config.gz and modprobe state). Invoke with: sudo bash check_cve_2026_74469.sh. No arguments required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-74469 checker — SCTP transport_count overflow
# Run as root on target Linux host
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

RESULT="UNKNOWN"
KERNEL=$(uname -r)

# Check if SCTP module is loaded or built-in
SCTP_LOADED=0
if lsmod 2>/dev/null | grep -q '^sctp '; then
  SCTP_LOADED=1
elif [ -f /proc/config.gz ]; then
  if zcat /proc/config.gz 2>/dev/null | grep -q 'CONFIG_IP_SCTP=y'; then
    SCTP_LOADED=1
  fi
elif [ -f "/boot/config-${KERNEL}" ]; then
  if grep -q 'CONFIG_IP_SCTP=y' "/boot/config-${KERNEL}" 2>/dev/null; then
    SCTP_LOADED=1
  fi
fi

if [ "$SCTP_LOADED" -eq 0 ]; then
  # Check if module is available but not loaded
  if modinfo sctp &>/dev/null; then
    echo "INFO: SCTP module available but not loaded — attack surface not currently active"
    echo "INFO: Module could be loaded by any process creating an SCTP socket"
  else
    echo "PATCHED — SCTP module not available in this kernel build"
    exit 0
  fi
fi

# Check for the fix commit by looking for the U16_MAX check in sctp_assoc_add_peer
# The fix adds a transport_count >= U16_MAX check
FIX_COMMIT="bd0e928"

# Version-based check against known-fixed kernels
PATCHED_VERSIONS=(
  "6.6.151" "6.12.103" "6.18.44" "7.1.8"
)

version_gte() {
  printf '%s\n%s' "$2" "$1" | sort -V -C
}

# Extract base version (strip distro suffix)
BASE_VER=$(echo "$KERNEL" | grep -oP '^[0-9]+\.[0-9]+\.[0-9]+')
MAJOR_MINOR=$(echo "$KERNEL" | grep -oP '^[0-9]+\.[0-9]+')

case "$MAJOR_MINOR" in
  6.6)  version_gte "$BASE_VER" "6.6.151"  && RESULT="PATCHED" || RESULT="VULNERABLE" ;;
  6.12) version_gte "$BASE_VER" "6.12.103" && RESULT="PATCHED" || RESULT="VULNERABLE" ;;
  6.18) version_gte "$BASE_VER" "6.18.44"  && RESULT="PATCHED" || RESULT="VULNERABLE" ;;
  7.1)  version_gte "$BASE_VER" "7.1.8"    && RESULT="PATCHED" || RESULT="VULNERABLE" ;;
  7.2)  RESULT="PATCHED" ;;
  *)
    # For distro kernels (e.g., 5.15.x-ubuntu, 5.14.x-el9), check distro changelogs
    if [ -f /var/log/dpkg.log ] || command -v dpkg &>/dev/null; then
      if dpkg-query -W -f='${Version}' linux-image-"$KERNEL" 2>/dev/null | grep -q .; then
        echo "INFO: Distro kernel detected — check Ubuntu/Debian security tracker for backport status"
      fi
    elif command -v rpm &>/dev/null; then
      RPM_VER=$(rpm -q kernel-"$KERNEL" 2>/dev/null || rpm -q kernel-core-"$KERNEL" 2>/dev/null || true)
      if [ -n "$RPM_VER" ]; then
        echo "INFO: RHEL/Rocky kernel detected — check distro errata for backport of commit $FIX_COMMIT"
      fi
    fi
    # Kernels older than 4.7 are not affected
    if version_gte "4.7.0" "$BASE_VER" 2>/dev/null; then
      RESULT="PATCHED"
      echo "INFO: Kernel $BASE_VER predates the vulnerable commit (4.7+)"
    else
      RESULT="UNKNOWN"
    fi
    ;;
esac

echo "Kernel: $KERNEL"
echo "SCTP loaded/built-in: $SCTP_LOADED"
echo "Result: $RESULT"

case "$RESULT" in
  PATCHED)    exit 0 ;;
  VULNERABLE) exit 1 ;;
  *)          exit 2 ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
This is a downgraded MEDIUM — the vendor's 8.8 HIGH does not survive contact with real deployment conditions. For most enterprise Linux fleets, SCTP is not loaded and this CVE is a non-issue; confirm by auditing your fleet for loaded sctp modules and blacklisting where unnecessary. There is no noisgate mitigation SLA for MEDIUM — go straight to the 365-day noisgate remediation SLA and bundle the kernel update into your next scheduled patching cycle. For the minority of hosts that actively use SCTP (telecom, 5G CNF, Diameter), verify net.sctp.addip_enable=0, restrict SCTP peers by IP at the firewall, and prioritize kernel updates for those hosts within 90 days. No active exploitation or PoC exists, so there is no urgency override.

Sources

  1. Ubuntu Security Tracker — CVE-2026-74469
  2. OpenCVE — CVE-2026-74469 Details
  3. Strix AI — CVE-2026-74469 Analysis
  4. OSV — CVE-2026-74469
  5. CyberStrike — CVE-2026-74469 Detail
  6. Ratatoskr — linux-cve-announce CVE-2026-74469
  7. CIQ Kernel Patch PR (RHEL 9)
  8. Linux man7 — sctp(7) manual page
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.