policyKit은 시스템 전체의 권한을 제어하기 위한 툴킷입니다. policyKit 내부에 존재하는 pkexec의 경우,

특정 명령어를 사용자 정책에 따라 상위 권한으로 실행할 수 있도록 도와주는 도구입니다. 최근 이런 툴킷에서 취약점이 발견되고 있습니다.

이번에 분석하는 CVE-2021-4034은 pkexec에서 취약점이 발견되었으며, root 권한의 setuid가 설정되어 있어 LPE가 가능한 취약점입니다.

바로 문제가 되는 main의 소스코드를 살펴보겠습니다.

반복문을 통해 n = argc - 1임을 생각해볼 수 있습니다.

path에 argv[n]에 해당하는 값을 넣게 되는데, 만약 argv가 null로 설정되어 있다면 argv[1]을 참조하게 되면서 Out-of-bounds가 일어나게 됩니다. 바이너리 상에서 argv 다음으로 오는 인자는 env이므로, env에 명령어를 넣고 pkexec를 실행한다면 상위 권한의 패스워드 검증없이 원하는 명령어 실행이 가능합니다.

pkexec의 다음 구문에서 실행되는 명령어의 default 권한을 알 수 있습니다.

default 값으로 opt_user=root 입니다. 때문에, main의 정책 검증 로직이 의미가 없어지게 되고

쉘 명령어가 root 권한으로 일어나면서 로컬 권한 상승을 일으킬 수 있게 됩니다.

 

 

+ Recent posts