获取TP-LinkTapoC260摄像头的Shell(CVE-2026-0651,CVE-2026-0652,CVE-2026-0653)

admin 2026-03-18 17:44:35 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详述了TP-LinkTapoC260摄像头的三个漏洞链,包括本地文件泄露、访客权限RCE和权限提升。作者通过固件逆向定位HTTP服务缺陷,利用文件泄露获取运行时配置,结合配置写入API与命令注入点构建完整攻击链,实现访客权限到设备完全控制的跃升。建议更新固件、强化内部输入验证及实施最小权限原则。 综合评分: 90 文章分类: 漏洞分析,IoT安全,逆向分析,渗透测试


cover_image

获取 TP-Link Tapo C260 摄像头的 Shell (CVE-2026-0651, CVE-2026-0652, CVE-2026-0653)

幻泉之洲

2026年3月8日 12:00 北京

本文详细拆解了在 TP-Link Tapo C260摄像头中发现并串联利用的三个安全漏洞:本地文件泄露(CVE-2026-0651)、访客权限的远程代码执行(CVE-2026-0652)和权限提升(CVE-2026-0653)。文章还原了完整的漏洞挖掘过程,从静态分析定位攻击面,到利用文件泄露获取运行时配置,最终通过篡改内部配置值触达命令注入点的技术细节。

漏洞概述

TP-Link Tapo C260是一款较新的家用摄像头。在对其进行固件逆向分析后,发现了三个相互关联的安全漏洞,构成了从本地网络访问到获取设备完全控制权的攻击链。

  • CVE-2026-0651

    本地文件泄露。允许经过认证的用户(包括访客账户)读取设备上的任意文件。

  • CVE-2026-0652

    访客权限的远程代码执行。通过篡改摄像头内部配置文件,触发未经净化的命令执行,实现RCE。

  • CVE-2026-0653

    权限提升。利用漏洞组合,访客权限可以执行本应受限制的敏感操作。

挖掘起点:从静态分析定位入口

分析的目标是 /bin/main 二进制文件,它像一个总服务,负责启动处理各种网络协议的子进程。除了已知的Tapo发现协议,还有一个仅限本地网络访问的Web协议,用于与移动应用通信。

传统的静态分析方法,从日志字符串或像accept这样的源函数开始,往往能快速定位到关键代码。在Ghidra的符号列表中搜索accept,直接找到了HTTP服务器的处理逻辑函数FUN_000b42c8

int * FUN_000b42c8(int param_1) {   //…   iVar3 = accept(param_1,&local_30,local_44);   *piVar2 = iVar3;   if (iVar3 != -1) {     iVar3 = sock_non_block();     if (iVar3 == -1) {       msg_debug(0,5,3,”socket_handle”,0x1b0,”[HTTPD]Http socket set non block error.”);     }     // …   }   FUN_000b4248(piVar2);   return (int *)0x0;

这个函数为HTTP服务器初始化socket句柄。交叉引用显示,它被多个包装函数调用,分别处理SOAP、ONVIF以及主要的移动应用交互Web服务器。嵌入式设备由于计算、内存或存储限制,通常无法运行Apache或Nginx这类加固的服务器,只能自己从头实现HTTP协议,这往往容易出错。

CVE-2026-0651:本地文件泄露

回到Ghidra的字符串列表,搜索http_get_handle,找到了指向GET请求主处理函数的日志字符串。分析这个处理函数,发现了一段关键代码。

// 部分伪代码   iVar3 = strncmp((char *)(param_1 + 0x78),”/pc”,3);   if (iVar3 == 0) {     snprintf(pcVar2,0xa0,”/www/admin%s”,param_1 + 0x7b);   }   else {     snprintf(pcVar2,0xa0,”/www%s”,(char *)(param_1 + 0x78));   }   // …   pcVar5 = strchr(pcVar2,0x3f);   if (pcVar5 != (char *)0x0) {     *pcVar5 = ‘\0’;   }   iVar3 = stat(pcVar2,(stat *)(param_1 + 0x1d8));

这里构造文件路径后,会用strchr寻找问号(0x3f)并将其截断,然后调用stat检查文件。问题在于路径遍历的检查缺失。通过构造类似/pc/../../../etc/passwd的请求,可以读取任意文件。这个漏洞需要认证,但访客账户就足够了,实际影响比CVE描述的更大。

CVE-2026-0652:远程代码执行

手里有了文件泄露能力,就能从运行中的设备上读取文件,这对调试和理解设备运行时状态帮助巨大。许多配置文件是在设备启动或配置过程中生成或修改的,仅靠固件dump无法完全反映。

接下来的目标是命令注入。这个相对现代的摄像头对用户直接输入进行了严格校验,没有发现直接从输入到popen的明显路径。

防守相对薄弱的地方在内部配置值。这是设备从自己的文件系统读取的数据,开发者似乎默认,如果攻击者无法写入文件系统或配置,这些值就是可信的。我的任务是找到一条代码路径,它同时满足:读取一个配置值,并把它未经净化地传递给shell命令。

在Ghidra中搜索popen调用并回溯调用链,我找到了set_region_code_handle函数(通过日志字符串命名)。

… popen_wrapper(“wlan_operate efuse_get_region”,acStack_5a8); sVar1 = strlen(acStack_5a8); if (sVar1 == 0) {   pcVar7 = FUN_000c8a04(param_4); // 这里读取配置值,例如 dev_name   if (pcVar7 != (char *)0x0) {     snprintf(acStack_5a8,0x400,”wlan_operate efuse_set_region %s”,pcVar7); // 拼接到命令中     popen_wrapper(acStack_5a8,0);   } }

函数中的FUN_000c8a04会读取一个配置值(后来确定为dev_name),并将其拼接进shell命令。这就是我们要找的“接收器”。现在需要找到“源头”——一个能写入这个配置值的API。

利用链构建:从写配置到触发执行

通过分析网络流量和对API的逆向,发现了一个关键API命令:setLedStatus。它的HTTP请求类似这样(省略部分头部):

POST /v1/things//services-sync HTTP/1.1 Host: aps1-app-server.iot.i.tplinkcloud.com …

{“inputParams”:{“requestData”:{“method”:”multipleRequest”,”params”:{“requests”:[{“method”:”setLedStatus”,”params”:{“led”:{“config”:{“status”:”on”},”factory_mode”:{“enabled”:”1″}}}}]}}},”serviceId”:”passthrough”}

这个请求原本用来设置LED配置。但通过修改请求体中的键结构,我可以将数据写入任意的配置路径。例如,将请求体改为:

… {“inputParams”:{“requestData”:{“method”:”multipleRequest”,”params”:{“requests”:[{“method”:”setLedStatus”,”params”:{“tp_manage”:{“info”:{“dev_name”:”;ping -c1 ;”},”factory_mode”:{“enabled”:”1″}}}}]}}},”serviceId”:”passthrough”} …

这样,字符串";ping -c1 ;"就被写入了tp_manage/info/dev_name这个配置项。

完整的利用分两步走:

  1. 写入payload

    :利用修改后的setLedStatus请求,将命令注入payload写入dev_name配置。

  2. 触发执行

    :调用set_region_code命令来触发set_region_code_handle函数,该函数读取dev_name(现在包含我们的payload)并传给popen_wrapper执行。

第二步通过另一个API命令testUsrDefAudio来完成,其请求体中包含"set_region_code":{"region":"US"}

发送这个请求后,我们的命令就执行了。

这里也发生了权限提升,因为访客用户本应只能执行有限命令和设置部分配置值,但由于缺乏验证,他们也能设置像dev_name这样的敏感配置值,从而实现RCE。

影响范围与修复建议

影响范围

  • 受影响设备

    TP-Link Tapo C260摄像头(特定固件版本,请参考TP-Link官方公告)。

  • 受影响组件

    摄像头内置的Web服务及其配置管理逻辑。

  • 攻击前提

    攻击者需要在同一本地网络内,并拥有一个访客级别的账户凭证。

修复建议与缓解措施

  • 官方修复

    立即更新摄像头固件至TP-Link发布的最新安全版本。

  • 输入验证强化

    对所有从文件系统读取的“内部”配置值进行净化处理,不能默认其可信,特别是当其用于拼接系统命令时。

  • 路径遍历防护

    在文件服务处理逻辑中,对用户提供的路径参数进行规范化并严格检查,防止目录遍历。

  • 权限最小化

    重新评估访客账户的权限,确保其无法通过API接口写入关键的系统配置路径。

  • 网络隔离

    如果可能,将物联网设备放置在独立的网络分区中,限制其对内部网络的访问。

思考

C260摄像头有意思的地方在于,通往RCE的路不是线性的。没有哪个单一的用户输入能直接流到shell命令。我必须先找到一个信任内部配置的代码路径,然后再找到一个能往那个配置里写东西的方法。

文件泄露漏洞是解锁第二环的钥匙。没有它,我就无法读取运行时配置文件,也无法观察设备对移动应用命令的响应,自然也就没法把param_3追溯到dev_name,更发现不了那个可以向任意配置路径写的set命令API。

在物联网安全研究里,单个漏洞常常能很好地串联起来。一个“低危”的文件读取能力,可能正是你下一步挖掘所需的关键上下文。覆盖配置值的能力,可能就是你抵达命令注入点所需的下一块跳板。如果你在挖掘物联网漏洞,别轻视那些“阶段性成果”,它们往往就是构建下一步攻击的基石。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:幻泉之洲 《获取 TP-Link Tapo C260 摄像头的 Shell (CVE-2026-0651, CVE-2026-0652, CVE-2026-0653)》

    评论:0   参与:  0