Despliegue de Dirty Pipe
Para este desafío, quieres sobrescribir el archivo de solo lectura "cat.txt" usando el exploit CVE-2022-0847
Hay muchas formas de hacerlo usando el exploit
Dependencias
- Kernel de Linux versión 5.8 o posterior (vulnerable)
- gcc (GNU Compiler Collection) para compilar el código del exploit
Configuración inicial
- Configurar un entorno vulnerable:
- Para usuarios de Linux:
- Usa una distribución de Linux con versión de kernel 5.8 o superior, pero inferior a las versiones parcheadas:
- Las versiones parcheadas incluyen 5.16.11, 5.15.25 y 5.10.102.
- Verifica la versión del kernel en tu sistema ejecutando:
uname -r
- Si tu kernel ya está parcheado, es posible que necesites degradar o usar una instalación de Linux diferente para cumplir con los criterios vulnerables.
- Para usuarios de Windows:
- Instalar una máquina virtual:
- Descarga e instala una máquina virtual como Oracle VM VirtualBox o VMware.
- Descargar una distribución de Linux vulnerable:
- Visita los Archivos de Kali Linux para descargar una versión anterior de Kali Linux.
- Las versiones sugeridas incluyen cualquier lanzamiento con un kernel 5.8 - 5.15 (por ejemplo, Kali 2021.1).
- Alternativamente, otras distribuciones de Linux con versiones de kernel compatibles funcionarán (por ejemplo, versiones anteriores de Ubuntu o Debian).
- Configurar la MV:
- Crea una nueva máquina virtual en VirtualBox:
- Asigna al menos 2 GB de RAM y 10 GB de espacio en disco.
- Usa el archivo ISO descargado para instalar la distribución de Linux.
- Después de la instalación, confirma la versión del kernel ejecutando:
uname -r
- Instalar herramientas necesarias:
- Después de configurar el entorno, asegúrate de que las siguientes herramientas estén instaladas:
- gcc: Necesario para compilar el código del exploit.
- make: Para compilar proyectos si es necesario.
- Actualiza tu gestor de paquetes e instala las herramientas:
sudo apt update
sudo apt install gcc make -y
Iniciando el desafío
- Iniciar:
¡Asegúrate de verificar la versión del kernel!
Usando este enlace de github(https://github.com/basharkey/CVE-2022-0847-dirty-pipe-checker.git)
Verifica que el archivo cat.txt es de solo lectura
Las limitaciones son:
el atacante debe tener permisos de lectura (porque necesita splice() una página en un pipe)
el desplazamiento no debe estar en un límite de página (porque al menos un byte de esa página debe haber sido empalmado en el pipe)
la escritura no puede cruzar un límite de página (porque se crearía un nuevo búfer anónimo para el resto)
el archivo no puede redimensionarse (porque el pipe tiene su propia gestión de llenado de páginas y no le dice al caché de páginas cuántos datos se han añadido)
- Implementar el exploit:
- Crear un pipe.
- Llenar el pipe con datos arbitrarios (para establecer el flag PIPE_BUF_FLAG_CAN_MERGE en todas las entradas del anillo).
- Vaciar el pipe (dejando el flag establecido en todas las instancias de struct pipe_buffer en el anillo struct pipe_inode_info).
- Empalmar datos del archivo destino (abierto con O_RDONLY) en el pipe justo antes del desplazamiento objetivo.
- Escribir datos arbitrarios en el pipe; estos datos sobrescribirán la página del archivo en caché en lugar de crear un nuevo struct pipe_buffer anónimo porque PIPE_BUF_FLAG_CAN_MERGE está establecido.
- Sobrescribir el
cat.txt, cambiar
I'm a cat
1444
a
I'm a dog
2025
- Usar check_cat.sh para comprobar si funciona o no
chmod +x check_cat.sh
./check_cat.sh
Regeneración del desafío
Usa lo siguiente
chmod +x cat_generate.sh
./cat_generate.sh
Publicación del desafío
Las pistas están en hints.txt