
CVE-2021-4034 (PwnKit) 취약점을 시뮬레이션하는 안전하고 통제된 모의 시스템으로, 범위를 벗어난 읽기/쓰기(out-of-bounds read/write), 환경 변수 주입, 커널 방어 탐지 기능을 갖춘 교육용 익스플로잇 실습 환경입니다.
이 프로젝트는 리눅스 pkexec 데몬에서 발생한 CVE-2021-4034 (Out-of-Bounds Read/Write) 취약점의 핵심 동작 원리를 재현한 모의 시스템입니다. 실제 SUID 권한 상승 없이, 통제된 환경 내에서 환경 변수 메모리 영역 침범 및 악성 페이로드 주입(Injection) 메커니즘을 안전하게 시뮬레이션합니다.
특히 이 모의 시스템은 최신 리눅스 커널의 execve 방어 기제(빈 배열 전달 시 강제로 빈 문자열을 삽입하여 argc=1로 만드는 현상)를 탐지하고 오프셋을 보정하여 과거의 취약했던 메모리 환경을 성공적으로 모방하도록 설계되었습니다.
cve-2021-4034-mock/
├── README.md # 프로젝트 설명 및 실행 가이드
├── src/
│ ├── mock_pkexec.c # 인자값(argc) 검증이 누락된 타겟 데몬 소스
│ └── exploit.c # execve를 통해 공격 페이로드를 전달하는 공격자 소스
└── bin/ # 컴파일된 실행 파일 저장 경로 (빌드 시 생성됨)
터미널에서 프로젝트 루트 디렉토리로 이동한 뒤, 아래 명령어를 순서대로 한 줄씩 입력하여 소스 코드를 컴파일합니다.
# 1. 실행 파일이 저장될 bin 폴더 생성
mkdir -p bin
# 2. 타겟 프로그램(모의 시스템) 컴파일
gcc -Wall -Wextra -o bin/mock_pkexec src/mock_pkexec.c
# 3. 공격 익스플로잇 스크립트 컴파일
gcc -Wall -Wextra -o bin/exploit src/exploit.c
정상적으로 컴파일되면 bin/ 폴더 내에 mock_pkexec와 exploit 실행 파일이 생성됩니다.
인자를 정상적으로 전달하여 실행하면, 방어 로직에 의해 권한 검증에 실패하거나 안전하게 종료됨을 증명합니다.
./bin/mock_pkexec test_argument
[OK] 메시지와 함께 프로그램이 종료됩니다.공격 스크립트를 실행하여 강제로 argc=0 페이로드(NULL 배열)를 전달하여 취약점을 트리거합니다.
./bin/exploit
argc를 1로 강제 조정하는 것을 모의 시스템이 감지하고, 메모리 참조 인덱스를 동적으로 보정합니다.argv 배열의 경계를 넘어 인접한 envp 영역을 침범합니다.GCONV_PATH)가 시스템 메모리에 성공적으로 덮어씌워지며 붉은색의 [FATAL] ENVIRONMENT CORRUPTION DETECTED! 경고가 출력됩니다.테스트가 끝난 후 컴파일된 바이너리 파일들을 삭제하려면 아래 명령어를 사용합니다.
rm -rf bin/