Skip to main content

StaticCodeAudit — Résumé du produit

Niveau Débutant
Temps de lecture ⏱ 10 min
mots 2526
Sujets overviewfeatures

StaticCodeAudit — Résumé produit

Outil autonome d'audit de conformité, de sécurité et de qualité du code. Zéro dépendance. 100 % hors-ligne. Rapports de qualité entreprise.

Par CodeFixture | Préfixe : SCA


Sommaire

  1. Points clés
  2. Ce qu'il fait
  3. Règles de détection
  4. Langages pris en charge
  5. Fonctionnalités du rapport
  6. Conformité et standards
  7. Internationalisation
  8. Référence CLI
  9. Configuration
  10. Performance

Points clés

  • Binaire autonome unique — aucune installation, aucune dépendance externe à installer
  • 100 % hors-ligne — aucun appel d'API, aucun accès réseau, aucune dépendance cloud
  • Plus de 465 règles de détection réparties sur 7 catégories d'audit avec correspondance OWASP/CWE/WCAG/ASVS (Python, JS/TS, Java, C#, PHP, YAML)
  • Rapports HTML interactifs — fichier unique autonome avec plus de 12 visualisations Chart.js
  • Prise en charge de 4 langues — français, anglais, espagnol, allemand (rapport et console)
  • Comparaison historique — suivi automatique de la baseline sur 10 audits
  • Analyse CVE — intégration optionnelle de pip-audit et npm audit (locale, hors-ligne)
  • Personnalisation marque blanche — nom d'outil, société et logo configurables par projet
  • Matrice de conformité ISO 27001 — mappe les findings vers les 93 contrôles de l'Annexe A sur 4 thèmes
  • Rétention des rapports — nettoyage configurable par nombre, jours ou les deux modes
  • Intégration git blame — résolution du committeur par finding pour la traçabilité
  • Configuration interactive — modes init et configure guidés pour une mise en place facile
  • Mode démo--demo génère des rapports anonymisés (chemins, code, solutions masqués) pour les prospects et le partage public
  • Wizard de règles personnalisées--create-rule wizard unifié en 7 étapes : création ou édition, vérification de doublons (nom + pattern), DSL complet (risk/solution/benefit/fix), 4 langues
  • Filtre de sévérité--severity CRITICAL,HIGH filtre les règles avant le scan ; bandeau orange dans le rapport quand actif
  • Badge de langage — chaque finding affiche son langage détecté (Python, JavaScript, YAML…) sous forme de badge neutre
  • Graphique langage × sévérité — diagramme à barres empilées croisant le langage détecté et le niveau de sévérité
  • Architecture des règles personnalisées — répertoire custom-rules/ séparé, jamais écrasé par les mises à jour
  • Progression détaillée — numérotation dynamique [n/N] calculée après le chargement des règles, messages par langage et par étape de taint

Ce qu'il fait

StaticCodeAudit (SCA) est un outil d'analyse statique qui scanne le code source d'un projet à la recherche de vulnérabilités de sécurité, d'anti-patterns architecturaux, de problèmes d'accessibilité UI/UX et de dette de maintenance. Il produit un rapport HTML autonome avec des findings groupés par sévérité, des graphiques interactifs, un score de santé et une analyse historique des tendances.

Workflow

1. ./staticcodeaudit-<plateforme> /chemin/vers/projet --init   # Initialise le projet (génère UUID + config)
2. ./staticcodeaudit-<plateforme> /chemin/vers/projet          # Lance l'audit complet
3. Ouvrez SCA-REPORT-*.html                                    # Consultez le rapport interactif

Chaque audit génère :

  • Rapport HTML (SCA-REPORT-{timestamp}.html) — autonome, imprimable, interactif
  • Rapport démo (SCA-REPORT-{timestamp}-demo.html) — version anonymisée à partager (activable via --demo)
  • Données JSON (SCA-DATA-{timestamp}.json) — lisible par machine, versionné (v3.4)
  • Baseline — stockée pour la comparaison du prochain audit (problèmes nouveaux/résolus/persistants)

Règles de détection

Plus de 465 règles réparties sur 7 catégories, chacune avec évaluation du risque, conseils de remédiation et description du bénéfice.

Security (~430 règles) — Poids : 3

Règle Sévérité Standard
Injection SQL (f-string, concat, ORM) HIGH OWASP A03, CWE-89
XSS (innerHTML, React, Angular, Vue, Svelte, Blade) HIGH CWE-79
Injection JNDI (Java — Log4Shell) CRITICAL ASVS 1.3.8, CWE-917
Injection XPath (Java, C#, PHP, Python) HIGH ASVS 1.2.7, CWE-643
SSTI — Server-Side Template Injection (Python, JS) HIGH ASVS 1.3.7, CWE-1336
Injection SpEL (Spring) HIGH CWE-917
Injection LDAP (C#) HIGH CWE-90
Injection CSV (formula injection) MEDIUM ASVS 1.2.10, CWE-1236
Injection SMTP (Python, PHP) MEDIUM ASVS 1.3.11, CWE-93
ReDoS — Regular Expression Denial of Service MEDIUM ASVS 1.3.12, CWE-1333
Format String Vulnerability MEDIUM ASVS 1.3.10, CWE-134
Secrets en dur HIGH CWE-798
Identifiants par défaut (en dur) HIGH ASVS 6.3.2, CWE-798
Exécution de code dangereuse (eval/exec) HIGH CWE-94
Mode debug activé HIGH OWASP A05
Secret journalisé (f-string, argument, Java, C#, PHP) HIGH OWASP A09, CWE-532
Injection de log (CRLF) MEDIUM ASVS 16.3.2, CWE-117
HTTP sans TLS MEDIUM OWASP A02
WebSocket sans TLS (ws:// vs wss://) MEDIUM ASVS 4.4.1, CWE-319
Désérialisation non sûre (Python, Java, C#, PHP) HIGH OWASP A08, CWE-502
Cryptographie faible (MD5/SHA-1, Java, C#, PHP) HIGH CWE-328
Taille de clé insuffisante (RSA < 2048) MEDIUM ASVS 11.2.3, CWE-326
Injection de commande OS (Python, Java, C#, PHP) HIGH CWE-78
Exception verbeuse (Python, Java, C#, PHP) MEDIUM CWE-209
Authentification artisanale HIGH CWE-287
Politique de mot de passe faible (min < 8) MEDIUM ASVS 6.2.1, CWE-521
Questions de sécurité (auth basée sur la connaissance) LOW ASVS 6.4.2, CWE-640
Jetons de session prévisibles HIGH CWE-330
JWT algorithme None CRITICAL ASVS 9.1.2, CWE-345
Secret JWT en dur HIGH ASVS 9.1.3, CWE-798
Import dynamique MEDIUM CWE-502
Aléatoire non sûr (Math.random, Java, C#, PHP) MEDIUM CWE-330
Authentification côté client (localStorage) HIGH CWE-602
Race condition (TOCTOU) MEDIUM CWE-367
Injection XXE (Java, C#, PHP) HIGH CWE-611
CSRF désactivé (Spring) HIGH CWE-352
CORS permissif (Spring, C#) MEDIUM CWE-942
Contournement SSL (Java, C#) HIGH CWE-295
Open redirect (Java, C#, PHP) MEDIUM CWE-601
Inclusion de fichier (PHP) HIGH CWE-98
Upload de fichier sans validation MEDIUM ASVS 5.2.2, CWE-434
Spécifique PHP (extract, type juggling, mass assignment) MEDIUM-HIGH Divers
PII journalisées (RGPD, 5 langages) HIGH RGPD Art. 5
Rétention des données absente (RGPD) MEDIUM RGPD Art. 5
MFA absent (5 langages) MEDIUM CWE-308
Dockerfile (utilisateur root, base non figée, COPY all) HIGH-MEDIUM CWE-250
Stockage local non sûr (jetons/secrets dans localStorage) MEDIUM CWE-922
En-tête CSP absent (Flask, Django, Express) MEDIUM CWE-1021
En-tête HSTS absent MEDIUM ASVS 3.4.1, CWE-523
X-Content-Type-Options absent MEDIUM ASVS 3.4.4
Referrer-Policy absent LOW ASVS 3.4.5
Protection contre l'embarquement absente (CSP/X-Frame-Options) MEDIUM ASVS 3.4.6, CWE-1021
PostMessage sans vérification d'origine MEDIUM ASVS 3.5.5, CWE-346
Subresource Integrity (SRI) absent LOW ASVS 3.6.1
Contenu SVG scriptable (XSS) MEDIUM ASVS 1.3.4, CWE-79
Introspection GraphQL activée MEDIUM ASVS 4.3.2
GraphQL sans limite de profondeur MEDIUM ASVS 4.3.1, CWE-770
IP interne en dur (RFC 1918) MEDIUM CWE-798
Endpoint de test exposé (/test, /debug non protégés) MEDIUM CWE-489

Interface / UI (5 règles) — Poids : 1

Règle Sévérité
Styles inline en JavaScript LOW
Utilisation manuelle de createElement LOW
Écouteurs d'événements non nettoyés LOW
Manipulation du DOM dans des boucles LOW
SVG inline dans le HTML LOW

Expérience utilisateur / Accessibilité (18 règles) — Poids : 1

Règle Sévérité Standard
Bouton sans label ARIA MEDIUM WCAG 2.4.6
Champ de saisie sans label MEDIUM WCAG 1.3.1
Image sans texte alternatif MEDIUM WCAG 1.1.1
tabindex positif MEDIUM WCAG 2.4.3
Contour de focus retiré MEDIUM WCAG 2.4.7
Médias en autoplay MEDIUM WCAG 1.4.2
Messages toast non traduits MEDIUM i18n
Toasts d'erreur éphémères MEDIUM UX
Chaîne UI en dur (vérification i18n) MEDIUM i18n
console.log résiduel LOW

Maintenance (22 règles) — Poids : 1

Règle Sévérité Standard
TODO/FIXME/HACK/XXX non résolus LOW
Utilisation d'API dépréciée (Python, Java, C#, PHP, JS) LOW CWE-477
Exception attrape-tout (Python, Java, C#, PHP) MEDIUM CWE-396
System.out.println (Java) LOW
Console.Write (C#) LOW
Suppresseur d'erreur @ (PHP) LOW
Destructif sans backup (DROP/TRUNCATE hors migrations) LOW ISO A.8.13
Utilisation de l'heure locale (datetime.now() sans timezone) LOW ISO A.8.17
Endpoint de health check absent LOW ISO A.8.16
Code vendor non revu MEDIUM ISO A.5.22

Dependencies (3 règles) — Poids : 2

Règle Sévérité Standard
Dépendance vulnérable (CVE) HIGH-CRITICAL OWASP A06
Version de dépendance non figée HIGH CWE-1357
Licence non conforme MEDIUM

CI/CD (18 règles) — Poids : 2

Règle Sévérité Standard
pull_request_target_checkout HIGH CI-CD-01
GHA expression injection HIGH CI-CD-01
GHA permissions excessives MEDIUM CI-CD-05
GHA permissions manquantes MEDIUM CI-CD-05
GHA déclencheur de commentaire non protégé MEDIUM CI-CD-01
Version d'action non figée HIGH CI-CD-09
Variables GitLab non sûres MEDIUM CI-CD-05
Workflow absent du fichier CODEOWNERS LOW CI-CD-05
gha_secret_in_log HIGH CWE-312
gha_deprecated_commands HIGH CVE-2020-15228
gha_artifact_poisoning MEDIUM CI-CD-09
gha_self_hosted_runner MEDIUM CI-CD-06
ci_curl_pipe_bash HIGH CI-CD-09
ci_insecure_download MEDIUM CWE-319
hardcoded_secret_cicd CRITICAL CI-CD-04 / CWE-798
docker_latest_tag LOW CI-CD-09
gitlab_allow_failure_security HIGH CI-CD-04
gitlab_script_secrets_echo HIGH CWE-312

Langages pris en charge

Langage Extensions Couverture des règles
Python .py Security, Architecture, Maintenance
JavaScript .js, .jsx, .mjs Security, UI, UX
TypeScript .ts, .tsx Mêmes règles que JavaScript
HTML .html, .htm, .vue, .svelte, .ejs, .hbs, .njk, .jinja, .jinja2, .twig, .liquid, .mustache, .phtml, .erb, .jsp, .asp, .aspx, .cshtml UI, UX/Accessibilité
Java .java Security, Architecture, Maintenance
C# .cs Security, Architecture, Maintenance
PHP .php Security, Architecture, Maintenance
YAML .yml, .yaml CI/CD

Fonctionnalités du rapport

Sections (17 au total)

  1. En-tête — Nom du projet, version, UUID, drapeau de langue, horodatage
  2. Sommaire — Grille cliquable avec icônes emoji
  3. Paramètres d'audit — Langages, extensions scannées, chemins, motifs d'exclusion, catégories, mode
  4. Options CLI utilisées — Checklist de 16 options avec statut et descriptions
  5. Visualisations — 9 graphiques de métriques + 4 graphiques de tendances historiques (incl. barres empilées langage × sévérité)
  6. Statistiques de synthèse — Cartes : compteurs HIGH/MEDIUM/LOW, validations, taux de tests, durée
  7. Score de santé — Score de sécurité logarithmique normalisé par LOC, avec pénalités par sévérité et barre de progression colorée
  8. Top 10 des fichiers problématiques — Classement en heatmap
  9. Tests unitaires — Compteurs pass/fail/error/skip avec détails
  10. Validation des fixtures — Résultats de précision de détection
  11. Dépendances — Résultats du scan CVE, paquets non figés (optionnel)
  12. Conformité SLA — Délais de résolution et règles d'escalade par sévérité
  13. Matrice de conformité ISO 27001 — Mapping des findings vers les contrôles de l'Annexe A ISO/IEC 27001:2022 (93 contrôles, 4 thèmes)
  14. Findings par sévérité — Groupés CRITICAL/HIGH/MEDIUM/LOW/INFO avec extraits de code, badges de catégorie, liens glossaire
  15. Validations par catégorie — Messages de succès (aucun problème détecté)
  16. Glossaire — 36 acronymes avec définitions (OWASP, ASVS, WCAG, CVE, CVSS, CWE, CSRF, XSS, SQL, SARIF, SBOM, ISO 27001, etc.)

Fonctionnalités interactives

  • Sidebar redimensionnable — Sommaire collant avec poignée de redimensionnement et persistance localStorage
  • Raccourcis clavier — Navigation j/k, Ctrl+Home
  • Sections repliables — Cliquez pour déplier/replier les findings
  • Mode impression — Mise en page imprimable en un clic
  • Visualisations Chart.js — Plus de 12 graphiques interactifs avec tooltips
  • Comparaison à la baseline — Problèmes nouveaux/résolus/persistants mis en évidence
  • Liens croisés du glossaire — Tous les acronymes du rapport sont des liens cliquables vers le glossaire avec aperçu en tooltip

Autonomie du rapport

Chaque rapport est un fichier HTML unique autonome :

  • Tous les CSS, JavaScript et Chart.js intégrés en inline
  • Favicon et logo encodés en base64
  • Aucun fichier externe, aucun CDN, aucun réseau requis
  • Peut être ouvert dans n'importe quel navigateur, partagé par e-mail, archivé

Conformité et standards

Standard Couverture
OWASP Top 10 A01 (Broken Access Control), A02 (Cryptographic Failures), A03 (Injection), A05 (Security Misconfiguration), A06 (Vulnerable Components), A08 (Software Integrity), A09 (Security Logging)
OWASP CI/CD Top 10 CI-CD-01 (Insufficient Flow Control), CI-CD-05 (Insufficient PBAC), CI-CD-09 (Improper Artifact Integrity)
CWE CWE-78, CWE-79, CWE-89, CWE-90, CWE-94, CWE-98, CWE-209, CWE-250, CWE-287, CWE-295, CWE-308, CWE-328, CWE-330, CWE-352, CWE-367, CWE-396, CWE-477, CWE-502, CWE-532, CWE-601, CWE-602, CWE-611, CWE-798, CWE-917, CWE-922, CWE-942, CWE-1021, CWE-1357
WCAG 2.1 1.1.1 (Non-text Content), 1.3.1 (Info and Relationships), 1.4.2 (Audio Control), 2.4.3 (Focus Order), 2.4.6 (Headings and Labels), 2.4.7 (Focus Visible)
ISO/IEC 27001:2022 Matrice de conformité Annexe A — 93 contrôles répartis sur 4 thèmes (Organisationnel, Personnes, Physique, Technologique). 44 contrôles couverts par l'analyse statique (~47,3 % de couverture). Organisationnel A.5 : 10/37 (27 %), Technologique A.8 : 34/34 (100 %). 4 graphiques interactifs (doughnut, barres, radar, barres empilées) avec accordéon par thème. Couvre le secure coding (A.8.28), la cryptographie (A.8.24), la gestion des vulnérabilités (A.8.8), l'authentification (A.8.5), le contrôle d'accès (A.8.3), la gestion des privilèges (A.8.18), la sécurité du cloud (A.5.23), la chaîne d'approvisionnement (A.5.21), la supervision (A.8.16), les terminaux (A.8.1), le filtrage web (A.8.23), la segmentation réseau (A.8.22), la synchronisation d'horloge (A.8.17), la sauvegarde de l'information (A.8.13), la protection des audits (A.8.34), etc.
RGPD Art. 5 (journalisation des PII, rétention des données)
CVE Analyse des vulnérabilités via pip-audit (Python) et npm audit (Node.js)

Internationalisation

Langue Drapeau Console Rapport Glossaire
Français 🇫🇷 --script-lang fr reports.language: "fr" 36 termes
Anglais 🇬🇧 --script-lang en reports.language: "en" 36 termes
Espagnol 🇪🇸 --script-lang es reports.language: "es" 36 termes
Allemand 🇩🇪 --script-lang de reports.language: "de" 36 termes

Chaque chaîne de l'outil est localisée :

  • Messages console (locales/script/{lang}.json)
  • Messages de log de debug (niveaux info, detail, trace)
  • Texte, libellés et titres du rapport (locales/report/{lang}.json)
  • Noms des règles, descriptions de risque, solutions, bénéfices
  • Noms de catégories, libellés de sévérité, libellés de graphiques
  • Termes du glossaire, définitions d'acronymes

Référence CLI

La CLI est organisée en 3 groupes d'arguments principaux.

Scan Options (communs à toutes les cibles)

Option Description
project_path Chemin du projet cible (défaut : .)
--quick, -q Mode rapide — règles de sécurité uniquement
--severity LEVELS Filtre les règles par sévérité, séparées par des virgules (ex. CRITICAL,HIGH). Défaut : toutes. Bandeau orange dans le rapport quand actif.
--lang {fr,en,es,de} Langue du rapport et de la console (défaut : en)
--list-rules Liste toutes les règles d'audit par catégorie

Output Options

Option Description
--fail-on-high Code de sortie 1 si des vulnérabilités HIGH sont trouvées (intégration CI/CD)
--sarif Génère un export SARIF 2.1.0 (GitHub Code Scanning, GitLab SAST)
--with-logs Sauvegarde la sortie console dans un fichier log du répertoire de sortie
--quiet Mode console silencieux — affiche seulement les erreurs et le résultat final

Client Features

Option Description
--init Crée ou modifie audit.config.json (interactif)
--create-rule Crée ou édite une règle personnalisée (wizard interactif)
--custom-rules-match Vérifie la couverture des règles personnalisées par les fixtures personnalisées
--with-tests Détection automatique et exécution des tests unitaires du projet
--with-deps Scan des vulnérabilités de dépendances (pip-audit, npm audit)

Configuration

Toute la configuration vit dans audit.config.json à la racine du projet. Généré par --init.

Sections clés

Section Rôle
brand Nom de l'outil, nom de société, préfixe, logo personnalisé
project UUID, nom, version, description
languages Langages à auditer : ["python", "javascript", "html"]
paths.include Répertoires à scanner
paths.exclude Motifs à ignorer
categories Activation/désactivation et poids par catégorie
rules.disabled Liste des clés de règles à ignorer
reports Répertoire de sortie, répertoire d'historique, historique max (10), langue
tests Activation/désactivation, répertoire, commande de tests personnalisée
thresholds Max HIGH (0), max MEDIUM (10), santé minimale (80 %)
sla SLA par sévérité (délai, escalade)
fixtures Inclure les fixtures génériques (true/false)
retention Nettoyage des rapports : mode (count/days/both), max_count, max_days

Personnalisation marque blanche

{
  "brand": {
    "tool_name": "MyCompanyAudit",
    "company_name": "My Company",
    "prefix": "MCA",
    "logo": "assets/my-logo.svg"
  }
}

Personnalise : titre du rapport, pied de page, noms des fichiers de sortie, favicon, logo de l'en-tête.

Identifiant unique du projet

Chaque projet reçoit un identifiant unique (UUID) au premier --init. Cet identifiant permet :

  • De distinguer plusieurs projets portant le même nom à des emplacements différents
  • D'isoler les règles et fixtures spécifiques au projet
  • De suivre l'historique des audits (compteur, date du dernier audit)

L'identifiant est stocké dans le fichier audit.config.json du projet (clé project.id).


Performance

StaticCodeAudit met en cache l'analyse pour accélérer drastiquement les exécutions répétées :

  • Cache des règles compilées — réutilisation entre runs
  • Analyse incrémentale par hash — seuls les fichiers modifiés sont ré-analysés
  • Gain mesuré : -71 % en mode warm sur un projet de référence (332 fichiers : 15 s → 4,3 s)
  • Cache sécurisé — HMAC-SHA256 anti-falsification, écriture atomique, purge des entrées orphelines
  • Désactivable par variables d'environnement (SCA_NO_CACHE, SCA_NO_INCREMENTAL, SCA_NO_PARALLEL) si nécessaire