[하루한줄] 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
}
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.