[하루한줄] 퀄컴 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
을 쓰기 위해 각각 역참조 합니다. 이때 arg2
와 arg3
가 REE 영역의 메모리를 가리키는지 확인하지 않습니다.
위 네 가지 취약점은 모두 SMC(Secure Monitor Call)
핸들러에서 발생한다는 점과 인자로 전달된 포인터가 REE 영역의 메모리인지 확인하지 않는다는 공통점이 존재합니다. 취약점을 악용하면 QSEE가 액세스 가능한 임의의 주소에 제한된 쓰기가 가능하며 QSEE에 구현된 보안 기법을 우회해 커널 및 하드웨어에 직접 액세스 할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.