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-34446 — Prueba de concepto de exploit para CVE-2023-36664, una vulnerabilidad de inyección de comandos en Ghostscript. Incluye entorno de laboratorio Docker, análisis detallado de la evasión de validación de tuberías y guía de reproducción paso a paso. | Kitploit
Herramientas/GitHubGitHub/minsmiths/cve-2023-34446
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubminsmiths/cve-2023-34446

cve-2023-34446

Prueba de concepto de exploit para CVE-2023-36664, una vulnerabilidad de inyección de comandos en Ghostscript. Incluye entorno de laboratorio Docker, análisis detallado de la evasión de validación de tuberías y guía de reproducción paso a paso.

Ver Repositorio
19hace 2 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

CVE-2023-36664: Ghostscript Remote Code Execution

Resumen de la vulnerabilidad

ID de CVE: CVE-2023-36664
Producto: Ghostscript (< 10.01.2)
Tipo de vulnerabilidad: Remote Code Execution (RCE)

Resumen

Esta vulnerabilidad (CVE-2023-36664) es una vulnerabilidad de ejecución remota de código (RCE) que ocurre debido a que Ghostscript maneja inadecuadamente la validación de permisos de ruta para el dispositivo pipe (prefijo %pipe% o |).

Cuando el sistema analiza o procesa un archivo de documento (PS/EPS) manipulado maliciosamente por un atacante, se pueden ejecutar comandos arbitrarios del sistema sin autorización del usuario.

[Explicación de conceptos] Entendiendo Ghostscript y las tuberías (Pipe)

1. ¿Qué es Ghostscript?.

Función principal: Esencialmente, lee código de coordenadas gráficas basado en texto (por ejemplo, "dibuja una línea en la posición 100 200") y lo convierte en imágenes visibles en la pantalla del monitor o en archivos de imagen para imprimir.

2. ¿Qué es una tubería (Pipe)?

Una tubería es una función que conecta la salida de una aplicación a la entrada de otra, permitiendo que los programas se comuniquen entre sí. En la línea de comandos se representa con el símbolo |.

Ejemplo: cat /etc/hosts | grep localhost

  • Todos los datos de texto extraídos por el comando cat se pasan a través de la tubería (|) directamente como entrada del comando grep, filtrando solo las líneas que contienen "localhost".

Comprendiendo la vulnerabilidad

Causa raíz de la vulnerabilidad

Ghostscript, por defecto, cuando el modo seguro (-dSAFER) está activado, verifica estrictamente las rutas de archivo para evitar el acceso a archivos sensibles del sistema o la ejecución arbitraria de comandos externos.

Problema: Cuando un atacante introduce cuidadosamente un prefijo de dispositivo pipe (%pipe% o |) en lugar de un nombre de archivo normal, la lógica de validación de permisos interna de Ghostscript no reconoce correctamente este prefijo y lo trata como una "ruta segura" o "no sujeta a verificación", permitiendo que pase.

Resultado: El comando peligroso que debería haber sido filtrado evade el bucle de validación sin obstáculos.

Mecanismo de explotación de la vulnerabilidad

Inyección de archivo malicioso: El atacante inserta código dentro de un archivo PostScript (.ps/.eps) con una forma como (%pipe%comando_malicioso) (modo) file /DCTDecode filter.

Parseo y confusión: Al leer y procesar este archivo, Ghostscript pasa la etapa de validación de permisos (el guardián) sin errores.

Entrega al shell del sistema operativo: El flujo de comandos que pasó la validación es entregado directamente al shell interno del sistema operativo (como sh en Linux o cmd en Windows) a través de la funcionalidad del dispositivo pipe, y se ejecuta con los permisos del backend.

Analizando el código vulnerable

Al observar el código parcheado, se puede ver que se modificaron los siguientes dos archivos .c:

  1. base/gpmisc.c
  2. base/gslibctx.c

Aquí, analizando gpmisc.c se puede entender la vulnerabilidad.

png2

El núcleo de esta vulnerabilidad es que no se puede distinguir adecuadamente rutas especiales como %pipe% de rutas de archivo normales, y se reconocen erróneamente como rutas comunes.

Función de limpieza de ruta: gp_file_name_reduce

Para verificarlo, es necesario examinar la función que limpia las rutas de archivo. En gpmisc.c, la función encargada de limpiar rutas es gp_file_name_reduce(...), que internamente llama a gp_file_name_combine() y devuelve su resultado.

gp_file_name_reduce(const char *fname, uint flen, char *buffer, uint *blen) {
    return gp_file_name_combine(fname, flen, fname + flen, 0, false, buffer, blen);
}

gp_file_name_combine(), como su nombre indica, elimina expresiones de ruta relativas innecesarias como ./ o // de la ruta de archivo recibida.

El problema ocurre aquí. Si a esta función se le pasa una cadena especial que induce la ejecución de comandos, como %pipe%, en lugar de una ruta de archivo normal, la función no reconoce esto como un patrón de ruta válido y devuelve la cadena original sin ningún procesamiento.

Ausencia de lógica de validación: gp_validate_path_len

png1

gp_validate_path_len(...) es una función que internamente llama a gp_file_name_reduce() para validar la ruta. En este proceso, no existe una lógica de validación separada que distinga si el valor de entrada es una ruta de archivo normal o una sintaxis de ejecución de comandos como %pipe%.

Como resultado, las cadenas que contienen %pipe% pasan sin ningún filtro, y esta es la causa raíz de esta vulnerabilidad.

Por lo tanto, si se pasa una cadena como %pipe%touch /tmp/pwned como ruta de archivo, aunque el usuario solo pretendía renderizar un archivo de imagen, en realidad se ejecuta el comando touch /tmp/pwned, lo que resulta en la creación del archivo /tmp/pwned.

Arquitectura

┌─────────────────────────────────┐
│  Docker Container               │
│  (Ubuntu 22.04 + Ghostscript)   │
│                                 │
│  /home/test/               ← Directorio de trabajo
│  ├── poc.py               ← Script de generación de PoC
│  |                              |
│  └── /var/www/html/config.php   ← Archivo de información sensible
│                                 │
│  User: test (no root)           │
│  Ghostscript: 10.01.1 (vulnerable)│
└─────────────────────────────────┘

La razón por la que se eligió una cuenta normal en lugar de la cuenta root es que, en servidores de producción reales, generalmente no se utiliza directamente la cuenta root por razones de seguridad. Por lo tanto, para reproducir lo más fielmente posible la situación de un ataque a un servidor real, se configuró el entorno con una cuenta normal.

Configuración de Docker Compose

version: '3.8'

services:
  gs-lab:
    build: .
    container_name: cve_lab
    network_mode: "host"
    environment:
      - DISPLAY=${DISPLAY}
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix:ro
      - ./poc.py:/home/test/poc.py
    stdin_open: true
    tty: true

entorno

  • DISPLAY=${DISPLAY}: Pasa la variable de entorno al contenedor para que las aplicaciones GUI dentro del contenedor puedan acceder al servidor de visualización X11 del host.

volumes

  • /tmp/.X11-unix:/tmp/.X11-unix:ro: Monta el socket Unix para la comunicación entre el servidor de visualización X11 del host y el contenedor.

  • ./poc.py:/home/test/poc.py: Monta el script PoC local del host en el entorno de ejecución del contenedor.

Dockerfile

FROM ubuntu:22.04

RUN apt update && \
    apt install -y \
    wget \
    build-essential \
    gedit \
    python3 \
    sudo && \
    rm -rf /var/lib/apt/lists/*


RUN wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10011/ghostscript-10.01.1.tar.gz && \
    tar -xzf ghostscript-10.01.1.tar.gz

WORKDIR /ghostscript-10.01.1

RUN ./configure && \
    make && \
    make install

RUN mkdir -p /var/www/html && \
    echo "DB_PASSWORD=SuperSecret1234!!!" > /var/www/html/config.php

RUN useradd -m -s /bin/bash test

WORKDIR /home/test
USER test

CMD ["/bin/bash"]

Instalación básica de apt

Para configurar un entorno PoC básico, se necesita wget para obtener la versión vulnerable de Ghostscript, build-essential para instalar el código fuente después de descomprimir el tar.gz, y gedit (un bloc de notas) que se abrirá maliciosamente al ejecutar el .ps, entre otros.

Descargar herramienta