本报告描述了 CVE-2020-11881,这是针对运行在 RouterOs 上的 MikroTik SMB 服务的一个未经身份验证的远程拒绝服务漏洞。 该漏洞允许攻击者使正在运行的 SMB 服务崩溃,并于 2020年4月6日负责任地披露给了 security<@>mikrotik.com。
服务器消息块 (SMB) 协议由微软引入,并由多个供应商重新实现,以维持与 Windows 系统和服务的文件交换兼容性。 该协议通常用于 Windows 系统之间的文件交换。
6.41.3(长期版本)
6.45.8(长期版本)
6.45.9(长期版本)
6.46.4(稳定版本)
6.47.2(稳定版)
6.47.3(稳定版)
7.0beta5(测试版)
7.1beta2 及以下版本
2020年9月12日之前发布的更多版本可能受影响。版本 6.47.0 除外,该版本似乎在最初负责任披露流程的一个发布周期内已被修复。
SMB 服务器在收到一个 negotiation-request 包后,再收到一个修改过的 setup-request 包,就会崩溃。
为了触发该漏洞,setup-request 包需要将 MessageID 字段设置为 1,并将 SessionID 字段设置为 0。该服务会崩溃,因为它似乎无法处理 SessionID 字段。
为了可靠地复现该漏洞,请重建本仓库中提供的测试环境。
下载并启动 RouterOs 环境。
请在全新安装的 Ubuntu 18.04 上执行以下脚本,因为该脚本将安装所有必需的软件。 脚本执行后,会提供 RouterOs 虚拟机的 IP 地址。
sudo ./setupMikroTikEnvironment.sh
在 RouterOs 上启用 SMB
运行以下命令以激活 SMB 服务。
telnet <RouterOs IP>
(用户: admin, <无密码>)
ip smb set enabled=yes
ip smb print
可以从主机系统使用以下命令手动检查该服务,只要服务正在运行,应返回 Anonymous login successful。
smbclient -N -L \\\\<RouterOs IP>
拒绝服务攻击
Python3 脚本 cve-2020-11881.py 会在利用过程前后验证 SMB 服务的可用性。成功执行后,SMB 服务将不可用。
请按如下所示执行脚本。
python3 cve-2020-11881.py --ip <RouterOs Ip>
使用以下命令测试 SMB 服务将会失败。
smbclient -N -L \\\\<RouterOs IP>
移除虚拟机
要移除虚拟机,只需再次运行该脚本。
sudo ./setupMikroTikEnvironment.sh
该漏洞于2020年4月6日报告,但截至2020年9月12日仍未修复,尽管多次请求。
关于 CVE 的讨论:https://forum.mikrotik.com/viewtopic.php?f=2&t=166137
目前只有长期版本通道 (v6.46.7) 包含了此 CVE 的所有必要修复。我们正在努力将它们发布到稳定版和测试版通道。对于造成的不便,我们深表歉意。