Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-59712_CVE-2025-59713 — Snipe-IT PoC exploit for CVE-2025-59712 and CVE-2025-59713 | Kitploit
Tools/GitHubGitHub/synacktiv/cve-2025-59712_cve-2025-59713
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubsynacktiv/cve-2025-59712_cve-2025-59713

CVE-2025-59712_CVE-2025-59713

Snipe-IT PoC exploit for CVE-2025-59712 and CVE-2025-59713

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
23vor 10 MonatenNoch nicht geprüft

PoC für CVE-2025-59712 und CVE-2025-59713

Dieses PoC stellt ein automatisiertes Skript zur Verfügung, um CVE-2025-59712 (XSS im User-Agent-Header) und CVE-2025-59713 (unsichere Deserialisierung) auszunutzen.

Kontext

Diese beiden Sicherheitslücken wurden von Synacktiv im Rahmen einer Sicherheitsforschung an der Snipe-IT-Software entdeckt. Snipe-IT ist ein Open-Source-Asset-Management-System, das auf Laravel basiert und Organisationen dabei helfen soll, ihre physischen und digitalen Assets zu verfolgen und zu verwalten.

Eine technische Beschreibung findet sich im entsprechenden Security Advisory auf der Synacktiv-Website.

Modi

Dieses Skript bietet drei Unterbefehle, die den Ausnutzungsmodi entsprechen: xss, rce und fullchain.

XSS

Dieser Unterbefehl nutzt CVE-2025-59712 aus, der es einem Benutzer mit niedrigen Berechtigungen erlaubt, beliebiges JavaScript in die HTML-Seite einzuschleusen, die beim Aufruf der Route /reports/activity gerendert wird. Dies kann nur von einem Administrator oder einem Benutzer mit expliziten Ansichtsberechtigungen für Berichte durchgeführt werden. Die Injektion ist aufgrund einer unzureichenden Bereinigung des User-Agent-Feldes möglich, wenn ein Benutzer seine Profilinformationen aktualisiert.

Dazu wird es sich zunächst als Benutzer mit niedrigen Berechtigungen anmelden und dann den JavaScript-Code injizieren, der in der über das --javascript-Flag angegebenen Datei definiert ist.

root@kitploit:~
$ python3 exploit.py xss --help

 Usage: exploit.py xss [OPTIONS]

 Execute XSS attack only with custom JavaScript payload

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged username [required]                                                                                                         │
│ *  --password    -p       TEXT                    Low-privileged password [required]                                                                                                         │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│ *  --javascript  -js      TEXT                    Path to custom JavaScript file [required]                                                                                                  │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

[!IMPORTANT]
Während der Sicherheitsforschung wurden Tests mit einer Version von Snipe-IT durchgeführt, die standardmäßig das User-Agent-Feld anzeigte, in das das schädliche JavaScript injiziert wird. Seit dem Commit 10e5d88 wird die User-Agent-Eigenschaft standardmäßig nicht mehr angezeigt, wenn die Aktionsprotokolltabelle gerendert wird. Der Administrator, der die XSS auslöst, muss daher in den Ansichtsoptionen für Snipe-IT-Versionen nach diesem Commit das Kontrollkästchen User-Agent aktiviert haben.

RCE

Dieser Unterbefehl nutzt CVE-2025-59713 aus, der eine Remote-Code-Ausführung ermöglicht, wenn die Anmeldedaten eines Administrators oder Superadministrators bekannt sind. Dazu werden die folgenden Schritte ausgeführt:

  1. Ein Backup der Snipe-IT-Instanz wird ausgelöst.
  2. Das erstellte Backup wird heruntergeladen, im Arbeitsspeicher bearbeitet und wieder auf Snipe-IT hochgeladen. Die Bearbeitung des Backups umfasst zusätzliche SQL-Anweisungen in der Datei db-dumps/mysql-snipeit.sql, die ein neues benutzerdefiniertes Feld erstellen und das letzte Aktionsprotokoll mit einem JSON-Objekt bearbeiten, das bei der Wiederherstellung die Laravel-Pop-Kette enthält.

[!TIP] Standardmäßig enthält Snipe-IT die .env-Datei im Backup. Wenn das Skript sie erkennt, wird der APP_KEY-Wert angezeigt und die .env-Datei im Verzeichnis ./output gespeichert (ein benutzerdefinierter Speicherort für diese Datei kann mit --output-dir angegeben werden).

  1. Eine Wiederherstellung aus dem bearbeiteten Backup wird ausgelöst, die die hinzugefügten SQL-Anweisungen ausführt.

[!CAUTION] Das Wiederherstellen eines Backups trennt alle mit der Instanz verbundenen Benutzer.

  1. Sobald die Wiederherstellung abgeschlossen ist, wird die Route /api/v1/reports/activity aufgerufen, was die Deserialisierung auslöst und die Laravel-Pop-Kette ausführt.
root@kitploit:~
$ python3 exploit.py rce --help

 Usage: exploit.py rce [OPTIONS]

 Execute RCE attack only (requires existing admin account)

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --admin-user  -au      TEXT                    Admin username [required]                                                                                                                  │
│ *  --admin-pass  -ap      TEXT                    Admin password [required]                                                                                                                  │
│    --output-dir  -od      PATH                    Output dir for .env file [default: /home/ninja/Téléchargements/snipe-it-advisory/exploit/output]                                           │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Fullchain

Der Unterbefehl fullchain zielt darauf ab, beide Sicherheitslücken (XSS und RCE) miteinander zu verketten. Er entspricht einem Szenario, in dem Sie nur Zugriff auf einen Benutzer mit niedrigen Berechtigungen haben und eine Remote-Code-Ausführung erreichen möchten. Dies funktioniert nur, wenn der Benutzer, der die Seite /reports/activity besucht, ein Administrator oder Superadministrator ist. Tatsächlich haben nur diese Rollen die Rechte, ein Backup zu erstellen und wiederherzustellen, was notwendig ist, um die Datenbank zu vergiften und später die Laravel-Pop-Kette auszulösen.

Dazu wird das Skript:

  1. Erstellen einer JavaScript-Vorlage mit einer Laravel-Pop-Kette, die standardmäßig eine Bash-Reverse-Shell ausführt (Sie können diese Option mit dem --command-Flag anpassen, wie beim RCE-Modus).
  2. Anmelden als Benutzer mit niedrigen Berechtigungen und Injizieren des User-Agent-Feldes mit einem <scr>-Tag, um den Browser des Opfers zu zwingen, die schädliche JavaScript-Vorlage zu laden.
  3. Starten eines betrügerischen HTTP-Servers, um die oben genannte Vorlage sowie ihre Abhängigkeiten zu verteilen.
  4. Wenn ein Administrator oder Superadministrator die Route /reports/activity besucht, wird die XSS ausgelöst und das schädliche JavaScript wird geladen und vom Browser des Opfers ausgeführt. Ab diesem Zeitpunkt werden die gleichen Schritte wie im RCE-Modul ausgeführt, jedoch in JavaScript.
  5. Wenn das Backup wiederhergestellt ist, sendet der Browser des Opfers eine GET-Anfrage (Callback) an den Python-HTTP-Server, um zu melden, dass das Backup wiederhergestellt ist und die API-Route zum Auslösen der RCE aufgerufen werden kann.

Dieser Modus verwendet mehrere zusätzliche JavaScript-Bibliotheken, alle Credits gehen an ihre jeweiligen Autoren:

  • crypto-js.js: Wird für kryptografische Operationen verwendet, der Originalcode ist hier zu finden.
  • jszip.js und jszip-utils.js: Werden für die In-Memory-Bearbeitung von ZIP-Dateien verwendet. Die offiziellen Repos sind hier bzw. hier zu finden.
root@kitploit:~
$ python3 exploit.py fullchain --help

 Usage: exploit.py fullchain [OPTIONS]

 Execute full attack chain: XSS -> Backup manipulation -> RCE

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged user's username [required]                                                                                                  │
│ *  --password    -p       TEXT                    Low-privileged user's password [required]                                                                                                  │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│    --ip          -i       TEXT                    HTTP server IP address (default: auto-detect)                                                                                              │
│ *  --port        -P       INTEGER                 HTTP server port [required]                                                                                                                │
│    --admin-user  -au      TEXT                    Admin username to create [default: admin_rce]                                                                                              │
│    --admin-pass  -ap      TEXT                    Admin password to create [default: password123]                                                                                            │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Installation

Um dieses Skript auszuführen, führen Sie die folgenden Befehle aus:

root@kitploit:~
$ git clone https://github.com/synacktiv/CVE-2025-59712_CVE-2025-59713
$ cd CVE-2025-59712_CVE-2025-59713
$ python3 -m venv .venv && source .venv/bin/activate
$ python3 -m pip install -r requirements.txt

Dockerfile für die Testumgebung

Es wird ebenfalls ein Dockerfile bereitgestellt, um das Skript auszuprobieren und die Ausnutzung der Sicherheitslücke nachzustellen. Es lädt eine anfällige Version von Snipe-IT, konfiguriert die Datenbank mit php artisan und richtet zwei Benutzer ein:

  1. Benutzer admin mit dem Standardpasswort AdminPassword123!
  2. Benutzer lowpriv mit dem Standardpasswort LowPrivUser123!

Vor dem Ausführen des Containers müssen die Dateien .env und snipe-it.conf mit der URL der Snipe-IT-Instanz aktualisiert werden:

root@kitploit:~
$ sed -i 's|^APP_URL=.*|APP_URL=http://<IP>:<PORT>|' .env
$ sed -i 's|\(ServerName\s*\).*|\1http://<IP>:<PORT>|' snipe-it.conf

Der Container kann dann wie folgt ausgeführt werden:

root@kitploit:~
$ docker build . -t "snipe-it-cve"
$ docker run -p 80:80 --name "snipe-it-debian" snipe-it-cve:latest
Tool herunterladen