Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
DirtyPipe-Exploit — Prueba de concepto para CVE-2022-0847 | Kitploit
Herramientas/GitHubGitHub/karanlvm/dirtypipe-exploit
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubkaranlvm/dirtypipe-exploit

DirtyPipe-Exploit

Prueba de concepto para CVE-2022-0847

Ver Repositorio
21hace 10 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CSE 5380: Trabajo de Seguridad de la Información CVE-2022-0847 (Dirty Pipe)

Por

Karan Vasudevamurthy (UTA ID: 1002164438)

¿Qué es CVE?

Common Vulnerabilities and Exposures (CVE) es una lista de vulnerabilidades y exposiciones de seguridad de la información divulgadas públicamente. La corporación MITRE introdujo CVE en 1999 para identificar y clasificar las vulnerabilidades en software y firmware. MITRE es una organización sin fines de lucro que opera centros de investigación y desarrollo financiados por el gobierno federal de los Estados Unidos. CVE tiene como objetivo facilitar el intercambio de información sobre vulnerabilidades conocidas para que los planes de ciberseguridad puedan actualizarse para reflejar los problemas y debilidades de seguridad más recientes. Para ello, CVE asigna un identificador único a cada vulnerabilidad o exposición. A través de los identificadores CVE, también conocidos como nombres CVE o números CVE. El Sistema de Puntuación de Vulnerabilidades Comunes (CVSS) es un conjunto de estándares abiertos para asignar un número a una vulnerabilidad y evaluar su gravedad. El rango de una puntuación CVSS es de 0.0 a 10.0. El grado de severidad de seguridad aumenta a medida que el número es mayor. Cada ID de CVE tiene el formato CVE-AAAA-NNNNN. La parte AAAA es el año en que se asignó el ID de CVE o el año en que la vulnerabilidad se hizo pública.

¿Qué son los pipes?

En el contexto de CVE-2022-0847, es crucial comprender el funcionamiento interno de los pipes, particularmente los atributos asociados con el búfer del pipe. Los pipes en Linux ayudan a transferir datos entre procesos, donde la salida de un proceso se convierte en la entrada de otro. Este mecanismo facilita la comunicación y coordinación entre diferentes procesos que se ejecutan en el sistema. Los pipes son unidireccionales en Linux, lo que significa que los datos fluyen en una sola dirección. Un búfer de pipe generalmente consiste en una estructura de datos de tamaño fijo, primero en entrar, primero en salir (FIFO) que almacena temporalmente los datos que se transfieren entre procesos. Cuando un proceso escribe datos en un pipe, se almacenan en el búfer hasta que otro proceso los lee. Una vez que los datos se leen, se eliminan del búfer, lo que permite escribir nuevos datos.

La vulnerabilidad

Para CVE-2022-0847, es importante comprender dos funciones dentro del búfer del pipe:

  1. copy_page_to_iter_pipe: Esta función se encarga de copiar datos de una página a un iterador asociado con un búfer de pipe. En el contexto de la comunicación entre procesos a través de pipes, cuando un proceso escribe datos en un pipe, deben copiarse al búfer del pipe para que otro proceso pueda leerlos. La función "copy_page_to_iter_pipe" facilita este proceso de copia, asegurando que los datos se transfieran correcta y eficientemente entre procesos. Dentro de esta función, el parámetro "flags" se utiliza para especificar o controlar ciertos atributos o comportamientos relacionados con el proceso de copia. Estas banderas pueden incluir opciones como si se deben realizar comprobaciones o validaciones adicionales, cómo manejar tipos específicos de datos, o si se deben aplicar optimizaciones para mayor eficiencia.
  2. push_pipe: La función "push_pipe" está involucrada en la inserción de datos en el búfer del pipe. Cuando un proceso escribe datos en un pipe, los datos deben insertarse en el búfer del pipe, donde luego pueden ser leídos por otro proceso. La función "push_pipe" se encarga de manejar este proceso de inserción, asegurando que los datos se coloquen correctamente en el búfer y estén disponibles para su lectura por otros procesos.

Página | 1

Max Kellermann descubrió que el kernel de Linux manejaba incorrectamente los pipes de Unix. La vulnerabilidad surge debido a una inicialización inadecuada de ciertos atributos, específicamente el parámetro "flags", dentro de las funciones "copy_page_to_iter_pipe" y "push_pipe". Este descuido conduce a la posibilidad de que se asignen valores obsoletos o incorrectos a las banderas, lo que potencialmente compromete la seguridad e integridad del sistema. Un usuario local sin privilegios podría usar este fallo para escribir en páginas de la caché de páginas respaldadas por archivos de solo lectura y, como tal, escalar sus privilegios en el sistema.

Metodología de ataque

Es similar a CVE-2016-5195 "Dirty Cow", pero es más fácil de explotar. La explotación de CVE-2022-0847 requiere acceso local al sistema objetivo y afecta a versiones del kernel de Linux posteriores a 5.8. Podemos crear nuevos búferes de pipe con la bandera PIPE_BUF_FLAG_CAN_MERGE configurada incorrectamente debido a la falta de una inicialización adecuada. Esta bandera controla la coalescencia de escrituras en un búfer de pipe y, por lo tanto, permite escribir en una página existente que se ha insertado en el pipe. Si un archivo permite esta página insertada, la modificación se verá en la vista compartida de todo el sistema del archivo en la memoria. Cualquier vaciado de caché posterior ignorará la configuración actual de permisos de Linux y copiará los datos alterados al disco. Esto permitiría a un usuario sin privilegios cambiar contenidos específicos de un archivo (ya sea en disco o en memoria), incluso si el archivo está protegido contra modificaciones por controles de acceso de solo lectura como SELinux, permisos estándar de Linux, control de acceso avanzado y archivos inmutables. Por lo tanto, podemos asumir que el atacante sería cualquier usuario local sin privilegios con conocimientos básicos de sistemas Linux y la capacidad de ejecutar código malicioso. Tal individuo podría escalar sus privilegios y potencialmente comprometer todo el sistema, lo que representa un riesgo de seguridad significativo.

Prueba de concepto

A continuación se muestran los pasos que seguí para explotar CVE-2022-0847 en una máquina virtual que ejecuta Linux.

  1. Comprobar si su distribución de Linux puede ser explotada:

    Cualquier kernel de Linux posterior a 5.8 está afectado. Sin embargo, las versiones 5.16.11, 5.15.25 y 5.10.102 no pueden ser explotadas para CVE-2022-0847. Para encontrar su versión del kernel, podemos ejecutar simplemente *uname -r*. También puede ejecutar este script bash si no está seguro de si un sistema objetivo es vulnerable o no.

  2. Descargar el kernel de Linux correcto:

    Para la demostración decidí usar Ubuntu 20.04.1 LTS. Pero esta versión de Ubuntu actualmente se ejecuta en el kernel de Linux 5.15 y CVE-2022-0847 no puede ser explotado en esta versión del kernel. Para descargar el kernel de Linux 5.8, podemos ejecutar simplemente *sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic*

  3. Descargar el exploit:

    El exploit se puede encontrar en GitHub. Demuestra cómo sobrescribir cualquier contenido de archivo en la caché de páginas, incluso si el archivo no está permitido para escritura, es inmutable o está en un montaje de solo lectura. También podría ejecutar *git clone[ https://github.com/karanlvm/Infosec.git* ](https://github.com/karanlvm/Infosec.git%60)en la terminal.

  4. Copiar el archivo passwd original:

    Podemos ejecutar *cp /etc/passwd /tmp/passwd.bak*. Esto nos ayudará a identificar la diferencia en el archivo passwd antes y después de ejecutar el exploit.

  5. Compilar el exploit:

    Para compilar el exploit correctamente, necesitará tener GCC instalado. Puede instalar GCC con *sudo apt-get install gcc*. Para compilar el exploit puede ejecutar

Limitaciones

Hay dos limitaciones principales de este exploit:

  1. El desplazamiento no puede estar en un límite de página (necesita escribir al menos un byte antes del desplazamiento)
  2. La escritura no puede cruzar un límite de página. Esto significa que la carga útil debe ser menor que 4096 bytes (tamaño de página).

Estado actual y remediación

A partir del 2024-01-12, la probabilidad de actividad de explotación en los próximos 30 días es del 7.58% (Sistema de puntuación de predicción de explotación, EPSS). A continuación se muestra el CVSS (Sistema de Puntuación de Vulnerabilidades Comunes) para CVE-2022-0487:

Esta vulnerabilidad puede ser explotada en cualquier kernel de Linux posterior a 5.8. Sin embargo, la vulnerabilidad ha sido solucionada en Linux 5.16.11, 5.15.25 y 5.10.102. Por lo tanto, podemos simplemente aplicar los parches o actualizaciones proporcionadas por los mantenedores de la distribución de Linux para solucionar la vulnerabilidad. Para hacer esto, podemos ejecutar los siguientes comandos *sudo apt update* y *sudo apt upgrade*.

Referencias

  1. “2022-0847: Se encontró un fallo en la forma en que el miembro 'Flags' de la nueva estructura del búfer de pipe carecía de una inicialización adecuada en Cop.” CVE Details, www.cvedetails.com/cve/CVE-2022-0847/. Consultado el 24 de abril de 2024.
  2. Kellermann, Max. “La vulnerabilidad Dirty Pipe.” La vulnerabilidad Dirty Pipe - Documentación de la vulnerabilidad Dirty Pipe, 7 de marzo de 2022, dirtypipe.cm4all.com/.
  3. MITRE Corporation*. “CVE-2022-0847.”* CVE, 3 de marzo de 2022, cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0847.
  4. National Institute of Standards and Technology. “CVE-2022-0847.” NVD, 3 de octubre de 2022, nvd.nist.gov/vuln/detail/cve-2022-0847.
  5. “Piping en Unix o Linux.” GeeksforGeeks, GeeksforGeeks, 5 de julio de 2023, www.geeksforgeeks.org/piping-in-unix-or-linux/. Página | 5
Descargar herramienta
*gcc exp.c -o exp*
  • Ejecutar el exploit:

    Para ejecutar el exploit, los parámetros que deben proporcionarse son el archivo de solo lectura, el desplazamiento y algunos caracteres que se van a insertar. En este caso, ejecutaremos *./exp /etc/passwd 1 ootz:* . Si obtiene una salida que dice “It worked !”, significa que hemos explotado con éxito la vulnerabilidad Dirty Pipe y ahora podemos obtener acceso root sin la contraseña.

  • Cambiar al acceso root:

    Ahora podemos ejecutar simplemente *su rootz* y deberíamos tener acceso root. Para confirmar podemos ejecutar el comando id.