Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-40179-PoC — PoC Python minimale per CVE-2026-40179: inietta un nome di metrica dannoso tramite remote_write Prometheus non autenticato per attivare una XSS persistente nell'interfaccia web. Non richiede stub protobuf. | Kitploit
Strumenti/GitHubGitHub/bsdrip/cve-2026-40179-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza delle API
GitHubbsdrip/cve-2026-40179-poc

CVE-2026-40179-PoC

PoC Python minimale per CVE-2026-40179: inietta un nome di metrica dannoso tramite remote_write Prometheus non autenticato per attivare una XSS persistente nell'interfaccia web. Non richiede stub protobuf.

Vedi Repository
59 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-40179 — XSS persistente in Prometheus tramite remote_write

Una proof of concept minima e con poche dipendenze per CVE-2026-40179 (GHSA-vffh-x6r8-xx99): cross-site scripting persistente nell'interfaccia web di Prometheus, veicolato tramite un endpoint remote_write non autenticato.

La vulnerabilità

Prometheus 3.x visualizza i nomi delle metriche e i valori delle etichette nell'interfaccia web tramite innerHTML senza eseguire l'escaping. Poiché Prometheus v3 ha rilassato la validazione delle etichette per consentire UTF-8 arbitrario — inclusi <, > e " — un nome di metrica può trasportare un payload HTML che viene eseguito quando qualcuno naviga nell'interfaccia.

InteressatePrometheus 3.0.0 – 3.5.1
Corretta in3.5.2
ImpattoXSS persistente, eseguito nel browser di qualsiasi utente che visualizza la metrica interessata
Superfici vulnerabiliTooltip della pagina Graph, Metrics Explorer

Lo XSS ha comunque bisogno di un modo per iniettare una serie manipolata nel TSDB. Uno qualsiasi di questi va bene:

  • un endpoint remote_write aperto (quello che usa questa PoC),
  • un target di scraping compromesso o controllato dall'attaccante,
  • un receiver OTLP.

Un Prometheus esposto su internet o sulla LAN senza autenticazione davanti offre tutti questi vettori gratuitamente, ed è ciò che rende questa vulnerabilità concretamente sfruttabile e non solo teorica.

Cosa fa questo script

Invia una singola richiesta POST /api/v1/write contenente una serie temporale il cui __name__ è:

root@kitploit:~
pentest_poc_cve_2026_40179

Il WriteRequest protobuf è codificato a mano in ~40 righe, quindi non ci sono dipendenze da protobuf, prometheus_pb2 o promtool — solo python-snappy per la compressione di rete e requests per la POST. Questo lo rende facile da installare su un jump host dove non puoi costruire stub protobuf generati.

Requisiti

root@kitploit:~
python3 -m pip install python-snappy requests

python-snappy richiede la libreria C di Snappy:

root@kitploit:~
# Debian/Ubuntu
sudo apt install libsnappy-dev
# macOS
brew install snappy

Utilizzo

root@kitploit:~
python3 cve-2026-40179-poc.py <target_ip>

Lo script presuppone HTTPS sulla porta 9090 con verifica del certificato disabilitata (tipico per un'istanza interna con certificato autofirmato). Se il target è in chiaro HTTP o su un'altra porta, modifica la riga url in main().

Un'iniezione riuscita restituisce HTTP 204:

root@kitploit:~
POST https://192.0.2.10:9090/api/v1/write -> 204

Verificare che la scrittura sia arrivata

Interroga la serie nell'interfaccia web di Prometheus o tramite API — dovrebbe comparire immediatamente:

root@kitploit:~
{__name__=~"pentest_poc.*"}

La vista Table la visualizza correttamente con l'escaping e mostra il payload come testo semplice. Questo è il comportamento previsto e non è la superficie vulnerabile.

Attivare il payload

Apri il Metrics Explorer (il browser delle metriche accanto alla casella di interrogazione), cerca pentest_poc e passa il mouse sulla voce elencata.

Nei test sul campo contro la 3.2.1, il percorso Metrics Explorer si è attivato in modo affidabile, mentre il tooltip della scheda Graph non si è riprodotto — il campione iniettato (valore 1.0) non veniva visualizzato sul grafico, e passare il mouse sulla legenda non lo attivava. Entrambe le superfici sono indicate nell'avviso di sicurezza; se una non si attiva sulla tua versione target, prova l'altra prima di concludere che non è vulnerabile.

Il payload predefinito usa console.log() così non disturba chi non lo sta cercando. Per una demo visibile — per esempio uno screenshot per un report — cambia METRIC_NAME per usare alert():

root@kitploit:~
METRIC_NAME = ('pentest_poc_cve_2026_40179'
               '')

Pulizia — leggi prima di eseguire

La serie iniettata è persistente. Una volta scritta, rimane nel TSDB fino alla scadenza della retention. Per rimuoverla serve l'API di amministrazione, che è disabilitata per impostazione predefinita:

root@kitploit:~
# Funziona solo se Prometheus è stato avviato con --web.enable-admin-api
curl -X POST -g 'https://<target>:9090/api/v1/admin/tsdb/delete_series?match[]={__name__=~"pentest_poc.*"}'
curl -X POST 'https://<target>:9090/api/v1/admin/tsdb/clean_tombstones'

Se l'API di amministrazione è disattivata, non esiste una via di pulizia remota. L'unica alternativa è promtool tsdb eseguito localmente sull'host, a cui probabilmente non hai accesso.

Conseguenze pratiche:

  • Conferma che la pulizia sia possibile prima di iniettare in qualsiasi sistema a cui tieni, oppure accetta che l'artefatto persista.
  • Il nome della metrica è volutamente lungo, inconfondibile e auto-etichettante (job="pentest_poc"), così è facile trovarlo ed è ovviamente un artefatto di test.
  • In un engagement autorizzato, informa direttamente il cliente di eventuali serie residue, così non verranno scambiate in seguito per una compromissione reale.

Test in sicurezza

Per riprodurre la vulnerabilità su un'istanza usa-e-getta piuttosto che su un sistema live:

root@kitploit:~
docker run --rm -p 9090:9090 prom/prometheus:v3.2.1 \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-remote-write-receiver \
  --web.enable-admin-api

Poi punta lo script su 127.0.0.1 (cambia lo schema dell'URL in http:// in main()). Avviando con --web.enable-admin-api puoi effettivamente eliminare la serie in seguito.

Rimedio

  1. Aggiorna a Prometheus 3.5.2 o successivo. Questa è la correzione.
  2. Metti autenticazione e TLS davanti all'interfaccia web e all'API di Prometheus — un reverse proxy con autenticazione, oppure --web.config.file con basic_auth_users.
  3. Non abilitare --web.enable-remote-write-receiver se non necessario, e non esporlo mai senza autenticazione.
  4. Limita l'accesso di rete alla porta 9090 ai soli host che ne hanno legittimamente bisogno.

Nota che (1) da sola corregge lo XSS, ma un Prometheus non autenticato resta comunque una superficie considerevole di divulgazione di informazioni: l'elenco completo dei nomi delle metriche, l'inventario dei target di scraping e i nomi host interni sono tutti leggibili senza credenziali.

Solo uso autorizzato

Questo è pubblicato per difensori, ricercatori e tester che operano in regime di autorizzazione. La vulnerabilità è pubblicamente divulgata e corretta a monte.

Eseguire questo script contro un sistema scrive dati persistenti su di esso. Non puntarlo contro infrastrutture che non possiedi o per cui non hai un'autorizzazione scritta esplicita al testing.

Licenza

MIT — vedi LICENSE.

Scarica lo strumento