一、 事件背景
MikroTik成立于1995年,总部位于拉脱维亚首都里加,主要从事开发路由器和无线ISP系统。MikroTik RouterOS是一种路由操作系统,并通过该软件将标准的PC电脑变成专业路由器。
1月底,国家信息安全漏洞共享平台(CNVD)收录了关于MikroTik RouterOS存在远程代码执行的漏洞(CNVD-2018-01317)。攻击者可以利用漏洞远程获取RouterOS系统的Shell。
相关链接如下:
http://www.cnvd.org.cn/flaw/show/CNVD-2018-01317
二、 漏洞复现
本地搭建Mikrotik routeros系统,此处选择RouterOS 6.38.4 x86作为测试,用虚拟机安装镜像之后,如下所示:
利用WinBox软件通过MAC地址连接Mikrotik routeros系统。
然后为Mikrotik routeros系统配置ip地址。
配置完ip地址之后,就可以通过http访问。
如果要利用此漏洞获取系统的shell,就要先从RouterOS固件中提取二进制文件。使用命令:python3 .\getROSbin.py6.38.4 x86 /nova/bin/www test
此处利用漏洞poc脚本执行命令:python3 .\StackClashMIPS.py 192.168.3.225 80 "echo hello world> /dev/lcd",在Mikrotik lcd上显示hello world。
释放exploit之后,lcd就会出现如下结果:
三、 漏洞分析及危害
1) 漏洞分析
此次漏洞产生的原因在于Content-Length和alloca宏,由于没有检查及过滤,从而可以控制堆栈指针和写入数据的位置。
查看系统的相关代码,如下图第二个红框所示,当获取content-length的值之后,就传给了 alloca 分配内存,并没有检查其大小,最终导致此次漏洞的产生。
对比查看已经修复此漏洞的RouterOS 6.38.5版本系统代码,修复漏洞后的程序没有了alloca,而是直接使用string::string 构造了字符串。
2) 漏洞危害
攻击者可以利用该漏洞在目标系统上执行任意代码,获取敏感信息,并且可以通过执行命令获取RouterOS系统的Shell。
四、 数据分析
中国境内使用MikroTik RouterOS系统的用户数量约为24.6万台左右。其中排名前五的省份或地区分别为:广东省、台湾省、北京市、上海市、江苏省。
国内分布
下图为中国范围内使用MikroTik RouterOS系统的分布情况:
图1、国内分布图
下图为中国范围内使用MikroTik RouterOS系统数量排名前十的省份或地区:
图2、国内排名前十
下图为国内使用MikroTik RouterOS系统的运营商排名:
图3、国内运营商排名前十
五、 防范建议
1) 漏洞涉及版本
MicroTik RouterOS <6.38.5
2) 修复建议
目前厂商已经公布升级补丁,请用户及时更新:
https://mikrotik.com/download/archive