PrusaSlicer post_process (CVE-2023-47268)
PrusaSlicer es un slicer de código abierto: convierte un modelo 3D en G-code para una impresora. CVE-2023-47268 es una inyección de comandos a través de la directiva de configuración post_process. PrusaSlicer permite definir scripts de post-procesado que se ejecutan automáticamente después del slicing; si esa directiva contiene un comando del sistema, PrusaSlicer lo ejecuta sin restricción. Afecta a versiones hasta la 2.6.1 incluida.
Dónde vive el comando. Los proyectos 3MF (3D Manufacturing Format, un ZIP con el modelo y su configuración) llevan dentro un fichero Metadata/Slic3r_PE.config. Ese fichero tiene una línea post_process = .... Como el .3mf lo aporta el atacante, la línea post_process también: al abrir (o procesar con -s) ese proyecto, el comando se ejecuta.
Por qué importa el contexto de ejecución. El comando hereda los privilegios con los que se lanza PrusaSlicer. El vector clásico es un sudo mal configurado: si un usuario puede ejecutar PrusaSlicer como root sin contraseña, el post_process corre como root. Por eso el primer paso es comprobar el sudo -l:
sudo -l
# (ALL) NOPASSWD: /opt/PrusaSlicer/prusaslicerExplotación práctica. Se crea un .3mf (con la propia interfaz de PrusaSlicer en cualquier equipo) y, dentro de su Slic3r_PE.config, se pone un post_process que prepare la escalada, por ejemplo hacer SUID una copia de bash o el propio /bin/bash. Luego se procesa el proyecto como root y se invoca la shell privilegiada:
sudo /opt/PrusaSlicer/prusaslicer -s poc.3mf # el slicing dispara post_process como root
/bin/bash -p # shell con privilegios efectivos de rootSi el slicing falla por el formato del nombre de salida, basta ajustar la línea output_filename_format del Slic3r_PE.config para que el procesado complete y el post_process se ejecute. Es un caso concreto de inyección de comandos combinado con abuso de SUID o de un sudo permisivo.
Cómo detectarlo. El uso queda en /var/log/auth.log como un sudo ... prusaslicer sobre un .3mf, y auditd capta el patrón revelador: prusaslicer lanzando sh/chmod u+s//bin/bash como hijo, algo que un slicer jamás hace. En disco, un .3mf (que es un ZIP) cuyo Metadata/Slic3r_PE.config contiene una línea post_process = con un comando de sistema es la firma; y un binario que gana el bit SUID justo después (comparar contra la base line de find / -perm -4000) confirma la escalada.
Defensa. Actualizar PrusaSlicer a una versión posterior a 2.6.1. No conceder sudo NOPASSWD sobre binarios que procesan ficheros aportados por el usuario: cualquier formato con scripting embebido (como post_process) se convierte en ejecución de comandos con los privilegios del proceso.
Máquinas donde se aplica
- TricksterHackTheBox