Like a night-shift janitor unplugging the security cameras — annoying, recoverable, but only if someone notices
CVE-2026-86090 is a missing-authorization flaw in ntopng's REST v2 API, specifically in the POST /lua/rest/v2/delete/endpoints.lua and POST /lua/rest/v2/delete/recipients.lua handlers. Any authenticated user — even one with the lowest privilege tier — can call these endpoints to irreversibly delete all configured notification endpoints and recipients. The result: ntopng continues monitoring traffic, but every alert it would normally fire goes nowhere. All versions before 6.7.260717 are affected.
The vendor scored this HIGH at 7.1, and on paper the CVSS vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H) is fair *if* you treat ntopng as internet-facing and as the sole alerting system. In practice, neither is usually true. ntopng is overwhelmingly deployed on internal management VLANs, requires valid credentials to reach the API, delivers no code execution or data exfiltration, and sits alongside EDR, SIEM, and IDS/IPS in any mature enterprise stack. The real-world severity is closer to MEDIUM once you factor in attacker position, recoverability (re-creating notification configs is manual but straightforward), and the limited blast radius of silencing one supplementary monitor.
4 steps from start to impact.
Obtain low-privilege ntopng credentials
- Valid ntopng user account (any role)
- Network access to ntopng web interface (default port 3000)
- ntopng is almost never exposed to the internet; it runs on an internal management VLAN or localhost
- User population is small — typically only NOC/SOC staff have accounts
- MFA is not natively supported but reverse-proxy MFA would block this
Call delete endpoints REST v2 handler
POST /lua/rest/v2/delete/endpoints.lua with the appropriate JSON body listing all endpoint IDs. No admin role check is performed on this handler. The request deletes every configured notification endpoint (email, Slack, webhook, syslog forward, etc.).- Authenticated session from Step 1
- Knowledge of endpoint IDs (enumerable via GET endpoints list, also likely unprotected)
- Attacker must know or enumerate endpoint IDs first
- A WAF or API gateway with method/path allowlisting would block non-admin DELETE-semantics calls
/rest/v2/delete/ paths would catch this.Call delete recipients REST v2 handler
POST /lua/rest/v2/delete/recipients.lua to remove all recipient configurations. With both endpoints and recipients deleted, ntopng's alerting pipeline is completely severed — alerts still generate internally but no delivery channel exists.- Authenticated session
- Endpoints already deleted or recipients targeted independently
- Same friction as Step 2
- Deletion is logged in ntopng's internal event system if audit logging is enabled
Conduct follow-on attack under cover of silence
- ntopng is the primary or sole network alerting system
- No overlapping detection from IDS/IPS, EDR, or SIEM
- Enterprises with defense-in-depth have multiple overlapping detection layers
- EDR and SIEM continue to operate independently of ntopng
- Network IDS (Suricata, Zeek) provides parallel visibility
The supporting signals.
| In-the-Wild Exploitation | No known exploitation in the wild. Not listed on CISA KEV. No campaign reports as of 2026-09-06. |
|---|---|
| Proof-of-Concept | No public PoC found on GitHub or exploit-db. Exploitation is trivial — a single authenticated curl POST — so weaponization is near-zero effort. |
| EPSS Score | 0.00249 (bottom quartile) — very low predicted exploitation probability. |
| KEV Status | Not listed. No CISA KEV entry as of 2026-09-06. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H — network-reachable but requires authentication. No confidentiality impact; integrity is low (config deletion); availability is high (alert pipeline destroyed). |
| Affected Versions | All ntopng versions before 6.7.260717 (Community, Professional, and Enterprise editions). |
| Fixed Version | 6.7.260717 — patch commit 7d830f3 adds admin-role checks to the two Lua handlers. |
| Scanning/Exposure Data | No specific Shodan/Censys ntopng exposure census found. ntopng defaults to port 3000 and is overwhelmingly deployed on internal/management networks. Internet-facing instances are rare. |
| Disclosure Date | 2026-09-04 — disclosed via GitHub Security Advisory GHSA-m22w-f647-vx88. |
| Reporter | George Chen — credited in the GHSA advisory. |
noisgate verdict.
The single most decisive downgrade factor is that exploitation requires authenticated access to an application that is overwhelmingly deployed on internal management networks with a small user population, compounding two independent friction layers before any impact is reached. The impact itself — silencing one supplementary monitoring tool's alert delivery — is operationally disruptive but recoverable, with no code execution, no data breach, and no lateral-movement enablement.
Why this verdict
- Authentication barrier: PR:L means a valid ntopng account is required. ntopng user populations are small (NOC/SOC staff); this is not a self-registration SaaS app. Credential acquisition is a prerequisite that gates the entire chain.
- Internal-only exposure: ntopng is a network traffic analyzer that binds to port 3000 on management interfaces. Virtually no enterprise exposes it to the internet. The attacker must already be on the internal network or VPN — meaning this is a post-initial-access bug, not an entry point.
- No code execution or data breach: The impact ceiling is deletion of notification configs. There is zero confidentiality impact (C:N), no shell, no privilege escalation on the host. The CVSS Availability:High rating reflects alerting disruption, not service destruction — ntopng itself keeps running.
- Recoverable impact: Deleted notification endpoints and recipients can be manually re-created by an admin. There is no persistent backdoor, no data corruption, no cryptographic material compromise.
- Role multiplier: ntopng occupies a *supplementary network visibility* role, not a primary SIEM/detection-plane role. In the high-value-role catalog, the detection plane entry names Splunk, Elastic SIEM, Sentinel, and QRadar — ntopng is a traffic analyzer that may feed these systems but is not itself the authoritative alert/detection platform. Even if ntopng's alerts are silenced, EDR, IDS/IPS, and SIEM continue independently. The blast radius is limited to one monitoring tool's notification pipeline, not the enterprise detection stack. This does NOT trigger the detection-plane floor.
Why not higher?
To warrant HIGH, we would need either unauthenticated access, code execution, or a scenario where ntopng is the sole detection system *and* internet-facing. None of these apply. The authenticated-only, internal-network, config-deletion-only profile places this firmly below the HIGH threshold. No KEV listing, no active exploitation, and an EPSS in the bottom quartile further confirm that real-world risk does not justify HIGH.
Why not lower?
Despite the friction, the exploitation is trivially easy once authenticated (a single POST request), the impact is operationally meaningful (complete alert silencing), and ntopng *is* part of the security monitoring stack even if supplementary. A disgruntled or compromised low-privilege operator could weaponize this in seconds. LOW would understate the operational disruption potential.
What to do — in priority order.
- Restrict REST v2 delete paths at the reverse proxy / API gateway — Add an ACL or WAF rule that blocks
POSTrequests to/lua/rest/v2/delete/endpoints.luaand/lua/rest/v2/delete/recipients.luafor all sessions except those from designated admin IPs. This is the fastest compensating control and should be deployed within the MEDIUM remediation window. - Enable ntopng access logging and SIEM ingestion — Ensure ntopng's HTTP access logs are forwarded to your SIEM. Create a detection rule for any
POSTto/rest/v2/delete/paths. This provides after-the-fact detection if the path-block isn't feasible. - Reduce ntopng user population and enforce least privilege — Audit ntopng local and LDAP-linked accounts. Remove any accounts that don't require interactive access. Where possible, restrict non-admin users to read-only interfaces.
- Place ntopng behind MFA-enforced reverse proxy — ntopng doesn't natively support MFA. Fronting it with an SSO/MFA reverse proxy (e.g., Authelia, Keycloak, Azure AD App Proxy) raises the credential-acquisition bar significantly.
- Network segmentation alone — if the attacker already has internal access and valid ntopng credentials, VLAN isolation of the monitoring network doesn't prevent API calls from an authorized user session.
- ntopng's built-in user roles — the entire bug is that the delete handlers *ignore* user roles, so configuring users as non-admin within ntopng provides zero protection until you patch.
Crowdsourced verification payload.
Run this on the ntopng host or any machine that can reach the ntopng web UI. Requires curl and jq. Example: bash check_cve_2026_86090.sh https://ntopng.internal:3000 admin your_password. No root required — it only reads the version endpoint.
#!/usr/bin/env bash
# check_cve_2026_86090.sh — Detect ntopng versions vulnerable to CVE-2026-86090
# Usage: bash check_cve_2026_86090.sh <NTOPNG_BASE_URL> <USERNAME> <PASSWORD>
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN
set -euo pipefail
BASE_URL="${1:?Usage: $0 <base_url> <user> <pass>}"
USER="${2:?}"
PASS="${3:?}"
# Authenticate and grab session cookie
COOKIE_JAR=$(mktemp)
trap "rm -f $COOKIE_JAR" EXIT
curl -sk -c "$COOKIE_JAR" -d "username=${USER}&password=${PASS}" \
"${BASE_URL}/authorize.html" -o /dev/null
# Fetch ntopng version via REST API
VERSION_JSON=$(curl -sk -b "$COOKIE_JAR" "${BASE_URL}/lua/rest/v2/get/ntopng/info.lua" 2>/dev/null || true)
if [ -z "$VERSION_JSON" ]; then
echo "UNKNOWN — could not retrieve version from ${BASE_URL}"
exit 2
fi
VERSION=$(echo "$VERSION_JSON" | jq -r '.rsp.version // empty' 2>/dev/null || true)
if [ -z "$VERSION" ]; then
# Fallback: try parsing from the login page
VERSION=$(curl -sk "${BASE_URL}" | grep -oP 'v\.\K[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
fi
if [ -z "$VERSION" ]; then
echo "UNKNOWN — could not parse ntopng version"
exit 2
fi
echo "Detected ntopng version: ${VERSION}"
# Fixed version: 6.7.260717
# Compare: major.minor.patch
IFS='.' read -r MAJ MIN PATCH <<< "$VERSION"
FIX_MAJ=6
FIX_MIN=7
FIX_PATCH=260717
if [ "$MAJ" -gt "$FIX_MAJ" ] 2>/dev/null; then
echo "PATCHED — version ${VERSION} is above the fix."
exit 0
elif [ "$MAJ" -eq "$FIX_MAJ" ] && [ "$MIN" -gt "$FIX_MIN" ] 2>/dev/null; then
echo "PATCHED — version ${VERSION} is above the fix."
exit 0
elif [ "$MAJ" -eq "$FIX_MAJ" ] && [ "$MIN" -eq "$FIX_MIN" ] && [ "$PATCH" -ge "$FIX_PATCH" ] 2>/dev/null; then
echo "PATCHED — version ${VERSION} includes the fix (>= 6.7.260717)."
exit 0
else
echo "VULNERABLE — version ${VERSION} is below the fixed version 6.7.260717."
exit 1
fiIf you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.