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.
4 steps from start to impact.
sngrep must be actively running
sngrep or sngrep -d eth0.- sngrep installed on the target host
- An operator has manually launched sngrep in live-capture mode
- 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
Attacker sends crafted SIP packet on the monitored network
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.- Network-level access to the SIP traffic path being monitored by sngrep
- Ability to send or inject SIP packets (UDP port 5060 is typical)
- 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
Stack buffer overflow triggers during rendering
- sngrep binary compiled without full hardening (stack canaries, ASLR, PIE)
- 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
Code execution as sngrep operator (often root)
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.- Successful exploitation past stack canaries and ASLR
- sngrep running as root or with elevated capabilities
- 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
The supporting signals.
| In-the-wild exploitation | None observed. Not listed on CISA KEV. No reports from threat intel vendors or DFIR teams. No known campaigns targeting sngrep. |
|---|---|
| Proof-of-concept | No 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 score | Not 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 status | Not listed. No CISA KEV entry. |
| CVSS vector | CVSS: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 versions | sngrep ≤ 1.8.4 (all versions). The vulnerable sprintf calls in SIP attribute formatting appear to have existed since early versions. |
| Fixed version | None 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 data | sngrep 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). |
| Disclosure | 2026-09-12. Debian bug #1147622 filed same day. |
| Reporter | Not publicly attributed. Reported via Debian security tracker. |
noisgate verdict.
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.
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.
What to do — in priority order.
- 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.
- Use sngrep only in offline PCAP mode — Run
tcpdumportsharkto capture SIP traffic to a pcap file, then analyze offline withsngrep -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. - Grant CAP_NET_RAW instead of running as root — If live capture is required, use
setcap 'CAP_NET_RAW+eip' /usr/bin/sngrepand run as an unprivileged user. This limits the blast radius of a successful exploit from root to a low-privilege user account. - 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.
- 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.
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
#!/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
fiIf you remember one thing.
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
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.