[하루한줄] CVE-2021-22909: Ubiquiti 라우터 펌웨어 업데이트 취약점

URL

CVE-2021-22909- DIGGING INTO A UBIQUITI FIRMWARE UPDATE BUG

Target

Ubiquiti EdgeRouter

Explain

CVE-2021-22909에 대한 패치가 이루어졌습니다. Ubiquiti EdgeRouter의 펌웨어 업데이트 작업에 MiTM(man-in-the-middle) 공격에 대한 방지 부재로 인해 라우터 기기에 악성 펌웨어 이미지를 설치할 수 있었습니다. 해커는 이를 악용해 라우터 기기에 악성 펌웨어를 설치할 수 있고 root 권한으로 임의 코드 실행이 가능합니다.

Ubiquiti EdgeRouter는 templated operational command를 지원합니다. Templated operational command란 라우터의 설정을 빠르고 간편하게 수정할 수 있도록 짜인 스크립트 실행 명령어입니다. 유저가 CLI에 add system image를 입력하면 ubnt-fw-latest 스크립트가 실행되어 펌웨어를 업데이트할 수 있습니다.

unbt-fw-latest 스크립트는 upgrade_firmware()함수를 호출해 Ubiquiti update server로부터 다운 로드 URL을 포함한 최신 펌웨어 정보를 받아옵니다. 그 후 받아온 정보를 파싱 해 현재 펌웨어 버전과 비교하고 업데이트가 가능하면 ubnt-upgrade 스크립트를 실행해 제공받은 url로부터 펌웨어를 설치합니다.

ubnt-upgrade 스크립트가 호출하는 get_tar_by_url() 함수는 curl 커맨드를 사용해 펌웨어를 설치하는데 -k 옵션(TLS 인증서 검증 비활성화)이 설정되어있어 취약점이 발생합니다. 해커는 MITM으로 자신의 도메인을 속여 라우터에 악성 펌웨어를 설치할 수 있습니다.

get_tar_by_url () 
{ 
    mkdir $TMP_DIR 
    if [ "$NOPROMPT" -eq 0 ]; then 
        echo "Trying to get upgrade file from $TAR" 
    fi 
  
    if [ -n "$USERNAME" ]; then 
        auth="-u $USERNAME:$PASSWORD" 
    else 
        auth="" 
    fi 
  
    filename="${TMP_DIR}/${TAR##*/}" 
    if [ "$NOPROMPT" -eq 0 ]; then 
        curl -k $auth -f -L -o $filename $TAR      # <-----  
    else 
        curl -k $auth -f -s -L -o $filename $TAR   # <----- 
    fi 
    if [ $? -ne 0 ]; then 
        echo "Unable to get upgrade file from $TAR" 
        rm -f $filename 
        rm -f $DOWNLOADING 
        exit 1 
    fi 
  
    if [ ! -e $filename ]; then 
        echo "Download of $TAR failed" 
        rm -f $DOWNLOADING 
        exit 1 
    fi 
  
    if [ "$NOPROMPT" -eq 0 ]; then 
        echo "Download succeeded" 
    fi 
  
    TAR=$filename 
}