← Back to Feed CACHED · 2026-09-24 05:40:45 · CACHE_KEY CVE-2026-95508
CVE-2026-95508 · CWE-787 · Disclosed 2026-09-22

A heap-based buffer overflow was found in the DHCPv6 and TFTP response builders of libslirp.

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

Like finding a lock bypass on a door that nobody installs in their house

CVE-2026-95508 is a heap-based buffer overflow in libslirp, the user-mode TCP/IP emulation library consumed by QEMU (-netdev user) and slirp4netns (rootless container networking). A malicious guest VM or container can send a crafted DHCPv6 CLIENTID option or TFTP blksize option that overflows the reply buffer in the host-side libslirp process, potentially achieving denial of service or arbitrary code execution on the host. The bug is triggered only when the host has configured a non-default small interface MTU for the slirp network; the default MTU is not affected. Affected versions span the entire libslirp 4.x line through 4.9.4; the fix landed in 4.9.5 via two GitLab commits addressing the DHCPv6 and TFTP response builders respectively.

The vendor severity of HIGH 7.4 overstates the real-world risk for enterprises. The CVSS vector marks AV:N (network), but the actual attacker position is *inside a guest VM or container* using slirp networking — that is post-compromise of the guest, not a true unauthenticated-remote-from-internet posture. More importantly, production QEMU/KVM deployments universally use tap/bridge or virtio networking, never slirp user-mode. Rootless Podman has defaulted to pasta since v5.0 and removed slirp4netns entirely in v6. The remaining population running slirp in anger is developer laptops, CI runners, and test labs — none of which are fleet-critical. On top of that, the trigger requires a non-default small MTU, further narrowing exposure. The vendor score is technically defensible in a vacuum but practically misleading for anyone managing production infrastructure.

"Guest-to-host overflow in a dev-only networking mode that production never uses"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Attacker gains code execution inside guest VM or container

The attacker must first compromise or control the workload running inside a QEMU VM launched with -netdev user (slirp mode) or a rootless container using slirp4netns. This is the prerequisite guest-side foothold. In enterprise environments this means the attacker has already achieved initial access and lateral movement into a development or CI environment.
Conditions required:
  • Code execution inside a guest VM or rootless container
  • Host must be running QEMU with -netdev user or using slirp4netns
Where this breaks in practice:
  • Production VMs use tap/bridge/virtio networking, not slirp
  • Podman 5+ defaults to pasta; Podman 6 removes slirp4netns entirely
  • Attacker must already be inside the guest — this is post-initial-access
Detection/coverage: No specific scanner signature; asset inventory of QEMU instances using -netdev user is the best detection.
STEP 02

Non-default small MTU must be configured

The host operator must have explicitly configured the slirp interface with a small MTU value below the default. This is an uncommon lab or testing configuration; production and default setups are unaffected. Without this precondition, the overflow cannot be triggered regardless of guest behavior.
Conditions required:
  • Host slirp interface configured with non-default small MTU
Where this breaks in practice:
  • Default MTU configurations are explicitly not vulnerable
  • No mainstream QEMU deployment guide recommends lowering slirp MTU
  • Configuration auditing tools can flag non-default MTU values
Detection/coverage: Check QEMU command lines or libvirt XML for -netdev user,...,mtu=<small_value> or equivalent.
STEP 03

Craft malicious DHCPv6 CLIENTID or TFTP blksize

From inside the guest, the attacker sends a DHCPv6 solicit message with an oversized CLIENTID option, or a TFTP read request with a crafted blksize option. The libslirp response builder allocates a reply buffer sized for the configured MTU, then writes response data that exceeds it. The attacker controls both the content and length of the overflow.
Conditions required:
  • Network connectivity from guest to host slirp stack (automatic in slirp mode)
  • Small MTU causing undersized reply buffer
Where this breaks in practice:
  • No public PoC exists as of 2026-09-24
  • Exploit development requires understanding libslirp heap layout and host ASLR/NX
STEP 04

Heap corruption in host QEMU process

The overflow corrupts adjacent heap objects in the host-side QEMU process (or slirp4netns process for containers). Best case for the attacker is hijacking control flow for arbitrary code execution on the host with the privileges of the QEMU process. Worst case is a crash causing denial of service to the guest VM. The CVSS vector marks S:U (scope unchanged) and C:N (no confidentiality impact), suggesting the vendor considers full code execution unlikely and the primary impact is integrity/availability.
Conditions required:
  • Successful heap overflow with attacker-controlled data
Where this breaks in practice:
  • Modern Linux ASLR, NX, and heap hardening (glibc tcache protections) make reliable exploitation difficult
  • QEMU processes often run as unprivileged qemu user, limiting post-exploitation blast radius
  • Scope unchanged per vendor — no VM escape boundary crossing credited
Detection/coverage: Host-based crash monitoring; QEMU core dumps with heap corruption signatures.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo known exploitation in the wild. Not listed in CISA KEV. No threat intelligence reports reference active campaigns.
Proof-of-ConceptNo public PoC as of 2026-09-24. The vulnerability was responsibly disclosed by Stuart Thomas to Red Hat. Two GitLab commits fix the issue but no standalone exploit code has been published.
EPSS Score0.00423 (36.3rd percentile) — indicates low predicted exploitation probability in the next 30 days.
KEV StatusNot listed. No CISA deadline applies.
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H — The AV:N is misleading; actual attack requires guest-side access. AC:H reflects the non-default MTU requirement. S:U means no cross-boundary (guest-to-host) scope change is credited.
Affected Versionslibslirp 4.0.0 through 4.9.4 across all consumers: QEMU, slirp4netns, and any application linking libslirp. Debian oldstable (4.7.0), stable (4.8.0), testing/unstable (4.9.4) all affected.
Fixed Versionlibslirp 4.9.5. Debian has not yet released backported packages as of 2026-09-24. Red Hat tracking via Bugzilla #2537748.
Scanning / ExposureNo GreyNoise or Shodan signatures — the slirp network stack is not externally reachable; it sits between guest and host, invisible to internet scanners. Exposure is determined by local asset inventory of QEMU -netdev user instances.
Disclosure Date2026-09-22 (public), reported to Red Hat on 2026-09-16.
Reporting ResearcherStuart Thomas, credited by Red Hat.
04 · The Call

Final Verdict
DOWNGRADED to MEDIUM (5.3/10)

Why this verdict

  • Attacker position is post-compromise, not remote: The CVSS AV:N implies internet-reachable, but the real prerequisite is code execution inside a guest VM or container. That is a post-initial-access position — the attacker is already inside. This alone warrants a 1–2 point downward adjustment from the 7.4 baseline.
  • Slirp is a dev/test networking mode, not production: Production QEMU/KVM universally uses tap, bridge, or virtio networking. Enterprise hypervisor fleets (vCenter, OpenStack, oVirt) never configure slirp. The affected population in a 10,000-host enterprise is near zero for VM use cases.
  • Rootless container path is deprecated: Podman 5+ defaults to pasta; Podman 6 removes slirp4netns. The container-side exposure is shrinking quarterly. Only legacy Podman 4.x rootless setups still use slirp4netns by default.
  • Non-default configuration required: The overflow triggers only with a small, explicitly configured MTU — the default MTU is safe. This is a configuration-gated vulnerability, further reducing the reachable population.
  • Role multiplier: libslirp is *technically* a hypervisor-adjacent component (used by QEMU), but slirp user-mode networking is explicitly NOT the production networking path. Fewer than 5% of QEMU instances in enterprise environments use slirp. The high-value hypervisor role is occupied by QEMU+tap/bridge, which is unaffected. For rootless containers, the blast radius is a single unprivileged container host process, not fleet-scale. The hypervisor high-value floor does NOT apply because the affected code path (slirp networking) is not the canonical production deployment mode.
  • No PoC, low EPSS, no KEV: Zero public exploit code, 36th percentile EPSS, and no CISA KEV listing. The exploitation probability in the near term is very low.

Why not higher?

The theoretical guest-to-host code execution impact could justify HIGH if slirp were a production networking mode, but it is not. Fewer than 5% of QEMU deployments use slirp in enterprise settings, and the non-default MTU requirement further gates the vulnerability. The vendor's own S:U scoring denies cross-boundary scope change, and C:N denies confidentiality impact. Without a public PoC or any exploitation signal, there is no basis to keep this at HIGH.

Why not lower?

The vulnerability *does* enable a heap overflow with attacker-controlled content and length, which is a serious primitive when it lands. Developer workstations and CI environments running QEMU with slirp are real assets that matter. A compromised CI runner can pivot to source code, secrets, and build artifacts. Dismissing this as LOW or IGNORE would ignore the CI/dev lateral-movement scenario. MEDIUM correctly reflects a real but narrowly scoped risk.

05 · Compensating Control

What to do — in priority order.

  1. MEDIUM 5.3IGNORE 0.0
    Switch VMs from slirp to tap/bridge networking — Reconfigure any QEMU instances using -netdev user to use -netdev tap or bridge networking instead. This completely removes libslirp from the attack surface. No noisgate mitigation SLA applies at MEDIUM; proceed within the 365-day remediation window, but prioritize if you have known slirp usage.
  2. MEDIUM 5.3IGNORE 0.0
    Migrate rootless Podman to pasta networking — Set default_rootless_network_cmd = \"pasta\" in containers.conf or upgrade to Podman 5+. This removes slirp4netns from the container networking path entirely. If running Podman 6+, slirp4netns is already removed.
  3. MEDIUM 5.3LOW 2.0
    Audit and remove non-default small MTU configurations — Search QEMU command lines, libvirt XML, and container runtime configs for explicit small MTU settings on slirp interfaces. Revert to default MTU. Even if slirp remains in use, default MTU is not vulnerable.
  4. MEDIUM 5.3IGNORE 0.0
    Update libslirp to 4.9.5 — Apply the vendor patch when your distro ships it. Debian has not yet backported as of 2026-09-24; Red Hat is tracking via Bugzilla #2537748. This is the definitive fix within the 365-day remediation window.
All controls applied
MEDIUM 5.3IGNORE 0.0
What doesn't work
  • Network firewalls/WAFs — the slirp traffic is internal between guest and host on a virtual interface; no network security appliance sees or filters it.
  • EDR/AV on the host — the overflow occurs in userspace heap memory within the QEMU process; EDR may detect a crash or anomalous child process post-exploitation but cannot prevent the buffer overflow itself.
  • Guest-side patching — the vulnerability is in the host-side libslirp code; patching the guest OS has no effect.
06 · Verification

Crowdsourced verification payload.

Run this script on any host running QEMU or slirp4netns. No special privileges needed — it checks the installed libslirp version and scans for running QEMU processes using slirp networking. Invoke with: bash check_cve_2026_95508.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_95508.sh — CVE-2026-95508 libslirp heap overflow checker
# Checks: (1) installed libslirp version, (2) running QEMU with slirp networking
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

FIXED_VERSION="4.9.5"
RESULT="UNKNOWN"

version_gte() {
  printf '%s\n%s' "$1" "$2" | sort -V | head -n1 | grep -qx "$2"
}

# 1. Check installed libslirp version
INSTALLED=""
if command -v dpkg-query &>/dev/null; then
  INSTALLED=$(dpkg-query -W -f='${Version}' libslirp0 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' || true)
elif command -v rpm &>/dev/null; then
  INSTALLED=$(rpm -q --qf '%{VERSION}' libslirp 2>/dev/null || true)
elif command -v pacman &>/dev/null; then
  INSTALLED=$(pacman -Q libslirp 2>/dev/null | awk '{print $2}' | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' || true)
fi

if [ -n "$INSTALLED" ]; then
  echo "[*] libslirp installed version: $INSTALLED"
  if version_gte "$INSTALLED" "$FIXED_VERSION"; then
    echo "[+] Version >= $FIXED_VERSION — patched."
    RESULT="PATCHED"
  else
    echo "[-] Version < $FIXED_VERSION — library is vulnerable."
    RESULT="VULNERABLE"
  fi
else
  echo "[?] libslirp not found via package manager."
  # Try finding shared library
  SOFILE=$(find /usr/lib* /lib* -name 'libslirp.so*' 2>/dev/null | head -1 || true)
  if [ -n "$SOFILE" ]; then
    echo "[?] Found libslirp at $SOFILE but cannot determine version."
    RESULT="UNKNOWN"
  else
    echo "[+] libslirp not installed on this host."
    RESULT="PATCHED"
  fi
fi

# 2. Check for running QEMU with slirp (user-mode) networking
SLIRP_PROCS=$(pgrep -a qemu 2>/dev/null | grep -E '(-netdev\s+user|type=user)' || true)
if [ -n "$SLIRP_PROCS" ]; then
  echo ""
  echo "[!] WARNING: Running QEMU processes using slirp (user-mode) networking:"
  echo "$SLIRP_PROCS"
  if [ "$RESULT" = "VULNERABLE" ]; then
    echo "[-] ACTIVE EXPOSURE: vulnerable libslirp + slirp networking in use."
  fi
else
  echo ""
  echo "[+] No running QEMU processes using slirp networking detected."
fi

# 3. Check for slirp4netns
if command -v slirp4netns &>/dev/null; then
  S4N_PROCS=$(pgrep -a slirp4netns 2>/dev/null || true)
  if [ -n "$S4N_PROCS" ]; then
    echo "[!] WARNING: slirp4netns processes running (rootless container networking)."
    if [ "$RESULT" = "VULNERABLE" ]; then
      echo "[-] ACTIVE EXPOSURE: vulnerable libslirp + slirp4netns in use."
    fi
  else
    echo "[+] slirp4netns installed but no active processes."
  fi
fi

echo ""
echo "=== $RESULT ==="
case "$RESULT" in
  PATCHED)  exit 0 ;;
  VULNERABLE) exit 1 ;;
  *)        exit 2 ;;
esac
07 · Sources

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.