← Back to Feed CACHED · 2026-09-13 21:35:59 · CACHE_KEY CVE-2026-90558
CVE-2026-90558 · CWE-121 · Disclosed 2026-09-12

sngrep through 1.8.4 contains stack buffer overflow vulnerabilities in SIP attribute formatting routines…

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

Leaving a loaded mousetrap inside a locked toolbox that only three people in the building have the key to

CVE-2026-90558 is a stack buffer overflow in sngrep versions through 1.8.4 — the popular ncurses-based SIP call-flow viewer from Irontec. The vulnerable code paths are in SIP attribute formatting routines that copy Call-ID, X-Call-ID, and other header values into fixed 255-byte stack buffers using sprintf-style calls without length checks. A crafted SIP packet with an oversized header field triggers the overflow during packet parsing and rendering. This can cause a crash (DoS) or, with a carefully controlled payload, potentially redirect control flow for remote code execution. No patched version exists yet — 1.8.4 is the latest release as of September 2026.

The vendor CVSS of 9.8 CRITICAL (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) is technically defensible for the narrow scenario where sngrep is actively capturing live SIP traffic on an attacker-reachable network — but it massively overstates enterprise risk. sngrep is a diagnostic CLI tool, not a listening service or daemon. It is run on-demand by VoIP engineers, usually for minutes at a time during troubleshooting sessions. In a fleet of 10,000 hosts, you might have it installed on 5–20 machines and actively running on zero of them at any given moment. The 9.8 treats it like a permanently-exposed network service, which it simply is not.

"Packet sniffer CVE scores like a server but only bites when an admin is watching"
02 · The Attack Path

4 steps from start to impact.

STEP 01

sngrep must be actively running

The target host must have sngrep actively capturing live SIP traffic on a network interface. sngrep is an interactive diagnostic tool — it is not a daemon, not started at boot, and not running in steady-state. An operator must have manually launched it, typically via sngrep or sngrep -d eth0.
Conditions required:
  • sngrep installed on the target host
  • An operator has manually launched sngrep in live-capture mode
Where this breaks in practice:
  • sngrep is a niche VoIP diagnostic tool — typical enterprise fleet penetration is <0.1%
  • Even where installed, it is run on-demand for minutes during troubleshooting, not continuously
  • Many admins use sngrep only in offline PCAP-viewer mode (sngrep -I file.pcap), which does not expose the live-capture attack surface unless the PCAP itself is attacker-controlled
STEP 02

Attacker sends crafted SIP packet on the monitored network

The attacker must inject a SIP packet with an oversized header field (e.g., Call-ID exceeding 255 bytes) onto a network segment where sngrep is actively capturing. This requires the attacker to be on the same VLAN, subnet, or upstream path as the SIP traffic the tool is monitoring. For VoIP networks, this typically means the voice VLAN or a SIP trunk segment.
Conditions required:
  • Network-level access to the SIP traffic path being monitored by sngrep
  • Ability to send or inject SIP packets (UDP port 5060 is typical)
Where this breaks in practice:
  • Enterprise voice VLANs are typically segmented from general-purpose networks
  • SIP trunks between the PBX and ITSP often traverse dedicated links or VPN tunnels, not general LAN segments
  • Firewalls and SBCs frequently normalize or reject malformed SIP packets before they reach internal segments
Detection/coverage: SIP-aware IDS/IPS rules can flag anomalously long SIP header values. Suricata and Snort have SIP protocol parsers that can be configured with header-length thresholds.
STEP 03

Stack buffer overflow triggers during rendering

When sngrep's SIP attribute formatting routines process the oversized header value, it overflows the 255-byte stack buffer. Without stack canaries or ASLR (common on older Linux builds or static-compiled binaries), this can overwrite the return address. With modern mitigations (ASLR, stack protector, NX), reliable RCE is significantly harder — the most likely outcome is a segfault and crash.
Conditions required:
  • sngrep binary compiled without full hardening (stack canaries, ASLR, PIE)
Where this breaks in practice:
  • Distro-packaged sngrep on modern Debian/Ubuntu/RHEL is typically compiled with -fstack-protector-strong, PIE, and ASLR enabled, making RCE exploitation non-trivial
  • Most realistic outcome is a crash/DoS of the diagnostic tool, not code execution
  • No public PoC exists demonstrating RCE; only crash/DoS is demonstrated
STEP 04

Code execution as sngrep operator (often root)

If the attacker achieves control of the instruction pointer and bypasses mitigations, they gain code execution in the context of the sngrep process. Since sngrep requires CAP_NET_RAW or root privileges for live capture, this typically means root-level access on the host. However, reaching this step requires defeating modern exploit mitigations, which no public research has demonstrated for this specific vulnerability.
Conditions required:
  • Successful exploitation past stack canaries and ASLR
  • sngrep running as root or with elevated capabilities
Where this breaks in practice:
  • No public exploit chain exists
  • Modern distro hardening makes blind stack smashing unreliable
  • Even if achieved, blast radius is limited to a single diagnostic host — not a production SIP server, not a domain controller, not fleet-scale
Detection/coverage: EDR agents will flag anomalous child processes spawned from sngrep. Process execution monitoring for unexpected shells from a known diagnostic binary is straightforward.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed on CISA KEV. No reports from threat intel vendors or DFIR teams. No known campaigns targeting sngrep.
Proof-of-conceptNo public PoC as of 2026-09-14. No exploit code found on GitHub, Exploit-DB, or Sploitus. The crash vector (oversized SIP header) is trivial to reproduce but no RCE PoC exists.
EPSS scoreNot yet scored — CVE disclosed 2026-09-12 (2 days ago). EPSS typically populates within 7–14 days. Expected to be low given the niche tool and no PoC.
KEV statusNot listed. No CISA KEV entry.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8. The AV:N and UI:N are technically correct (packet on the wire, no click needed) but misleading because the *tool must be actively running* to process packets. This is closer to a UI:R scenario in practice.
Affected versionssngrep ≤ 1.8.4 (all versions). The vulnerable sprintf calls in SIP attribute formatting appear to have existed since early versions.
Fixed versionNone available. v1.8.4 (2026-07-24) is the latest release. No v1.8.5 or commit fixing CVE-2026-90558 has been published as of 2026-09-14.
Scanning/exposure datasngrep is not a network service and does not listen on any port — it is invisible to Shodan, Censys, and GreyNoise. Zero external attack surface. Fleet exposure must be assessed via endpoint inventory (e.g., dpkg -l sngrep, rpm -q sngrep).
Disclosure2026-09-12. Debian bug #1147622 filed same day.
ReporterNot publicly attributed. Reported via Debian security tracker.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (4.5/10)

The single most decisive downgrade factor is deployment population and runtime exposure: sngrep is an interactive diagnostic CLI tool installed on <0.1% of enterprise hosts and actively running for minutes at a time during manual troubleshooting, not a persistent service — collapsing the real-world attack window to near-zero. Even when exploited, the blast radius is a single diagnostic workstation, not a production-critical system.

HIGH Vulnerability existence and crash/DoS impact
MEDIUM RCE feasibility on modern distro-packaged builds
HIGH Downgrade rationale — tool is not a persistent service

Why this verdict

  • Negligible fleet penetration: sngrep is a niche VoIP diagnostic utility. In a 10,000-host enterprise, it is installed on perhaps 5–20 hosts (VoIP engineers' workstations and SIP servers for troubleshooting). This alone reduces exposed population to <0.2%.
  • Ephemeral runtime window: Unlike a daemon, sngrep runs only when manually invoked for debugging. The tool must be actively capturing live traffic for the attack to land. On any given day, the probability of an sngrep instance running during an attacker's packet injection window is extremely low.
  • Network position requirement: The attacker must be on the same network segment as the SIP traffic being monitored — typically a voice VLAN or SIP trunk. Enterprise voice networks are segmented, and SBCs/firewalls often normalize SIP headers before they reach internal hosts.
  • Modern mitigations limit RCE: Distro-packaged sngrep is compiled with stack protector, PIE, and ASLR. No public PoC demonstrates RCE — the realistic outcome is a tool crash, not host compromise.
  • Role multiplier: sngrep is a diagnostic utility, not a high-value-role component. It does not serve as an identity provider, hypervisor, backup system, CI/CD component, or network edge appliance. (a) On workstations: LOW value — tool crash, engineer restarts it. (b) On SIP/PBX servers: the sngrep process is not the PBX itself (Asterisk/FreeSWITCH remain unaffected); compromise of sngrep ≠ compromise of the VoIP service. Blast radius is single-host at most. No high-value role applies — no floor override triggered.

Why not higher?

There is no active exploitation, no PoC demonstrating RCE, no KEV listing, and the tool is not a persistent service. The attack requires convergence of multiple low-probability conditions: the tool running, attacker on the voice VLAN, and bypass of modern exploit mitigations. A MEDIUM at 4.5 already accounts for the root-context risk if all stars align.

Why not lower?

The tool does typically run as root when capturing live traffic, meaning a successful exploit chain ends in root on that host. The sprintf-based overflow is mechanically simple and the crash is trivially reproducible even without a formal PoC. A complete dismissal to LOW would undercount the local privilege context and the fact that no patch exists yet.

05 · Compensating Control

What to do — in priority order.

  1. Remove sngrep from production hosts — If sngrep is installed on SIP servers or PBXes for occasional troubleshooting, uninstall it. Use it only on dedicated diagnostic workstations or in offline PCAP-viewer mode. This eliminates the attack surface on any host that matters. No noisgate mitigation SLA applies (MEDIUM verdict), so fold this into your standard 365-day remediation cycle or act sooner if VoIP infra is in-scope for compliance.
  2. Use sngrep only in offline PCAP mode — Run tcpdump or tshark to capture SIP traffic to a pcap file, then analyze offline with sngrep -I capture.pcap. The overflow can still trigger if the pcap contains a malicious packet, but the attacker cannot inject packets in real-time — they would need to have already compromised the capture source.
  3. Grant CAP_NET_RAW instead of running as root — If live capture is required, use setcap 'CAP_NET_RAW+eip' /usr/bin/sngrep and run as an unprivileged user. This limits the blast radius of a successful exploit from root to a low-privilege user account.
  4. Segment voice VLANs and enable SBC SIP normalization — Ensure SIP traffic traverses a Session Border Controller that normalizes or rejects oversized SIP headers before they reach internal segments where sngrep might be used. This blocks the malformed packet at the network edge.
What doesn't work
  • WAF / HTTP-layer inspection — sngrep processes raw SIP over UDP/TCP, not HTTP. Web application firewalls do not inspect SIP traffic.
  • Endpoint patching — No vendor patch exists as of 2026-09-14. You cannot patch your way out of this one yet.
  • Network-level port blocking of 5060/5061 — Blocking SIP ports would break VoIP. The control must be at the SIP-normalization layer (SBC), not a blanket port block.
06 · Verification

Crowdsourced verification payload.

Run this on each host where sngrep may be installed. Requires no special privileges — just checks the installed package version. Example: bash check_cve_2026_90558.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_90558.sh
# Checks whether sngrep <= 1.8.4 is installed (all versions vulnerable)
# CVE-2026-90558: Stack buffer overflow in SIP attribute formatting
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN

set -euo pipefail

VULN_CVE="CVE-2026-90558"
FIXED_VERSION="1.8.5"  # No fix released yet; placeholder for future patch

version_gte() {
  # Returns 0 if $1 >= $2 using sort -V
  [ "$(printf '%s\n%s' "$1" "$2" | sort -V | head -n1)" = "$2" ]
}

# Detect installed sngrep
SNGREP_PATH="$(command -v sngrep 2>/dev/null || true)"

if [ -z "$SNGREP_PATH" ]; then
  # Also check package managers
  if command -v dpkg &>/dev/null && dpkg -l sngrep &>/dev/null 2>&1; then
    INSTALLED_VER=$(dpkg-query -W -f='${Version}' sngrep 2>/dev/null | grep -oP '^[0-9]+\.[0-9]+\.[0-9]+')
  elif command -v rpm &>/dev/null && rpm -q sngrep &>/dev/null 2>&1; then
    INSTALLED_VER=$(rpm -q --qf '%{VERSION}' sngrep 2>/dev/null)
  else
    echo "PATCHED — sngrep is not installed on this host ($VULN_CVE)"
    exit 0
  fi
else
  INSTALLED_VER=$("$SNGREP_PATH" -v 2>&1 | grep -ioP '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
fi

if [ -z "${INSTALLED_VER:-}" ]; then
  echo "UNKNOWN — sngrep detected but could not determine version ($VULN_CVE)"
  exit 2
fi

echo "Installed sngrep version: $INSTALLED_VER"

if version_gte "$INSTALLED_VER" "$FIXED_VERSION"; then
  echo "PATCHED — sngrep $INSTALLED_VER >= $FIXED_VERSION ($VULN_CVE)"
  exit 0
else
  echo "VULNERABLE — sngrep $INSTALLED_VER < $FIXED_VERSION ($VULN_CVE)"
  echo "NOTE: No vendor patch exists yet. All versions through 1.8.4 are affected."
  echo "Mitigation: remove sngrep from production hosts or use offline PCAP mode only."
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: Run a fleet-wide inventory query (dpkg -l sngrep / rpm -q sngrep) to identify every host with sngrep installed — you will likely find fewer than 20 across 10,000 hosts. Uninstall it from any production SIP/PBX server where it is not actively needed for an open troubleshooting ticket. For the handful of VoIP engineering workstations that keep it, switch to offline PCAP-analysis mode (sngrep -I file.pcap) and stop running live captures until a patched version ships. There is no vendor patch yet (v1.8.4 is latest and vulnerable), so your only lever is reducing exposure. Since the noisgate reassessed verdict is MEDIUM, there is no mitigation SLA — go straight to the 365-day noisgate remediation SLA window, but realistically, monitor the irontec/sngrep releases page and apply the patch within a week of its release given the trivial effort involved. If you see active exploitation reports emerge (none exist today), escalate to immediate action.

Sources

  1. Vulners — CVE-2026-90558
  2. VulDB — CVE-2026-90558
  3. Debian Bug #1147622 — sngrep CVE-2026-90558
  4. irontec/sngrep GitHub — Releases
  5. irontec/sngrep GitHub — Repository
  6. OffSeq Threat Radar — CVE-2026-90558
  7. TheHackerWire — sngrep Stack Buffer Overflow
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.