Control Flow Analysis
devsecopsDéfinition
La Control Flow Analysis (CFA — analyse du flux de contrôle) est une technique d'analyse statique de code qui modélise et analyse les chemins d'exécution possibles d'un programme — toutes les séquences de code qui peuvent être exécutées selon les conditions et les branchements (if/else, switch, boucles, exceptions). Dans le contexte du SAST de sécurité, la CFA permet de détecter des vulnérabilités liées à la logique de contrôle : chemins d'exécution non sécurisés, vérifications de sécurité contournables, et comportements inattendus en cas d'exception. La Control Flow Analysis construit un Control Flow Graph (CFG) représentant le programme comme un graphe orienté où les nœuds sont des blocs de code (séquences d'instructions sans branchement) et les arcs représentent les transitions possibles entre ces blocs selon les conditions d'exécution. Ce graphe permet d'analyser formellement les propriétés de sécurité du programme : "existe-t-il un chemin d'exécution depuis l'entrée utilisateur jusqu'à l'exécution d'une commande système sans passer par une validation ?" — question à laquelle la CFA peut répondre formellement. Les vulnérabilités de sécurité détectables via la CFA incluent : les exceptions non gérées qui exposent des informations sensibles (un chemin d'exécution via une exception NullPointerException contourne les blocs catch et affiche des stack traces), les vérifications d'autorisation contournables (un chemin d'exécution via une combinaison spécifique de paramètres peut contourner un bloc if(authorized)), les conditions de race (deux chemins d'exécution parallèles accédant à la même ressource sans synchronisation), et les erreurs de logique de sécurité (une vérification de sécurité incorrectement positionnée dans le CFG). Des outils SAST avancés (CodeQL, Infer, Coverity) utilisent la CFA combinée à la Data Flow Analysis pour des analyses de sécurité plus précises que les outils basés sur des patterns textuels simples. CodeQL, par exemple, représente le code source en base de données et permet d'écrire des requêtes logiques exploitant les informations de flux de contrôle pour détecter des vulnérabilités complexes.
Control Flow Graph (CFG) : représentation du programme
Le Control Flow Graph (CFG) représente les chemins d'exécution d'un programme sous forme de graphe : les nœuds sont des basic blocks (séquences d'instructions sans branchement), les arcs représentent les transitions conditionnelles (arcs vrai/faux pour les if-else, arcs de loop, arcs d'exception). L'analyse de sécurité sur le CFG répond à des questions comme "peut-on atteindre le nœud X (exécution de code dangereux) depuis le nœud A (entrée utilisateur) sans passer par le nœud V (validation) ?" — cette question est réductible à un problème d'atteignabilité de graphe.
CFA dans les outils SAST modernes
Les outils SAST utilisant la CFA pour la sécurité : CodeQL (GitHub) construit un AST et un CFG puis permet des requêtes QL pour trouver des patterns de vulnérabilité tenant compte du flux de contrôle ("trouver tous les appels à sink() atteignables depuis une entrée utilisateur source() via n'importe quel chemin sans passer par sanitize()"). Infer (Meta) utilise l'analyse de flux de contrôle inter-procédurale pour détecter les null pointer dereferences et les memory leaks. Coverity utilise des algorithmes d'analyse de flux pour détecter les dead code et les chemins d'exception non gérés.
CFA pour la détection de vérifications d'autorisation contournables
Un cas d'usage sécurité important de la CFA : détecter les vérifications d'autorisation qui peuvent être contournées. Exemple : une fonction authenticate() est appelée dans certains chemins d'exécution mais pas dans tous. La CFA identifie les chemins d'exécution qui atteignent des opérations sensibles (accès aux données, modification de configuration) sans passer par authenticate(). Cette analyse, difficile à réaliser manuellement dans des codebases complexes, est automatisable via des outils CFA. CodeQL permet d'exprimer ce type de propriété de sécurité via des requêtes DataFlow de type "source = HTTP endpoint, sink = database.query(), barrier = auth.check()".
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h