一个自动化行为验证器,用于检测 MikroTik RouterOS 中的 SSH 公钥认证绕过漏洞 (CVE-2026-67276)。
该脚本通过使用仅匹配目标公钥模数的伪造签名建立握手,来测试 SSH 服务的不完整验证缺陷是否允许认证绕过。
CVE-2026-67276 源于 RouterOS SSH 守护进程处理器中 RSA 公钥验证不完整。在处理客户端的公钥认证请求时,受影响版本仅匹配密钥类型和 RSA 公钥模数 ($n$),而省略了对公钥指数 ($e$) 的验证。
拥有目标用户已配置 授权公钥 的操作者可以伪造登录载荷。通过提交一个将指数设置为 $1$ ($e=1$) 的临时密钥块,并附带有效的授权模数,即可传递一个在数学上可预测、与验证器期望的精确结构相匹配的签名。这可以在不拥有或不需要相应私钥的情况下完全绕过认证。
ssh-rsa OpenSSH 公钥文件的本地副本中提取模数 ($n$)。ssh-rsa、rsa-sha2-256 或 rsa-sha2-512)。验证器需要 Python 3 和 paramiko 库用于自定义 SSH 消息构造。
pip install paramiko
python3 ssh_modulus_forge_check.py -H <目标IP> -u <用户名> -k <授权公钥路径>
python3 ssh_modulus_forge_check.py -H 192.168.88.1 -u admin -k id_rsa.pub --exec "/system resource print"
为保护易受攻击的设备,请确保立即将 RouterOS 安装更新到已修复的版本。如果无法原生安排补丁更新,请通过强制实施本地化 IP 防火墙规则(/ip firewall filter)或使用 RouterOS 服务管理(/ip service)限制允许的源地址,以限制对该服务的管理访问。
此实现仅用于在授权网络上进行防御性行为验证、凭据审计和补丁合规性检查。
| 标志 | 描述 | 默认值 |
|---|
-H, --host | 目标主机 IP 地址或主机名。 | 必填 |
-p, --port | 目标 SSH 端口号。 | 22 |
-u, --user | 要验证的目标用户名。 | 必填 |
-k, --pubkey | 绑定到目标账户的合法 .pub 文件路径。 | 必填 |
--sig-alg | 强制指定签名类型(ssh-rsa、rsa-sha2-256、rsa-sha2-512)。 | auto |
--exec | 成功后作为访问证明执行的远程命令。 | None |
--timeout | 网络和认证连接超时时间(秒)。 | 10 |