[하루한줄] 퀄컴 SoC의 보안 실행 환경 QSEE에서 발견된 4가지 취약점

URL

Qualcomm IPQ40xx: Analysis of Critical QSEE Vulnerabilities

Target

  • Qualcomm IPQ40xx Series

Explain

Linksys, Netgear 및 Cisco 등 여러 제조업체에서 사용하는 Qualcomm의 SoC인 IPQ40xx 시리즈 칩에서 발견된 여러 취약점들의 세부 정보가 공개되었습니다.

퀄컴은 프로세서와 주변 하드웨어 장치의 안정성을 위해 다음과 같이 실행 환경을 분리합니다.

  • QSEE(Qualcomm Secure Execution Environment) : 퀄컴의 Trusted Execution Environment(신뢰 실행 환경)으로, 일반 실행 환경과 격리된 보안 영역이 제공하는 실행 환경이며 QSEE와 관련된 코드 및 데이터는 REE에서 액세스가 불가능합니다.
  • REE(Rich Execution Environment) : 일반 실행 환경

CVE-2020-11256

SMC 핸들러 tzbsp_blow_fuses_and_reset() 은 두 개의 인자 arg1, arg2를 받습니다. 해당 함수는 arg2를 역참조해 1 또는 2를 기록하는데, arg2가 REE 영역의 메모리를 가리키는지 확인하지 않습니다.

CVE-2020-11257

SMC 핸들러 usb_calib() 의 인자 arg1는 삭제되지 않은 출력 포인터로, arg1는 메모리 0x580e0의 값인 0x787을 쓰기 위해 역참조 되며 arg1이 REE 영역의 메모리를 가리키는지 확인하지 않습니다.

CVE-2020-11258

SMC 핸들러 tzbsp_version_set() 함수는 네 개의 인자를 받으며 인자 값에 따라 arg3를 역참조해 0x0, 0x5, 0xfffffffc 중 하나를 씁니다. 이때 arg3가 REE 영역의 메모리를 가리키는지 확인하지 않습니다.

CVE-2020-11259

SMC 핸들러 tzbsp_version_set() 함수는 세 개의 인자를 받습니다. 이 중 arg2에는 sub_87e90370 의 반환 값 또는 sub_87e90370 | 0xF0000 값을,arg3에는 0x0을 쓰기 위해 각각 역참조 합니다. 이때 arg2arg3가 REE 영역의 메모리를 가리키는지 확인하지 않습니다.

위 네 가지 취약점은 모두 SMC(Secure Monitor Call) 핸들러에서 발생한다는 점과 인자로 전달된 포인터가 REE 영역의 메모리인지 확인하지 않는다는 공통점이 존재합니다. 취약점을 악용하면 QSEE가 액세스 가능한 임의의 주소에 제한된 쓰기가 가능하며 QSEE에 구현된 보안 기법을 우회해 커널 및 하드웨어에 직접 액세스 할 수 있습니다.