Note
À quoi ressemble un rapport d'audit technique
La question revient à chaque premier échange, et elle est légitime : on n'achète pas un livrable de plusieurs semaines sur une promesse. Voici le rapport lui-même.
Par Jonathan Brossard · Mis à jour le
Exemple fictif
Le document présenté sur cette page est un exemple de livrable. La société auditée, le commanditaire, les personnes, les mesures, les commits et les dates sont entièrement fictifs. Aucune donnée issue d'une mission réelle n'y figure. Les missions sont couvertes par un NDA : aucun rapport client n'est publié, ni ici ni ailleurs.
Il est en revanche complet : les quatorze constats y figurent, chacun avec sa gravité, sa portée, son niveau de preuve, sa recommandation chiffrée et son état de traitement daté. Rien n'est masqué.
36 pages · 223 ko · sans inscription
I. Ce que contient le rapport
Trente-six pages, huit parties et neuf annexes. L'ordre n'est pas décoratif : il suit celui dans lequel un comité d'investissement a besoin de lire. La synthèse et l'opinion d'abord, parce que c'est souvent tout ce qui sera lu ; le périmètre et les limites ensuite, parce qu'un constat ne vaut rien sans savoir sur quoi il porte ; les constats détaillés au milieu ; le plan d'action et son chiffrage à la fin.
| Partie | Ce qu'elle établit |
|---|---|
| Versions, contacts et diffusion | L'historique des versions, les interlocuteurs des trois parties, et une clause de diffusion qui dit à qui le rapport peut être transmis — et que l'extrait isolé requiert un accord écrit. |
| 1. Synthèse exécutive | Trois questions — la plateforme est-elle bien conçue, bien exploitée, reprenable ? — puis les quatre constats qui structurent l'appréciation, et une opinion d'auditeur formulée en un paragraphe assumé. |
| 2. Contexte et périmètre | Les dépôts et les commits exacts sur lesquels porte l'analyse, la volumétrie, et l'évolution du code entre le commit audité et la remise du rapport. |
| 3 et 4. Axes et limites | Les six domaines d'analyse, qui correspondent exactement aux familles de codes des constats, et surtout ce qui n'est pas couvert : ni test d'intrusion, ni test de charge, ni qualification juridique, ni audit des tiers. |
| 5. Méthodologie | Comment les constats sont établis, comment ils sont cotés, et comment l'audité a pu y répondre. |
| 6. Constats et analyse | Le cœur du rapport : quatorze constats sur six domaines. Chacun porte un code stable, une gravité, une portée, son niveau de preuve, ses éléments de vérification, une recommandation chiffrée et son état de traitement daté. |
| 7. Évaluation des risques | Les constats regroupés en risques, une grille de maturité sur huit domaines pondérés, une matrice gravité × portée. |
| 8. Recommandations | Un plan en trois phases, un chiffrage consolidé qui distingue ce qui reste à faire de ce qui est déjà livré, et le calendrier d'engagement de l'audité avec l'état de chaque échéance. |
| Annexes A à I | De quoi vérifier chaque constat sans avoir à interroger l'auditeur, et une déclaration d'indépendance et d'absence de conflit d'intérêts. |
Une chose ne figure pas dans cette table et mérite d'être signalée : la section 2.4, qui indique pour chaque élément analysé d'où vient l'information et quel niveau d'assurance elle porte — preuve directe, mesure, analyse de configuration, ou simple déclaration de l'audité. C'est probablement la page la plus utile du rapport pour un comité : elle dit ce qui est établi et ce qui est cru sur parole.
II. Comment un constat est écrit
C'est là que se joue la différence entre un rapport qu'on utilise et un rapport qu'on classe. Un constat qui dit « le cloisonnement est insuffisant » n'engage personne et ne se vérifie pas. Voici le premier des quatorze constats du rapport d'exemple, reproduit tel quel. Les treize autres suivent exactement le même format.
Extrait du rapport — constat SEC-01
Cloisonnement multi-clients garanti par la seule couche applicative
Gravité : critique Portée : structurelle Établi par preuve directe
L'isolation des données entre les 42 clients repose exclusivement
sur un filtre tenant_id appliqué dans le module
d'accès aux données. Au commit audité, aucune politique de
sécurité au niveau ligne n'est définie dans la base : le catalogue
pg_policies est vide, et
pg_class.relrowsecurity est faux sur les 29 tables.
Ce filtre est correctement appliqué partout où il devait l'être. Le constat ne porte pas sur un défaut existant mais sur l'absence de garde-fou : toute requête écrite hors du module d'accès, tout accès direct par un outil d'administration et toute erreur d'un nouvel arrivant produirait une fuite inter-clients sans qu'aucune barrière ne s'y oppose.
-- Au commit 4f1a2c9, sur copie restaurée du 10/03/2026 : 0 ligne SELECT schemaname, tablename, policyname FROM pg_policies; Filtre applicatif : src/core/data/tenant-scope.guard.ts:47 Chemins contournant le module d'accès : src/modules/reporting/exports.service.ts:112 et :189
Recommandation — activer la Row Level Security
sur l'ensemble des 29 tables portant une colonne
tenant_id, avec une politique dérivée du contexte de
session ; adjoindre un test de non-régression échouant si une
table multi-clients est créée sans politique.
Effort estimé : 6 à 9 jours-homme.
État au 09/04/2026 — partiel. RLS activée le 28/03/2026 (commit b12f4a8) sur les 6 tables nominatives, vérifié sur le dépôt et en production. 23 tables restent sans politique.
Quatre choses distinguent ce format :
- Le constat porte sur un mécanisme, pas sur un incident. Rien n'a fuité, et le rapport le dit explicitement. Ce qui est relevé, c'est qu'aucune barrière structurelle n'empêche que ça arrive.
-
Il se vérifie sans l'auditeur. Une requête SQL,
deux chemins
fichier:ligne. Le commanditaire ou son CTO peut contrôler le constat lui-même, avant et après correctif. - Il est chiffré. Six à neuf jours-homme, c'est ce qui permet de passer du rapport à une ligne de budget ou à une condition suspensive.
- Il porte son état de traitement. Avec la date, le commit et le niveau de vérification. Un constat corrigé n'est jamais retiré du rapport.
III. Comment les risques sont hiérarchisés
Une liste de quatorze constats ne se décide pas. Le rapport les cote selon deux dimensions, puis les regroupe.
La gravité — critique, élevée, moyenne, faible — dit ce qui se passe si le constat se matérialise. La portée — isolée, intermédiaire, structurelle — dit si le défaut se corrige par un correctif ponctuel ou s'il est inscrit dans la façon dont le système est construit. C'est la seconde qui décide : un défaut grave mais circonscrit se corrige, un défaut moyen mais structurel se paie sur toute la durée de vie du produit.
Aucun risque de gravité critique ou élevée n'est de portée isolée : aucun ne se corrige par un correctif ponctuel unique.
Les quatorze constats sont ensuite regroupés en sept risques, parce que c'est le regroupement qui porte le sens : deux constats distincts sur le cloisonnement forment un seul risque de fuite inter-clients, et c'est à ce niveau qu'un comité arbitre. Deux règles rendent ce passage reconstituable par le lecteur — un risque hérite de la gravité et de la portée maximales des constats qui le composent, et un constat n'alimente qu'un seul risque, de sorte que la somme des risques couvre exactement l'ensemble des constats, sans double compte ni omission.
Le rapport en tire un séquencement explicite, et c'est là ce qu'un acquéreur vient chercher : ce qui relève du risque de réalisation et doit être refermé avant closing, et ce qui relève du coût de détention et se traite au budget post-opération.
IV. La grille de maturité
Huit domaines notés sur 5 et pondérés. La note globale ne se substitue pas à l'analyse — elle sert à situer, et à comparer d'un audit à l'autre. Voici la grille de l'exemple.
| Domaine | Famille | Pond. | Note |
|---|---|---|---|
| Architecture & conception | DAT / ARC | 15 % | 3,5 / 5 |
| Modèle de données & couche d'accès | DAT | 15 % | 3,0 / 5 |
| Sécurité applicative & cloisonnement | SEC | 25 % | 2,5 / 5 |
| Exploitation & supervision | EXP | 15 % | 2,0 / 5 |
| Qualité & tests | MNT | 10 % | 2,5 / 5 |
| Maintenabilité & capacité de reprise | MNT | 10 % | 3,0 / 5 |
| Documentation & transmissibilité | MNT | 5 % | 2,0 / 5 |
| Gouvernance technique, dépendances & coûts | ARC / MNT | 5 % | 3,0 / 5 |
| Maturité globale | 100 % | 5,4 / 10 |
La pondération dit à elle seule ce que l'audit considère comme déterminant : la sécurité et le cloisonnement pèsent un quart de la note, la documentation seulement 5 %. Et une note s'interprète : 5,4 ne décrit pas une plateforme en danger, mais une plateforme qui fonctionne et n'a pas encore franchi l'étape d'industrialisation. Le rapport le dit en toutes lettres plutôt que de laisser le chiffre parler seul.
V. La procédure contradictoire
Le rapport est transmis à l'audité avant d'être définitif, et celui-ci répond. Dans l'exemple, l'éditeur a répondu par un document de onze pages contestant un constat sur quatorze — DAT-02, dont la portée a été révisée à la baisse après examen des éléments produits — et a proposé un calendrier de traitement pour les autres.
Deux règles encadrent l'exercice. Aucun constat n'est retiré : un constat corrigé reste dans le rapport, avec sa date de correction, le commit correspondant et le niveau de vérification de cette correction. Et les désaccords sont tracés : quand l'audité écarte une recommandation, le rapport l'inscrit comme un arbitrage assumé, pas comme un point réglé.
C'est ce qui rend le document utilisable des deux côtés de la table. L'acquéreur y voit ce qui reste ouvert au moment de signer ; l'audité y voit un document qu'il a pu discuter, ce qui change complètement la qualité de la coopération pendant la mission.
VI. Les annexes, ou la vérifiabilité
Neuf annexes, dont l'objet commun est de rendre chaque constat contrôlable sans passer par l'auditeur : les commandes permettant au commanditaire de vérifier lui-même l'état des correctifs, la procédure complète pour reconstruire l'environnement d'audit, les éléments de preuve des constats critiques, l'état des correctifs des audits antérieurs, et un glossaire où chaque terme technique est défini pour un lecteur qui ne l'est pas. La dernière, l'annexe I, est une déclaration d'indépendance et d'absence de conflit d'intérêts, qui fait partie intégrante du rapport.
L'environnement d'audit, dans l'exemple, a été reconstruit à partir des seuls éléments versionnés, sans assistance de l'équipe. La contrainte est délibérée : elle mesure la capacité de reprise autant qu'elle sert l'analyse. Trois interventions non documentées ont été nécessaires — c'est en soi un constat.
VII. Ce que le rapport ne dit pas
Un rapport crédible se reconnaît autant à ce qu'il écarte qu'à ce qu'il affirme. Celui-ci ne comprend ni test d'intrusion — il vérifie la présence et la portée des protections, pas leur résistance à une attaque — ni test de charge, ni qualification juridique des constats relatifs aux données personnelles, ni appréciation de la valeur de la société. Il exclut aussi ce à quoi l'accès n'a pas été ouvert : le code d'un service hébergé dans un dépôt distinct, dont seule l'interface a été examinée.
Le périmètre réel d'une mission se fixe au cadrage, et il figure dans le rapport avant les constats, pas en note de bas de page.
36 pages · 223 ko · sans inscription