꿈을꾸는 파랑새

오늘은 TP-Link 공유기 CVE-2024-53375 취약점 간단 분석에 대해 글을 적어보겠습니다.
일단 HomeShield 기능이 존재하는 TP-Link 공유기 들은 다음과 같습니다.
TP-Link Archer Series
TP-Link Deco Series
TP-Link Tapo Series
일단 해당 취약점이 공개된 부분만 통해서 적어 봅니다.

문제의 코드

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")

AI 가 그린 TP-Link 공유기
AI 가 그린 TP-Link 공유기

문제점

avira.lua 파일과 관련이 있는 취약점입니다.
Avira 는 독일에 있는 보안 업체입니다. root (최대한의 액세스) 운영 체제의 기본 라우터에 대한 액세스가 됩니다.
os.execute로 인한 명령 주입(Command Injection)
os.execute(cp..PROC_PCTL...ownerId.../tmp/visitList)
사용자로부터 입력받은 ownerId를 그대로 문자열로 이어붙여서 cp 명령을 실행하고 있음
예를 들어 ownerId 값이 정상적인 정수나 문자열이 아닌 ; rm -rf / 와 같은 형태
시스템 명령이 악의적으로 확장 가능
Lua에서 os.execute 사용 시 문자열을 그대로 명령어에 전달하므로 반드시 입력값에 대한 검증(Sanitization)과 이제 분리 생각을 해야 함
인증된 사용자는 해당 취약점을 통해 라우터의 root 권한으로 원격 코드 실행이 가능해지는 문제가 발생 
OwnerId 변수에 있으며 해당 함수는 OwnerId라는 로컬 변수를 선언하고 해당 변수는 data.ownerId 변수에 의해 채워지며 데이터 변수는 app_from.data 변수의 json에서 디코딩되고 있습니다.
OwnerId 변수는 검사, sanitized 처리 등을 거치지 않은 채 마지막 줄의 os.execute 함수에 전달
개발자는 --int 주석을 추가하여 ownerId가 정수여야 함을 표시했지만 현재로서는 가정일 뿐입니다.
즉 해당 TP-Link 공유기를 사용을 하고 계시는 분들은 최신 펌웨어로 올리는 것을 권장합니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band