安全研究员Rocco Calvi披露了TP-Link AX1800 WiFi 6路由器(Archer AX21/AX20型号)存在的一个高危漏洞,该漏洞允许局域网内的攻击者以root用户身份实现远程代码执行(RCE)。
该漏洞编号为CVE-2023-28760,CVSS评分为7.5(高危级),存在于路由器媒体共享功能使用的MiniDLNA服务中。根据CVE记录描述:"TP-Link AX1800 WiFi 6路由器(Archer AX21)设备允许局域网内未经验证的攻击者通过db_dir字段向minidlnad发送指令,从而以root权限执行任意代码。攻击者可借此修改files.db文件,进而触发minidlna-1.1.2/upnpsoap.c中的基于栈的缓冲区溢出。"
该漏洞影响所有连接了USB存储设备以启用本地文件共享的路由器(通常通过\192.168.0.1访问),这种配置被许多家庭用户用于流媒体播放和网络存储。
漏洞核心在于路由器启用媒体共享功能时创建的.TPDLNA/files.db数据库存在缺陷。Calvi指出:"默认情况下,Windows的Samba服务和本地FTP服务均已启用,设备上的媒体共享功能也处于激活状态,这意味着MiniDLNA、ProFTPd和Samba服务将自动为USB共享启动。"
这种设计使得连接到同一局域网的攻击者能够通过SMB或FTP协议篡改数据库。漏洞源于MiniDLNA代码中缺乏正确的边界检查——特别是在处理SQL查询结果的回调函数中。
研究团队在对minidlna-1.1.2/upnpsoap.c文件进行静态代码分析时发现:"由于缺乏正确的边界检查...厂商误认为攻击者无法利用该漏洞,因此未发布补丁。"
这个疏忽造成了严重后果。由于MiniDLNA配置文件/tmp/minidlna.conf暴露了数据库路径:
db_dir=/mnt/sda1/.TPDLNA
任何能访问共享USB驱动器的网络用户都可直接修改files.db文件。
攻击者通过向files.db注入精心构造的数据,可触发基于栈的缓冲区溢出,最终在路由器上实现远程代码执行。
漏洞利用的关键在于DLNA处理函数如何将某些元数据字段复制到固定大小的栈缓冲区。特别是当构造的dlna_pn(DLNA配置文件名称)字段超出缓冲区大小时,会导致栈内存被覆盖。
Calvi解释道:"如果dlna_pn变量包含的字符数超过缓冲区容量,将引发基于栈的缓冲区溢出,使攻击者能够覆盖栈内容,并可能在路由器上执行任意代码。"
攻击者可进一步将该溢出与面向返回编程(ROP)技术结合,绕过ASLR(地址空间布局随机化)和NX(不可执行内存保护)等安全缓解措施。
研究团队发现:"为克服ASLR和NX位的防护机制,以及sprintf函数施加的空字节限制,我们找到了一个'one gadget'技术,能够在空字节限制下将执行重定向到单条指令。"
分析报告重点介绍了一种"one gadget"技术,该技术将执行流重定向到路由器固件中的system()函数,从而以root权限为攻击者提供命令行访问:
00015ed4 06 0d 8d e2 add r0,sp,#0x180
00015ed8 cb f6 ff eb bl <EXTERNAL>::system int system(char * __command)
成功利用后,攻击者将完全控制路由器,可执行任意命令、窃取数据或在家庭网络内横向移动。
研究团队在Pwn2Own竞赛期间开发了完整的PoC漏洞利用程序进行验证,在负责任的披露原则下安全演示了实际攻击效果。研究人员成功在路由器上获取了远程交互式shell,证实了漏洞的可利用性。
TP-Link已通过协调披露机制获知该问题,并在Archer AX20(EU)_V3_1.1.4 Build 20230219固件版本中修复。强烈建议受影响路由器的用户立即升级,最新固件及安装说明可通过官方渠道获取。
参考来源:
TP-Link Router Flaw CVE-2023-28760 Allows Root RCE via LAN, PoC Available