
Sistema simulado seguro y controlado que simula CVE-2021-4034 (PwnKit) con lectura/escritura fuera de límites, inyección de variables de entorno y detección de defensas del kernel para práctica educativa de explotación.
Este proyecto es un sistema simulado que reproduce el principio de funcionamiento central de la vulnerabilidad CVE-2021-4034 (Out-of-Bounds Read/Write) ocurrida en el demonio pkexec de Linux. Sin una elevación real de privilegios SUID, simula de forma segura, dentro de un entorno controlado, el mecanismo de invasión del área de memoria de las variables de entorno y de inyección de carga maliciosa (Injection).
En particular, este sistema simulado está diseñado para detectar el mecanismo de defensa execve del kernel de Linux más reciente (el fenómeno de insertar forzosamente una cadena vacía al pasar un array vacío, haciendo que argc=1) y corregir el desplazamiento (offset) para imitar con éxito el antiguo entorno de memoria vulnerable.
cve-2021-4034-mock/
├── README.md # 프로젝트 설명 및 실행 가이드
├── src/
│ ├── mock_pkexec.c # 인자값(argc) 검증이 누락된 타겟 데몬 소스
│ └── exploit.c # execve를 통해 공격 페이로드를 전달하는 공격자 소스
└── bin/ # 컴파일된 실행 파일 저장 경로 (빌드 시 생성됨)
Desde el terminal, muévete al directorio raíz del proyecto e introduce los siguientes comandos uno a uno, en orden, para compilar el código fuente.
# 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
Si la compilación se realiza correctamente, se crearán los archivos ejecutables mock_pkexec y exploit dentro de la carpeta bin/.
Al ejecutarlo pasando los argumentos de forma normal, se demuestra que, debido a la lógica de defensa, se falla la verificación de privilegios o el programa termina de forma segura.
./bin/mock_pkexec test_argument
[OK].Ejecute el script de ataque para forzar el envío de una carga útil argc=0 (array NULL) y activar la vulnerabilidad.
./bin/exploit
argc a 1 y corrige dinámicamente el índice de referencia de memoria.envp más allá de los límites del array argv.GCONV_PATH) se sobrescribe exitosamente en la memoria del sistema y se muestra la advertencia en rojo [FATAL] ENVIRONMENT CORRUPTION DETECTED!.Para eliminar los archivos binarios compilados después de terminar las pruebas, use el siguiente comando.
rm -rf bin/