
Arnés de análisis y validación no armado de CVE-2016-5195 (Dirty COW) con investigación de causa raíz, revisión de parches upstream y PoC segura solo para laboratorio en kernels confirmados.
Investigación defensiva, validación no armamentizada y análisis de parche para CVE-2016-5195 (Dirty COW), una condición de carrera de copia en escritura (copy-on-write) del núcleo Linux que puede permitir que un usuario local modifique datos asociados a un mapeo de solo lectura y obtenga privilegios elevados.
| Campo | Valor |
|---|---|
| Componente | Gestión de memoria del núcleo Linux / get_user_pages() |
| Debilidad | CWE-362: Ejecución concurrente que utiliza un recurso compartido con sincronización inadecuada |
| Gravedad | Alta, CVSS 3.1: 7.0 |
| Vector | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Requisito del ataque | Acceso local con privilegios bajos |
| Corrección upstream | 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 |
| Primera versión upstream corregida | Linux 4.8.3; los backports de las distribuciones varían |
Dirty COW es una carrera en el manejo del núcleo Linux de las escrituras
forzadas y los mapeos de copia en escritura (COW). Un usuario local puede
competir la invalidación de páginas contra una escritura a través de
/proc/self/mem. En un núcleo afectado, la carrera puede hacer que los datos
asociados a un mapeo privado nominalmente de solo lectura se escriban de vuelta
al archivo subyacente.
El impacto público es la escalada local de privilegios cuando un atacante puede aplicar la primitiva a un archivo sensible para la seguridad. La vulnerabilidad se explotó activamente en octubre de 2016. Este repositorio no automatiza esa vía de escalada.
El marco predeterminado está restringido intencionadamente:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
poc.c -o dirtycow-safe -pthread
La primitiva de exploit exclusiva del laboratorio se puede compilar por separado:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
exploit.c -o dirtycow-exploit -pthread
./dirtycow-safe
Recuento de iteraciones opcional y acotado:
./dirtycow-safe --iterations 5000000
Resultados posibles:
marker-observed: se observó comportamiento vulnerable en el inodo desechable.marker-not-observed: no concluyente. Que una carrera no se active no
demuestra que el núcleo esté corregido.77: la interfaz Linux /proc/self/mem requerida no está disponible.No utilices el resultado del PoC como comprobación principal del estado del parche. Consulta el aviso de paquetes del núcleo de la distribución en ejecución y verifica que el núcleo parcheado esté activo tras reiniciar.
exploit.c acepta un archivo explícito y un prefijo de reemplazo,
y demuestra la primitiva de escritura de archivo arbitrario en un núcleo
afectado. Requiere la confirmación literal --i-understand, aplica límites
acotados de carga útil e iteraciones, y no construye una carga útil de escalada
de privilegios.
El archivo seleccionado puede modificarse permanentemente. Úsalo solo en un
laboratorio desechable y aislado que sea tuyo o para el que tengas autorización
expresa de pruebas. El análisis completo de la carrera y de la transición de
estado está en ROOT_CAUSE.md.
evidence/evidence.json registra las firmas de
código fuente observadas en las revisiones oficiales de Linux anteriores a la
corrección y corregidas, el resultado de compilación del PoC sin advertencias y
las propiedades de seguridad de la validación.
evidence/validation.log proporciona un resumen
conciso. La validación capturada no ejecutó la carrera.
Instala la actualización del núcleo proporcionada por el fabricante y reinicia con el núcleo parcheado. No determines la exposición solo por la cadena de versión upstream: los núcleos empresariales y de distribución suelen retroimplementar (backport) la corrección sin adoptar el número de versión upstream. Los contenedores usan el núcleo del host, por lo que la remediación debe cubrir el host.
Consulta PATCH_ANALYSIS.md para ver el cambio upstream
exacto y VULNERABILITY_REPORT.md para obtener
orientación sobre la validación.
Usa este material solo en sistemas que sean tuyos o que tengas autorización expresa para probar.
| Ruta | Propósito |
|---|
poc.c | Validación no armamentizada que usa solo un inodo temporal desenlazado |
exploit.c | Primitiva de escritura de archivo arbitrario para un laboratorio desechable autorizado |
ROOT_CAUSE.md | Análisis detallado de la transición de estado vulnerable y de la carrera |
VULNERABILITY_REPORT.md | Precondiciones, causa raíz, impacto y remediación |
PATCH_ANALYSIS.md | Análisis línea a línea de la corrección upstream FOLL_COW |
evidence/ | Salida de validación estructurada y notas de interpretación |