Fecha: 2026-09-19. Base: ZIP del módulo facilitado por el titular. Se extrajo en un área de trabajo separada y se construyó este árbol sin copiar ningún historial Git.
No se encontraron credenciales reales literales en el código aportado: las contraseñas se leían de los custom fields en ejecución. Sí se encontraron URLs de infraestructura hardcodeadas y un flujo que introducía credenciales de panel en HTML/JavaScript.
lib/VPSManager.php.try/catch vacíos cuyo logModuleCall habría registrado
$params, mensajes y trazas completos. No se conserva un logger de credenciales.CURLOPT_RETURNTRANSFER en las llamadas heredadas que volcaban respuestas
al navegador. No se expone el cuerpo de la API a HTML..gitignore excluye configuración, entornos, backups, logs, dumps y archivos comprimidos.gitleaks no estaba instalado. Se utilizó tools/audit.py, revisión manual de coincidencias
y comparación del módulo saneado con el original, además de inventario de archivos.
El análisis cubre:
password, passwd, secret, token, api_key, apikey, Authorization:, cookies y
marcadores BEGIN PRIVATE KEY / BEGIN RSA PRIVATE KEY..env, configuración privada, claves SSH, certificados privados, SQL, logs, backups,
swap, ZIP/tar y binarios no revisados.git init, sobre el índice y sobre los blobs de HEAD.Las coincidencias legítimas son nombres de opciones/variables, documentación de seguridad,
el token CSRF de WHMCS, patrones del propio escáner y sentinelas ficticios FAKE_ del test.
Las URLs user:pass@…example.invalid son fixtures negativos que deben rechazarse.
No se detectaron secretos reales en el árbol auditado. Esto describe los resultados de
las comprobaciones realizadas, no una garantía matemática del escáner.
php -n -l en todos los PHP, sin errores.php -n tests/run.php: 158 aserciones PASS, HTTP simulado, sin acceso a producción.node tests/frontend.cjs: 24 aserciones PASS.node --check assets/metrics.js: PASS.null.serviceid, no el id solicitado.No se ha accedido a una instalación WHMCS ni a un servicio VPS de producción. La regresión anterior prueba contratos mediante mocks, no efectos reales de provisioning. Quedan por verificar en staging la versión/plantilla instalada, autorización efectiva entre dos clientes, campos solo de administrador, CSRF del dispatcher y política CSP.
La vista completa Graphs conserva el botón, pero requiere configuración y confirmación de que su servicio externo autentica/autoriza; no se ha validado su seguridad real. El autologin ISPConfig se sustituye por login manual. SSO seguro y licencia global siguen pendientes. Los avisos de copyright y licencia de componentes ajenos se conservan.
No se ha modificado la semántica heredada de éxito/error de suspensión/reactivación. La API heredada puede anunciar éxito sin comprobar HTTP; la mejora de ese contrato queda fuera de esta intervención para evitar una reescritura del provisioning.