Traduction automatique. Le texte anglais fait foi. English

l'audit adversarial

Ce n'est pas un audit. C'est une discipline.

N'importe qui peut lancer un contrôle de sécurité une fois et faire une capture d'écran du vert. Le plus difficile, c'est de continuer à attaquer son propre système à mesure qu'il grandit, et d'obtenir la même réponse à chaque fois. Le dernier cycle : un audit à 50 agents, ses correctifs livrés, puis un nouvel audit adversarial à 14 angles distinct, où chaque constat devait survivre à un sceptique avant de compter. Ce qui tient, tient.

ce que le dernier audit a couvert

D'abord le périmètre, la méthode et les limites. Le nombre d'agents ensuite.

Issu du dernier audit du cœur, daté du 25 septembre 2026. Le nombre d'agents indique à quel point un audit a été chargé, pas sa qualité, alors voici ce que celui-ci a réellement fait.

Code
Le package cœur, 162 fichiers et 17,362 lignes, à un commit fixe, plus le code de la passerelle nécessaire pour déterminer si chaque chemin est actif.
Accès
Le code source complet, et une base de données neuve construite à partir des migrations. Pas la base de production ; les réglages propres à la production ont été marqués non vérifiés et je les ai vérifiés ensuite.
Méthode
Quatre relecteurs ont chacun lu une couche en entier. Un responsable a relu chaque constat par rapport au fichier, et exécuté chaque affirmation de timing ou de motif, avant qu'il ne compte.
Gravité
ÉLEVÉE signifie une crise manquée ou un déni de service sur un chemin actif, une fuite entre tenants, ou de l'argent perdu. Moyenne signifie un garde-fou qui échoue en mode ouvert, un crédit créé à partir de rien, ou des données supprimées silencieusement. Chaque constat est aussi marqué actif ou latent : atteignable en production aujourd'hui, ou non.
Désaccord
Un constat que le responsable n'a pas pu reproduire a été écarté ou marqué non vérifié, pas intégré dans une moyenne.
Résultat
2 constats de gravité ÉLEVÉE et 13 de gravité moyenne. Tous corrigés le jour même, chacun avec un test qui échouait sur l'ancien code, et la suite complète relancée en CI.
Non couvert
La fidélité d'environ 7,000 lignes de chaînes de sécurité traduites, la base de données de production, la configuration du serveur web, et 17 constats de gravité faible encore ouverts.

Mené en interne par des relecteurs IA que j'ai dirigés, pas une assurance indépendante par un tiers.

la cadence

Réattaqué, tour après tour. Chaque constat inter-tenants ci-dessous a été trouvé par un audit, pas signalé par un client, et corrigé.

dernière
Ré-audit sous 14 angles de la dernière remédiation, traque des contournements résiduels et des régressions pour chaque correctif, chaque constat réfuté par un agent indépendant. 2 cas limites de faible gravité ont résisté, tous deux corrigés ; rien d'inter-tenant, aucune faille sur l'argent ou la gouvernance.
avant lui
Audit à 50 agents → une remédiation minimale en 9 PR sur les points de jonction du store (calendrier, canaux, le résident autonome, l'économie des tenants, GDPR/PECR) : tout livré, testé, redéployé.
avant cela
Audit à 44 agents, 9 constats, 3 élevés (dont une fuite de conversations inter-tenants) : tous corrigés ; et une analyse d'extension à 30 agents qui a mis au jour de vrais bugs comme effet secondaire de l'ancrage.
juillet 2026
Audit à 80 agents, 14 facettes : le premier balayage complet, mené avec une règle de réfutation : aucune constatation n'était retenue tant qu'un agent distinct n'avait pas échoué à la réfuter. Trois correctifs en sont issus, dont un importateur de site web quadratique réécrit en un parcours linéaire borné. Distinct du balayage à 50 agents ci-dessus, et antérieur à celui-ci.
et avant
passes adversariales sur toute la plateforme et sur tout le Studio, la passe phare, et plusieurs avant elles : une trace continue dans git.

✓ joyaux de la couronne tenus à chaque tour, isolation · argent · gouvernance · SSRF · domaines de jetons

trois des vrais

ÉLEVÉ Fuite de conversation entre tenants

La mémoire de conversation était indexée par l'expéditeur, et non par le locataire : un client ayant écrit à deux entreprises via la plateforme pouvait voir la conversation de l'une apparaître dans le prompt de l'autre. Corrigé : l'historique est indexé par entreprise au niveau du stockage, avec un test qui échoue si l'ancienne clé réapparaît. Elle a été trouvée par l'audit, et non signalée par un client.

HIGH Un fournisseur qui vide un appelant

Dans l'économie d'outils inter-tenants, un fournisseur pouvait augmenter le prix d'un outil accordé après qu'un appelant avait commencé à l'utiliser, et vider son solde. Corrigé : l'appelant consent à un prix par appel, en fail-closed. Pas de consentement, pas de facturation, et c'est appliqué avant qu'un seul crédit ne bouge.

ÉLEVÉ Crise derrière le compteur

La vérification de facturation s'exécutait avant la vérification de crise, donc un client en détresse écrivant à une entreprise à court de crédits recevait « indisponible » au lieu d'une ligne d'écoute de crise. Corrigé : la crise est prise en charge gratuitement, avant tout plafond et tout débit, sur chaque surface client.

Les angles d'analyse couvrent isolation · auth · injection · argent · gouvernance · réservation · canaux · le résident autonome · droits sur les données (GDPR/PECR) · le générateur de sites · frontend · ops. Verdict, à chaque passe : zéro critique en suspens ; l'isolation des tenants et la surface XSS sont revenues propres ; aucun contournement d'auth actif : chaque cas limite confirmé a été corrigé et redéployé.

les chiffres honnêtes

Chaque chiffre, avec son astérisque déjà attaché.

La plupart des bâtisseurs en rajoutent. Je préfère que vous fassiez confiance aux parties réelles plutôt que d'être impressionné par celles qui ne le sont pas.

1bâtisseur* pas une équipe
3,389tests réussis* CI, 2026-10-01, pas une preuve formelle
6 → 0audits · critiques en suspens* mené en interne, pas par un tiers ; zéro critique au 2026-09-25, package cœur
0violations connues entre locataires en production* aucune signalée ; une fuite trouvée lors d'un audit et corrigée, voir ci-dessous
1instance de production* par choix, le passage à l'échelle n'est pas encore la leçon

Le système est honnête parce que la personne qui l'a conçu l'est. J'y ai veillé dès le départ : intégré, pas ajouté après coup.

l'invitation

Les chiffres tiennent. Astérisques compris.

Si vous voulez un bâtisseur qui attaque son propre travail aussi durement avant que quiconque le demande, et qui continue à le faire à mesure que le système grandit, parlons-en.