CounterProof

Revue de code adversariale : ce que le terme laisse de côté

L'expression couvre désormais quatre pratiques, de l'invite critique à la maison d'humains à l'esprit d'attaquant. Chacune fournit le cadrage de l'attaquant ; aucune ne fournit à elle seule un dossier signé par des relecteurs indépendants de l'auteur de votre code, gradué selon la preuve atteinte par chaque constat. Ce que nous livrons, ce qu'un second modèle ne peut pas produire, et ce que nous vous disons avant l'achat.

La revue de code adversariale consiste à lire le code source avec la question d’un attaquant en tête (comment faire en sorte que cela fasse ce que cela ne devrait pas) plutôt qu’avec la question d’un mainteneur, à savoir si le code est correct et propre. Ce que nous livrons sous ce nom est un dossier de constats signé : chaque constat confirmé gradué selon la preuve réellement atteinte, chaque surface examinée et jugée saine consignée avec la méthode qui l’a examinée, produit par des relecteurs indépendants de l’auteur de votre code, apprécié par une personne nommée que votre acquéreur, votre assureur ou votre client peut citer, et rétracté par écrit s’il ne tient pas. Cette page dit ce que cela ajoute aux autres sens que l’expression a pris, et ce que cela coûte.

Ce que l’expression signifie aujourd’hui

Selon notre lecture du marché (une recherche en septembre 2026, pas un recensement), quatre pratiques portent ce nom. Chacune fait quelque chose de réel. Les deux premières sont des instruments de notre propre banc.

L’invite critique. Un agent écrit une modification ; un second, en contexte neuf et souvent d’une autre famille de modèles, lit le diff à travers des lunettes hostiles. Cela supprime l’auto-évaluation, ce qui compte là où cela s’applique : mesurée sur huit modèles juges, la préférence pour soi était forte pour un, moyenne pour deux, proche de zéro pour deux et légèrement inversée pour trois (préférence pour soi, arXiv:2410.21819). Comme pratique, elle fournit le cadrage de l’attaquant ; elle ne fournit pas à elle seule un dossier conservé, une mesure de la corrélation entre les deux lectures, ni une signature.

L’orchestrateur à deux relecteurs. Deux familles de modèles examinent la même modification indépendamment (parfois en aveugle l’une de l’autre) puis se critiquent mutuellement, et l’une d’elles synthétise le résultat, souvent en appliquant elle-même la correction. La phase en aveugle est juste. Comme forme, elle laisse le modèle relecteur juge de ses propres constats et réparateur de ceux-ci, et elle ne produit à elle seule ni vérité de terrain ni mesure de corrélation.

L’ensemble de plateforme. Un produit de revue fait tourner plusieurs modèles dans son propre pipeline et renvoie des commentaires de pull request assortis de niveaux de gravité ; il porte ce nom surtout par voisinage, car ceux qui se décrivent ainsi relèvent très majoritairement des deux premières pratiques. La pluralité des modèles est ici une décision de conception du fournisseur ; tel qu’il est vendu, ce dispositif n’expose pas quel modèle a dit quoi, sur quelle preuve, ni à quelle fréquence ils s’accordent en se trompant. Il apporte du volume et de l’intégration. Un fil de commentaires n’est pas un audit.

La maison d’humains à l’esprit d’attaquant. Des lecteurs au parcours offensif lisent le source comme le ferait un attaquant, en cabinet ou en foule. C’est là qu’est inventée une attaque que personne n’avait formulée, et c’est la pratique que la nôtre est faite pour alimenter plutôt que pour remplacer. Comme forme, elle ne sépare pas à elle seule sa preuve de son verdict, et l’indépendance de ses relecteurs entre eux n’est pas mesurée, comme celle de tout le monde.

Trois propriétés, un seul mot

Trois propriétés sont empaquetées dans adversarial : le cadrage de la tâche (la question de l’attaquant), l’indépendance des erreurs entre relecteurs, et l’indépendance organisationnelle de celui qui signe.

Cadrage de la tâcheIndépendance des erreursIndépendance organisationnelle
Invite critiqueouipas à elle seule, une consigne, un jugenon
Orchestrateur à deux relecteursouiune phase en aveugle, non mesurée ; le relecteur arbitrenon
Ensemble de plateformeouiinterne au fournisseur, non exposéenon, un outil ne peut pas signer
Maison humaineouiune seule équipeoui
CounterProofouibornée et consignée, non mesurée : lignées de modèles distinctes, la consigne au dossier, instances corrélées ou défaillantes non comptéesoui : signataire nommé, indépendant de l’auteur du code ; intérêts sectoriels déclarés par écrit

Un second modèle, choisi par vous, pointé sur ce que vous lui montrez, jugé par vous, n’est pas un adversaire. C’est un second tirage dans une distribution où vous vous tenez déjà. Trois écarts en découlent, et aucun n’est un problème de qualité de modèle.

Écart un : un autre fournisseur n’est pas un témoin indépendant

Deux modèles d’entreprises différentes ont des données d’entraînement différentes, donc l’accord vaut corroboration et le silence vaut réassurance ; tel est le raisonnement. Une étude portant sur plus de 350 modèles a trouvé que lorsque deux modèles se trompent tous les deux, ils s’accordent sur la même mauvaise réponse bien plus souvent que le hasard (une moyenne de 60 % sur un classement et de 42 % sur l’autre), des paires de fournisseurs différents étant incluses tout du long ; son énoncé inter-fournisseurs est une inférence tirée du modèle de régression de l’étude, non une analyse portant uniquement sur des paires inter-fournisseurs (Kim et al., ICML 2025, arXiv:2506.07962). Elle a mesuré des bancs d’essai et du tri de CV, non la revue de vulnérabilités, elle ne donne donc à personne le chiffre de recouvrement pour du code ; ce qu’elle établit, c’est que des fournisseurs différents ne sont pas automatiquement indépendants. Que cela doive changer votre lecture de l’accord d’un second relecteur sur votre code est notre inférence. Les philologues en ont fait une règle il y a cinq siècles : une copie dont on montre qu’elle descend d’une autre copie conservée est retirée du compte, non parce qu’elle est fausse, mais parce qu’elle n’ajoute aucun témoignage.

Le canal de corrélation que l’on manque n’est pas le fournisseur. C’est la consigne : l’invite, les outils, le dossier de preuves et le cadrage de rôle corrèlent les relecteurs par-delà les fournisseurs, et deux modèles à qui l’on tend le même paquet préparé partagent tout ce que ce paquet omet. Nous traitons la consigne comme une pièce de l’appareil et la versons au dossier de la revue. L’attaquant peut employer n’importe quel modèle déroule ce que cela autorise et ce que cela n’autorise pas.

Écart deux : personne ne décide quand il ne faut pas demander d’avis

Certaines affirmations ont un oracle, quelque chose qui y répond sans l’avis de quiconque. Ce chemin s’exécute-t-il ? Exécutez-le. La spécification permet-elle cette valeur ? Lisez-la. Là où un oracle existe, un test qui a tourné l’emporte sur un modèle qui a raisonné, et sur une personne qui a raisonné aussi.

Demandez à un agent relecteur si une expression régulière correspond à un chemin, et il produira un avis bien formulé sur la question. Router cette question vers une exécution est un choix d’ingénierie, et selon notre lecture la plupart des outils de revue ne l’ont pas fait, parce que la catégorie s’achète au nombre de constats par pull request, et qu’un constat qui se révèle être un script de deux minutes n’est pas un constat. Nous connaissons la difficulté de l’intérieur : nous avons construit un contrôle censé imposer ce routage et l’avons livré avec son autotest défini et jamais appelé. Ce qui tranche un constat en est l’autopsie.

Les affirmations sans oracle (quelle gravité, cette hypothèse de confiance est-elle acceptable, un attaquant se donnerait-il la peine) relèvent du jugement, et aucun volume de sortie de modèle ne convertit un jugement en fait.

Écart trois : personne n’a signé

Une exécution d’agents en interne (quel que soit le nombre de modèles, quel que soit l’isolement de leurs contextes) produit votre propre parole sur votre propre code, sans que personne hors de votre organisation réponde d’une seule de ses phrases. D’après notre expérience, c’est la propriété que le conseil d’un acquéreur, le souscripteur d’un assureur cyber et l’équipe sécurité d’un client grand compte demandent en premier, parce que c’est celle que votre équipe ne peut pas fournir sur son propre travail.

Sous le Cyber Resilience Act, la plupart des fabricants peuvent s’auto-évaluer et sont ensuite tenus à chaque pièce qui le sous-tend : les rapports des essais effectués, dans la documentation technique (annexe VII, point 6), attestant l’obligation d’essais (annexe I, partie II, point 3), conservés dix ans ou pendant la période d’assistance si elle est plus longue (article 13, paragraphe 13). La notification des vulnérabilités activement exploitées a commencé le 11 septembre 2026 ; le règlement s’applique pleinement à compter du 11 décembre 2027. Une évaluation externe soutient le dossier que vous constituez ; elle n’est pas le dossier, et nous ne sommes pas un organisme notifié. Les normes peuvent glisser, la date de notification non traite le calendrier.

Ce que vous obtenez de nous

Rien de ce qui suit n’est un secret. Une équipe bien menée pourrait adopter n’importe lequel de ces points. Ce que vous achetez, c’est qu’ils soient tous faits, consignés et signés, sous la forme d’un dossier que vous pouvez remettre à quelqu’un qui n’était pas dans la pièce.

  1. L’oracle d’abord. Une affirmation décidable est routée vers l’exécution, la compilation ou la spécification avant qu’un avis soit commandé à son sujet. Notre outillage de dossiers de revue refuse de construire une consigne sans son paquet de preuves, et la consigne énonce ce que ce paquet ne peut pas montrer, de sorte que le silence d’une instance sur une chose qu’elle n’a jamais reçue se lit comme un silence et non comme une absence.
  2. Les instances sont des lignées, et la consigne est au dossier. Les relecteurs sont des familles de modèles distinctes ; les instances avec accès aux fichiers bâtissent leurs preuves depuis la source, celles qui ne l’ont pas ne lisent que ce que la consigne transporte. La consigne, les outils et le paquet reçus par chacune font partie du dossier. Une instance défaillante est consignée absente, jamais comme un accord ; une instance dont il apparaît qu’elle partage un contexte avec une autre est signalée et non comptée, y compris la fois où l’une des nôtres s’est trouvée avoir notre propre document de constats dans son contexte.
  3. Les retours en aveugle sont saisis avant qu’une appréciation existe. Ce que chaque instance a dit, mot pour mot, avec son enveloppe (modèle, harnais, date, fichiers ouverts) est consigné avant que quiconque les compare.
  4. Un décompte n’établit jamais rien. Les constats ne se ferment pas au vote. Là où les relecteurs divergent sur ce que fait le code, la source tranche ; là où un rejet repose sur « incertain », l’affirmation part dans une file conservée avec un responsable, une échéance et un critère de réouverture, et elle est réexposée à une lignée fraîche. La confirmation gravit l’échelon de preuve : trace dans la source, preuve à la compilation, test, reproduction en conditions réelles, et pour toute affirmation probabiliste un taux avec son intervalle et les journaux de chaque essai conservés ; tout ce qui reste en deçà d’un échelon est plausible seulement, l’autre disposition et non un échelon plus faible. Une surface examinée et jugée saine est consignée avec la méthode qui l’a examinée et le contrôle qui a montré que cette méthode sait trouver ce qu’elle cherchait.
  5. Une personne nommée signe, et se rétracte par écrit. Sous un identifiant que vos mainteneurs et votre acquéreur peuvent citer, y compris quand le constat était le nôtre. Nous publions les cas où nos propres instruments ont failli, parce qu’une pratique incapable de vous montrer où elle s’est trompée n’a aucune autorité là où elle dit avoir raison.

Interroger plusieurs modèles et prendre la majorité, c’est un ensemble ; tel qu’il est vendu, il n’expose rien de tout cela à l’acheteur. Lorsque nous avons cherché en septembre 2026, nous n’avons trouvé aucune pratique proposant cet ensemble comme un protocole qu’un acheteur puisse inspecter. C’est un énoncé sur la forme, non sur le taux de détection : ce dont il s’agit là figure plus bas, dans ce que nous vous disons avant l’achat.

Où cela se situe dans votre gestion des vulnérabilités

Trouver n’est pas là où nous gagnons nos honoraires. Les scanners, les fuzzers, les plateformes de revue et vos propres ingénieurs produisent déjà des candidats plus vite que quiconque ne peut les apprécier, et nos missions trouvent aussi des choses ; c’est le sous-produit. Ce pour quoi nous sommes payés se situe là où le cycle de vie rompt : l’appréciation : un candidat est d’abord routé vers son oracle, puis gradué selon l’échelon de preuve atteint, de sorte que la gravité suit la preuve et non la confiance d’un modèle ; la clôture : le désaccord est tranché par la source et non par un vote, et « incertain » est tenu dans une file conservée avec un responsable au lieu de devenir discrètement « accepté » ; et l’assurance : le résultat est un dossier qu’une personne nommée hors de votre organisation a signé et peut retirer, cette part d’un dossier technique, d’un pack de diligence ou d’une soumission d’assurance que vous ne pouvez pas produire sur votre propre travail. Placez-nous dans le recensement et nous concurrençons votre scanner au volume, une course que nous ne courons pas. Placez-nous là où un constat devient une décision que quelqu’un devra justifier plus tard, et le dossier est le produit. Un constat n’est pas un verdict couvre la première étape et Ce qui tranche un constat la moitié décisive de la deuxième ; la file conservée est décrite plus haut. La gestion des vulnérabilités sous le Cyber Resilience Act parcourt chaque étape avec l’obligation du CRA correspondante.

Ce que nous vous disons avant l’achat

Ceci vous protège, c’est donc sur la page plutôt que dans le contrat.

  • Nous vendons un dossier, pas un taux de détection. Nous n’avons pas montré qu’un panel trouve plus de défauts réels qu’un seul bon relecteur, et nous ne le prétendons pas ; nous avons mesuré notre appareil complet contre une seule passe économique, en préenregistré et noté en aveugle, et il n’a nettement gagné sur aucune des deux cibles : il en a perdu une, et sur l’autre il n’a déclenché son propre seuil de précision qu’en supprimant les constats que l’auditeur avait jugés réels. Nous avons mesuré notre propre méthode, et elle n’a pas justifié son coût. Le rapport de cas d’où nous travaillons dit qu’une doctrine plus simple (une relecture externe indépendante sur tout ce qui appellera une action de votre part, les litiges tranchés en lisant la source, aucun chiffre non mesuré publié) s’accorde avec les mêmes données ; si vous ne retenez que cela de cette page, retenez-le. Ce que nous vendons, c’est le dossier attestant de l’avoir fait, sous une signature. L’indépendance entre nos instances est bornée par la procédure et consignée, mais non mesurée pour la revue de code ; personne ne l’a mesurée. Chaque constat du dossier a atteint un échelon nommé, ou porte la mention qu’il ne l’a pas atteint.
  • Là où l’auteur est dans la boucle. Notre règle est que celui qui a soulevé une affirmation contestée ne l’apprécie pas seul. Notre banc de relecture compte deux personnes, ce qui signifie moins de missions, le refus de travaux hors de notre domaine, et le fait que cette règle n’a encore aucun mécanisme pour l’imposer ; notre propre rapport de cas désigne cette absence comme sa plus grande faiblesse non corrigée. En pratique une affirmation contestée passe par la source et par une lignée fraîche avant d’être close, l’appréciation est consignée et le signataire est nommé, de sorte que vous voyez quels constats ont été clos de cette façon et les pesez vous-même.
  • Aucune méthode n’atteint un défaut qu’aucun témoin n’a soulevé. La collation ne fait que choisir parmi ce qui a été émis. Les tests, le fuzzing, les preuves et la lecture d’un spécialiste sont des routes distinctes vers le même endroit, et un programme sérieux les emploie aussi.
  • Nous sommes indépendants de l’auteur de votre code, pas désintéressés dans tous les secteurs. CounterProof fait partie d’un groupe qui construit des infrastructures de paiement et de conservation d’actifs numériques. Si vous construisez sur ces marchés, notre société affiliée peut vous être voisine ou vous concurrencer. Nous vous disons par écrit ce que le groupe construit et où il opère avant toute mission et avant tout mouvement d’argent, et nous n’émettons aucune évaluation sur du code écrit par CounterProof ou par une société de notre groupe.

L’argumentation longue, avec ses propres limites, est notre document de travail, une prépublication non relue par les pairs : research.counterproof.io (doi:10.5281/zenodo.22030516).

Questions qu’on nous pose

La revue de code adversariale est-elle la même chose qu’un test d’intrusion ? Non. Un test d’intrusion éprouve un système en fonctionnement ; ceci lit le source à une révision épinglée et établit des constats contre le code. Les deux pensent en attaquant, elles répondent à des questions différentes, et un programme sérieux emploie les deux.

Ne puis-je pas simplement passer deux modèles d’IA sur mon propre code ? Vous le pouvez, et un second relecteur fera peut-être apparaître des candidats que le premier n’avait pas. Ce qu’il ne peut pas produire, c’est l’indépendance organisationnelle : votre équipe choisit ce que les relecteurs voient, formule les questions et juge les réponses, et personne d’extérieur n’a signé.

Une plateforme de revue fait déjà tourner plusieurs modèles. N’est-ce pas un panel ? Non. Un ensemble dont le fournisseur choisit les modèles, dont vous ne voyez pas les retours individuels et dont les désaccords se résolvent à l’intérieur du pipeline est un instrument à plusieurs pièces. Un panel, ce sont plusieurs instruments dont les retours sont consignés séparément et dont les désaccords sont tranchés par la source.

La revue de code adversariale ne vaut-elle que pour le code produit par IA ? Non. La méthode se moque de savoir qui (ou quoi) a écrit le code. Le code écrit par une machine rend simplement l’écart plus difficile à ignorer, parce que le volume augmente et que l’aisance masque les approximations.

En quoi cela diffère-t-il d’un outil de revue de code par IA ? Ces outils produisent des constats, et nous employons des outils de cette catégorie comme instruments. Ce qu’un outil ne peut pas faire, c’est répondre de ses dires ou signer.


Les inférences signalées comme telles plus haut, et ici : que l’accord d’un second relecteur sur du code doive être escompté (Kim et al. ont mesuré d’autres domaines) ; que la consigne corrèle les relecteurs ; que les quatre pratiques sont la forme du marché et que l’outillage de revue se concurrence au nombre de constats par pull request (notre lecture, une recherche, septembre 2026) ; que l’indépendance organisationnelle est ce que les acquéreurs, les assureurs et les acheteurs grands comptes demandent en premier (notre expérience, pas une enquête). Si quelque chose ici est faux, nous le corrigerons par écrit sur cette page.