CVE-2020-7523:施耐德串行驱动程序本地提权漏洞分析

CVE-2020-7523:施耐德串行驱动程序本地提权漏洞分析

时间:2022-03-10 作者:安帝科技

Part1 漏洞状态

Part2 漏洞描述


受影响版本
modbus_driver_suite <= 14.15.0.0
modbus_serial_driver x86 <= 2.20_ie_30
modbus_serial_driver x64 <=3.20_ie_30

Part3 漏洞复现环境

系统环境:
Win7 X64 sp1
软件
SchneiderModbusDriverSuite.exe

Part4 漏洞复现

安装软件:

成功之后查看进程

查看是否存在 ModbusDrvSys.exe 进程
https://andisec.com/wp-content/uploads/2022/03/CVE-2020-7523-3.jpg
C:\Windows\System32\ModbusDrvSys.exe

软件版本:

使用管理员账号在C盘创建test.exe

填充16进制数据

查看属性

普通用户没有写权限
切换账号
使用ImHex 工具打开 C:\test.exe
会提示 只读模式,没有权限修改文件,并且看到文件内容 0x00-0x0F

运行测试程序

再用Imhex 打开 C:\test.exe 查看结果

没有写权限的文件已经被修改。

Part4 漏洞细节分析


查看共享内存权限。默认无权限,就是任何本地程序都能打开,读写。
X64 dbg 加载程序,进行分析。

这里接收发送数据。

先取出发送数据的长度,这里是我们构造数据的真实长度。
然后高低字节序翻转一下,
最后比较,0x411 也就是数据最大长度不能超过 0x411 十进制 1041
如果超过这个长度

直接跳转到关闭网络连接位置。

然后 判断 rax+0x44c位置也就是打开文件句柄计数,减一。如果减一之后等于0直接关闭文件。
如果长度在0x411以内

进行下一次数据接收。

这里判断是否有文件打开,如果有直接写入数据,如果没有,就根据共享内存里面储存的路径打开文件。

Part6 总结

ModbusDrvSys.exe创建了一块共享内存,保存串口名。由于共享内存没有设置权限,任意程序都可以修改里面的串口名。因此本地程序可以通过修改串口名,然后发送特定数据包给本地27700端口,即可把发送的数据写入任意文件。

Part7 缓解建议

安装主机安全卫士设置应用程序白名单。

获取更多情报
联系我们,获取更多漏洞情报详情及处置建议,让企业远离漏洞威胁。
电话:18511745601
邮箱:shiliangang@andisec.com