ntopng: Aus dem Netzverkehr gelernter Hostname führt Skript in der Konsole aus

Die Namensprüfung lässt spitze Klammern zu, und die Hosts-Ansicht rendert den Namen mit v-html. Kein Patch verfügbar.

Advisory-ID: TP-2026-087
Produkt: ntopng (Werkzeug zur Netzverkehrsüberwachung mit Web-Konsole, C++ und Lua)
Schwachstellentyp: Stored Cross-Site-Scripting (CWE-79)
CVE: nicht beantragt
CVSS 3.1: 8.5 (Hoch) · CVSS:3.1/AV:A/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
Betroffene Versionen: <= 6.7.0
Hersteller-Advisory: GHSA-89wv-w893-9fvq
Status: kein Patch veröffentlicht, das Hersteller-Advisory nennt keine behobene Version
Gemeldet: 04. Juli 2026

Zusammenfassung

ntopng überwacht Netzverkehr und lernt dabei Hostnamen aus mDNS, DHCP-Option 12, DNS-PTR, NetBIOS und dem Servernamen in TLS-Verbindungen. Diese Namen landen in der Hosts-Ansicht der Web-Konsole, und zwar als lebendes HTML. Die Prüfung, die einen Namen annimmt oder verwirft, verbietet nur eine kleine Zeichenmenge und lässt spitze Klammern, Anführungszeichen und Schrägstriche durch. Wer im überwachten Netz einen entsprechenden Namen ankündigt, hinterlegt damit Skript, das im Browser jedes Betreibers läuft, der die Hosts-Ansicht öffnet. Der Angreifer braucht kein Konto, nur Verkehr, den ntopng sieht. Es ist eine Rückkehr von CVE-2014-5464, das dieselbe Klasse vor zwölf Jahren in ntopng vor 1.2.1 behoben hatte.

Ursache

Host::isValidHostName sperrt nur Doppelpunkt, Stern, Leerzeichen, Klammeraffe, Komma und Klammern sowie einen führenden Unterstrich und lässt damit <, >, ", ' und / zu (Host.cpp:1824), während setResolvedName überhaupt nicht prüft (:1853). Der REST-Zweig gibt den gespeicherten Namen unverändert aus (lua/rest/v2/get/host/active_list.lua:172). Die Vue-Oberfläche reicht ihn weiter (page-hosts-list.vue:189) und setzt ihn mit v-html in den DOM (table.vue:118), wo der Browser ihn als HTML parst. Die Web-Konsole sendet weder eine Content-Security-Policy noch ein entsprechendes meta-Element, womit zwischen Quelle und Senke keine Schranke mehr steht. Die Eingabeseite wurde über die Jahre feldweise nachgebessert, die Namensprüfung selbst erlaubt HTML-Metazeichen jedoch weiterhin.

Proof of Concept

# Der Name muss isValidHostName passieren, Leerzeichen sind verboten.
# Deshalb Attribute ueber / trennen und Werte in Anfuehrungszeichen setzen:
<img/src="x"onerror="xssok=document.domain">

# Diesen Namen im ueberwachten Netz ankuendigen (mDNS, DHCP Option 12,
# NetBIOS oder ueber einen PTR-Eintrag, den ntopng aufloest).
# Betreiber oeffnet die Hosts-Ansicht -> der onerror-Handler feuert.

Die Schreibweise <img/src=x/onerror=...> scheitert, weil der unquotierte Wert von src den Rest als ein einziges Attribut verschluckt. Der aufgelöste Name wird bei etwa 62 Zeichen abgeschnitten, was für eine Exfiltration genügt, etwa mit einem Aufruf von fetch in Form eines getaggten Templates ohne Klammern.

Auswirkung

  • Skriptausführung in der Herkunft der Web-Konsole bei jedem Betreiber, der die Hosts-Ansicht öffnet, ohne dass der Angreifer ein Konto besitzt.
  • Auslesen des Administrator-Passworthashes, da lua/rest/v2/get/ntopng/users.lua ihn in der Sitzung des Opfers zurückgibt.
  • Übernahme der Konsole, weil das CSRF-Token im DOM steht und das Skript damit Nutzerkonten anlegen oder ändern kann.
  • Dauerhafter Verbleib, solange der Host im Speicher gehalten wird, und erneute Auslösung bei jedem Aufruf der Ansicht.

Referenzen

Steckt so etwas in Ihrer Software?

Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.