SynthèseSummaryResumen
L'outil manipule des données sensibles d'inventaire certificat (clés, chaînes, mots de passe de keystores). Le périmètre de cet audit couvre la protection contre l'injection dans les rapports HTML, la gestion des secrets, la robustesse face aux outils externes (keytool/runmqakm) et la surface exposée par le mode distant SSH/SFTP.
The tool handles sensitive certificate inventory data (keys, chains, keystore passwords). This audit's scope covers protection against HTML report injection, secrets handling, robustness against external tools (keytool/runmqakm), and the surface exposed by remote SSH/SFTP mode.
La herramienta maneja datos sensibles de inventario de certificados (claves, cadenas, contraseñas de almacenes). El alcance de esta auditoría cubre la protección contra inyección en los informes HTML, la gestión de secretos, la robustez frente a herramientas externas (keytool/runmqakm) y la superficie expuesta por el modo remoto SSH/SFTP.
Contrôles de sécurité en placeSecurity controls in placeControles de seguridad vigentes
| Contrôle | Détail |
| Échappement HTML systématique | Toute valeur d'origine certificat (CN, SAN, subject, issuer) affichée dans les rapports HTML passe par un échappement explicite avant insertion — 28 points d'échappement identifiés dans le générateur de rapport. |
| Masquage des mots de passe | Les mots de passe sont affichés en **** dans la console et dans les commandes générées. |
| Validation du fichier de personnalisation couleurs | Le fichier optionnel de personnalisation couleurs est contrôlé avant exécution. |
| Licence Enterprise vérifiée | properties/licence.key est vérifié — pas de simple flag de confiance. |
| Codes de sortie standardisés | 6 codes normalisés (0 succès, 1 erreur utilisateur, 2 licence, 3 parsing, 127 outil manquant, 130 SIGINT) — permettent une intégration fiable en pipeline/cron sans ambiguïté sur la cause d'échec. |
| Plancher RSA non contournable | MIN_RSA_KEY_SIZE est configurable à la hausse via constantes_V1R1M1.properties mais toute valeur sous 2048 bits est rejetée avec warning et ignorée. |
| Authentification SSH par clé recommandée | Le mode distant privilégie --remote-key ; --remote-pass reste disponible mais documenté comme solution de repli. |
| Clés d'hôte SSH inconnues rejetées par défaut | Une première connexion vers un hôte non répertorié échoue sans l'option explicite --trust-new-host — pas d'acceptation automatique silencieuse. |
| Fichiers d'état trial protégés | Stockage redondant et vérifié — détail dans le bilan de protection. |
| Control | Detail |
| Systematic HTML escaping | Every certificate-derived value (CN, SAN, subject, issuer) shown in HTML reports goes through explicit escaping before insertion — 28 escaping points identified in the report generator. |
| Password masking | Passwords are shown as **** in console output and generated commands. |
| Colour customisation file validation | The optional colour customisation file is checked before execution. |
| Verified Enterprise licence | properties/licence.key is verified — not a simple trust flag. |
| Standardised exit codes | 6 normalised codes (0 success, 1 user error, 2 licence, 3 parsing, 127 missing tool, 130 SIGINT) — enable reliable pipeline/cron integration with unambiguous failure causes. |
| Non-bypassable RSA floor | MIN_RSA_KEY_SIZE can be raised via constantes_V1R1M1.properties, but any value below 2048 bits is rejected with a warning and ignored. |
| Key-based SSH authentication recommended | Remote mode favours --remote-key; --remote-pass remains available but is documented as a fallback. |
| Unknown SSH host keys rejected by default | A first connection to an unlisted host fails without the explicit --trust-new-host option — no silent auto-acceptance. |
| Protected trial state files | Redundant, verified storage — full detail in the protection overview. |
| Control | Detalle |
| Escapado HTML sistemático | Todo valor derivado del certificado (CN, SAN, subject, issuer) mostrado en los informes HTML pasa por un escapado explícito antes de insertarse — 28 puntos de escapado identificados en el generador de informes. |
| Enmascaramiento de contraseñas | Las contraseñas se muestran como **** en la consola y en los comandos generados. |
| Validación del fichero de personalización de colores | El fichero opcional de personalización de colores se verifica antes de ejecutarse. |
| Licencia Enterprise verificada | properties/licence.key se verifica — no es un simple flag de confianza. |
| Códigos de salida estandarizados | 6 códigos normalizados (0 éxito, 1 error de usuario, 2 licencia, 3 parseo, 127 herramienta ausente, 130 SIGINT) — permiten una integración fiable en pipeline/cron sin ambigüedad sobre la causa del fallo. |
| Límite RSA no evitable | MIN_RSA_KEY_SIZE puede aumentarse vía constantes_V1R1M1.properties, pero cualquier valor por debajo de 2048 bits se rechaza con un warning y se ignora. |
| Autenticación SSH por clave recomendada | El modo remoto favorece --remote-key; --remote-pass sigue disponible pero está documentado como alternativa. |
| Claves de host SSH desconocidas rechazadas por defecto | Una primera conexión a un host no registrado falla sin la opción explícita --trust-new-host — sin aceptación automática silenciosa. |
| Ficheros de estado trial protegidos | Almacenamiento redundante y verificado — detalle completo en el balance de protección. |
Dossier d'exploitationOperations folderCarpeta de explotación
Utiliser un dossier d'exploitation dédié avec accès restreint. Séparer les fichiers d'entrée, les rapports, les fichiers temporaires et les logs. La racine des rapports générés correspond au dossier défini par W_FLD_TARGET_ANA_CER / U_FLD_TARGET_ANA_CER dans les properties.
Use a dedicated operations folder with restricted access. Keep input files, reports, temporary files and logs separated. The generated-reports root matches the folder defined by W_FLD_TARGET_ANA_CER / U_FLD_TARGET_ANA_CER in the properties.
Usar una carpeta de explotación dedicada con acceso restringido. Separar los ficheros de entrada, los informes, los ficheros temporales y los logs. La raíz de los informes generados corresponde a la carpeta definida por W_FLD_TARGET_ANA_CER / U_FLD_TARGET_ANA_CER en las properties.
| Zone | Recommandation | Confidentialité / sécurité |
bin/ | Script ou binaire compilé. | Lecture/exécution pour les opérateurs ; écriture réservée aux administrateurs. |
properties/ | Fichiers de configuration contrôlés. | Modification restreinte et changements tracés. |
input/ | Certificats, CSR et keystores à analyser. | Éviter les clés privées ou secrets non nécessaires. |
reports/ | Exports HTML/JSON et résumés. | À traiter comme documents internes sensibles. |
tmp/ | Fichiers intermédiaires d'extraction. | Nettoyage automatique ou purge planifiée. |
logs/ | Traces d'exécution si activées. | Aucun mot de passe, passphrase, clé privée ou token. |
| Area | Recommendation | Confidentiality / security |
bin/ | Script or compiled binary. | Read/execute for operators; write access for administrators only. |
properties/ | Controlled configuration files. | Restricted modification and change tracking. |
input/ | Certificates, CSR and keystores to analyse. | Avoid unnecessary private keys or secrets. |
reports/ | HTML/JSON outputs and summaries. | Treat as internal sensitive documents. |
tmp/ | Intermediate extraction files. | Automatic cleanup or scheduled purge. |
logs/ | Execution traces if enabled. | No passwords, passphrases, private keys or tokens. |
| Zona | Recomendación | Confidencialidad / seguridad |
bin/ | Script o binario compilado. | Lectura/ejecución para operadores; escritura reservada a administradores. |
properties/ | Ficheros de configuración controlados. | Modificación restringida y cambios trazados. |
input/ | Certificados, CSR y almacenes a analizar. | Evitar claves privadas o secretos innecesarios. |
reports/ | Exportaciones HTML/JSON y resúmenes. | Tratar como documentos internos sensibles. |
tmp/ | Ficheros intermedios de extracción. | Limpieza automática o purga planificada. |
logs/ | Trazas de ejecución si están activadas. | Sin contraseñas, passphrases, claves privadas ni tokens. |
Surface d'attaqueAttack surfaceSuperficie de ataque
| Surface | Risque | Contrôle en place |
| Certificats importés | Des valeurs non fiables (CN, SAN forgés) peuvent contenir des caractères spéciaux ou du HTML. | Échappement systématique avant tout affichage HTML ; contenu jamais exécuté. |
| Keystores protégés | Des mots de passe peuvent être fournis aux outils externes (keytool, runmqakm). | Masquage console **** ; pas de log brut du mot de passe. |
| constantes_V1R1M1.properties | Une configuration sensible (chemins, seuils) peut être présente en clair. | Fichier de configuration non secret par nature (aucun identifiant/mot de passe applicatif) ; accès restreint recommandé au niveau OS. |
| Outils externes | Le comportement Java/MQ peut varier selon la version (ex. JDK 25 et le flag -cacerts). | Timeouts, erreurs bloquantes normalisées et capture stderr/stdout. |
| Remote SFTP | Risque si une nouvelle clé hôte est acceptée sans contrôle. | --trust-new-host explicite requis ; sinon usage de known_hosts pré-alimenté (onboarding contrôlé). |
| Surface | Risk | Control in place |
| Imported certificates | Untrusted values (forged CN, SAN) can contain special characters or HTML. | Systematic escaping before any HTML display; content never executed. |
| Protected keystores | Passwords may be supplied to external tools (keytool, runmqakm). | Console masking ****; no raw password logging. |
| constantes_V1R1M1.properties | Sensitive configuration (paths, thresholds) may be present in cleartext. | Not a secret-bearing file by nature (no application credentials); OS-level restricted access recommended. |
| External tools | Java/MQ behaviour can vary by version (e.g. JDK 25 and the -cacerts flag). | Timeouts, standardised blocking errors and stderr/stdout capture. |
| Remote SFTP | Risk if a new host key is accepted casually. | Explicit --trust-new-host required; otherwise a pre-populated known_hosts (controlled onboarding). |
| Superficie | Riesgo | Control vigente |
| Certificados importados | Valores no confiables (CN, SAN falsificados) pueden contener caracteres especiales o HTML. | Escapado sistemático antes de cualquier visualización HTML; el contenido nunca se ejecuta. |
| Almacenes protegidos | Las contraseñas pueden proporcionarse a herramientas externas (keytool, runmqakm). | Enmascaramiento en consola ****; sin registro de contraseña en claro. |
| constantes_V1R1M1.properties | Puede haber configuración sensible (rutas, umbrales) en texto claro. | No es un fichero de secretos por naturaleza (sin credenciales de aplicación); se recomienda acceso restringido a nivel de SO. |
| Herramientas externas | El comportamiento Java/MQ puede variar según la versión (ej. JDK 25 y el flag -cacerts). | Timeouts, errores bloqueantes normalizados y captura de stderr/stdout. |
| Remote SFTP | Riesgo si se acepta una nueva clave de host sin control. | --trust-new-host explícito requerido; en su defecto, known_hosts prepoblado (incorporación controlada). |
Recommandations restantesRemaining recommendationsRecomendaciones pendientes
Les recommandations initiales de cet audit (fonction d'échappement HTML unique, modèle de licence vérifié par clé, standardisation des erreurs) ont depuis été implémentées — voir « Contrôles en place » ci-dessus. Restent deux points d'amélioration, de nature qualité de code plutôt que faille de sécurité active :
This audit's original recommendations (single HTML-escaping function, key-verified licence model, standardised error handling) have since been implemented — see "Controls in place" above. Two improvement points remain, more a matter of code quality than an active security flaw:
Las recomendaciones iniciales de esta auditoría (función única de escapado HTML, modelo de licencia verificado por clave, estandarización de errores) se han implementado desde entonces — ver "Controles vigentes" arriba. Quedan dos puntos de mejora, más una cuestión de calidad de código que un fallo de seguridad activo:
- 🔸 Centraliser l'échappement HTML — l'échappement est déjà appliqué de façon systématique (28 points), mais via des appels répétés plutôt qu'une fonction unique partagée. Regrouper simplifierait la maintenance sans changer le niveau de protection actuel.
- 🔸 Étendre les tests aux valeurs limites — ajouter des cas de test avec valeurs certificat ressemblant à du HTML, alias très longs, subjects vides et chaînes de confiance incomplètes, pour figer le comportement de l'échappement et du chaînage dans la durée.
- 🔸 Centralise HTML escaping — escaping is already applied systematically (28 points), but via repeated calls rather than one shared function. Consolidating would simplify maintenance without changing the current protection level.
- 🔸 Extend tests to edge-case values — add test cases with HTML-like certificate values, very long aliases, empty subjects and incomplete trust chains, to lock down escaping and chaining behaviour over time.
- 🔸 Centralizar el escapado HTML — el escapado ya se aplica sistemáticamente (28 puntos), pero mediante llamadas repetidas en lugar de una única función compartida. Consolidarlo simplificaría el mantenimiento sin cambiar el nivel de protección actual.
- 🔸 Ampliar las pruebas a valores límite — añadir casos de prueba con valores de certificado similares a HTML, alias muy largos, subjects vacíos y cadenas de confianza incompletas, para fijar el comportamiento del escapado y el encadenamiento en el tiempo.
Fichiers référencésReferenced filesFicheros referenciados
| Fichier | Rôle | Confidentialité / sécurité |
bin/chkcert_V1R1M1.py | Source principale. | Accès contrôlé. |
properties/constantes_V1R1M1.properties | Fichier de constantes externe (RSA, dossier de sortie, affichage chaînage). | Chemin contrôlé par administrateur ; pas de secret applicatif. |
properties/class_bcolors.py | Personnalisation couleur optionnelle — contrôlée avant chargement. | Répertoire de confiance uniquement. |
properties/licence.key | Licence Enterprise optionnelle. | Accès restreint uniquement. |
| File | Role | Confidentiality / security |
bin/chkcert_V1R1M1.py | Main source. | Controlled access. |
properties/constantes_V1R1M1.properties | External constants file (RSA, output folder, chaining display). | Administrator-controlled path; no application secrets. |
properties/class_bcolors.py | Optional colour customisation — checked before loading. | Trusted directory only. |
properties/licence.key | Optional Enterprise licence. | Restricted access only. |
| Fichero | Rol | Confidencialidad / seguridad |
bin/chkcert_V1R1M1.py | Fuente principal. | Acceso controlado. |
properties/constantes_V1R1M1.properties | Fichero de constantes externo (RSA, carpeta de salida, visualización de encadenamiento). | Ruta controlada por el administrador; sin secretos de aplicación. |
properties/class_bcolors.py | Personalización de color opcional — verificada antes de cargarse. | Solo directorio de confianza. |
properties/licence.key | Licencia Enterprise opcional. | Solo acceso restringido. |