研究人员公开披露了Realtek公司的SDK中存在4个安全漏洞,攻击者可以未经身份验证远程利用这些漏洞,注入任意命令并以最高权限执行任意代码或导致设备崩溃。这些漏洞影响了至少65个不同供应商生产的近200种产品,并作为供应链漏洞,影响了数十万台下游设备。

漏洞概述

Realtek芯片组广泛应用于物联网领域的嵌入式设备中,其中RTL8xxx SoC是一种常见的提供无线功能的芯片组。这些二进制文件通过网络公开服务,由Realtek公司提供。这些二进制文件作为Realtek SDK的一部分进行打包,该SDK由Realtek开发并提供给使用RTL8xxx SoC的供应商和制造商。影响着常见的路由器设备厂商、包括dlink,tp-link,tenda,网件等。

此次分析是Realtek SDK的upnp服务程序,CVE-2021-35392, UPnP 订阅标头参数堆栈缓冲区溢出。

漏洞分析

UPnP的订阅功能允许设备向控制点注册感兴趣的事件。当事件发生时,设备将通知控制点。订阅功能允许控制点获得实时设备状态的更改,从而允许控制点动态地调整其行为。 UPnP的订阅功能通常与事件通知一起使用,该事件通知用于在设备状态更改时通知控制点。

此次的漏洞成因就是在通过对IOT设备进行订阅时,对参数解析不正确造成缓冲区溢出。

分析upnp处理的请求,当程序收到订阅的请求时,ProcessHttpQuery_upnphttp函数负责进行处理。
image-1687317127290
在第8行,函数UPnPProcessSUBSCRIBE会解析存储在结构体upnphttp中的HTTP请求,然后将其填充到提供的结构体process_upnp_subscription的字段中。
image-1687317136717
ParseSUBSCRIBEPacket函数解析HTTP请求行。它首先验证URL是否是有效的事件URL,检查主机标头是否对应于自己的IP和端口,最后通过调用GetIPandPortandCallBack从回调标头值中提取IP和端口号。
image-1687317146752
接下来函数调用GetIPandPortandCallback函数对请求的port参数进行处理,另外函数还对协议是否合理进行检测,开头为以http://请求以及SUBSCRIBE开头,http:ip:port是否规范等,检验是否为http://ip:port并把port的值通过atoi函数转换成一个整数,这里由于校验不完整可以构造一个port的参数36557AAAAA*100,拷贝的port的缓冲区中造成溢出。
image-1687317156297
可以构造如下请求进行溢出,
image-1687317165354
调试结果:
image-1687317173853

修复方案及防护措施

1、进行软件更新、固件升级:打开路由器的管理界面,通常是在浏览器中输入路由器的IP地址来访问。在管理界面中,寻找固件更新选项,进行固件更新。
2、更改设备默认凭据:IoT 设备都具有默认的用户名和密码。更改这些默认凭据,并使用强密码来保护设备
3、确保网络安全:确保网络的安全性也是非常重要的。可以通过使用网络防火墙、访问控制列表和加密来保护网络。
4、定期更新:定期更新 IoT 设备的软件和固件可以确保设备的安全性和性能。