
Linux에서 Sudo chroot를 통한 로컬 루트 권한 상승
Linux에서 Sudo chroot를 통한 루트 권한 상승.
자세한 소식은 여기서 읽을 수 있어요 :
TL;DR 및 CMIIW 자, sudo는 명령을 admin/root로 실행하기 위한 명령어잖아요. 사용자는 sudoers 그룹에 속해 있어야 sudo를 실행할 수 있어요. 그런데 sudo 바이너리에는 일반 사용자가 권한 없이 sudo를 실행하고 root로 전환할 수 있게 만드는 버그가 있어요.
그 버그는 sudo 명령의 --chroot 옵션에 있는 취약점이에요. chroot는 임시 디렉터리에서 명령을 실행할 수 있게 해줘요. 문제는 sudo가 사용자가 sudo를 실행할 수 있는지 여부를 확인하기 전에 그 임시 디렉터리 안의 설정 파일을 먼저 확인한다는 거예요.
이 설정 파일을 어떻게든 편집해서 root 액세스를 얻기 위해 변조된 코드를 가리키게 할 수 있다면, 인증 없이 또는 sudoer로 등록되지 않아도 root 액세스를 얻을 수 있어요. 왜냐하면 그 과정에서 해당 정보를 얻기 위해 시스템이 (임시로) 명령을 root로 승격시키기 때문이에요.
그 설정 파일이 뭘까요? /etc/nsswithc.conf. 이 설정 파일은 시스템이 예를 들어 이 사용자가 어떤 그룹에 속해 있는지 등을 알아내는 데 사용돼요. nsswitch 파일의 내용은 대략 이렇게 생겼어요:
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
자! 사용되는 데이터 소스가 files라면, nss는 libnss_files.so.2라는 라이브러리를 호출해요. 이 파일은 C 코드를 포함하고 있는데, 이걸 수정하면 root 액세스를 얻을 가능성이 매우 높아요. 시스템이 이걸 sudoers 사용자가 아닌 경우에도 root로 실행하기 때문이에요. 이 내용은 exploit.sh 파일에서 확인할 수 있어요.
요약하자면 :
/etc/nsswitch.conf를 만든다.