xpeditis2.0/audit_security/wiki-version-revue/wiki-version-revue.md

30 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SEC-21 — Publication d’une version non relue par l’administrateur
Date : 22 septembre 2026. Gravité historique : **Moyenne** (CWE-367). Statut : corrigé dans le code de `ia`, déploiement non vérifié.
## Scénario et conditions
L’administrateur charge une proposition bénigne. Son auteur la modifie ensuite. Le bouton Publier envoyait seulement l’identifiant ; le serveur rechargeait et publiait le texte courant, différent du texte réellement affiché au relecteur.
## Impact et limites
Contournement de la relecture humaine et pollution de documentation partagée utilisée par l’assistant. Aucune exécution de code ni compromission déterministe du modèle n’est démontrée. Une action de publication de l’administrateur reste nécessaire.
## Preuves dans la version vulnérable
Révision immuable examinée : `ef0d7d5f670638a2dcce21f6aea8e169513b91ec`. Les numéros suivants désignent cette révision, pas les lignes du correctif :
`apps/frontend/app/[locale]/admin/wiki/page.tsx:54 ; apps/backend/src/application/trade-assistant/wiki-review.controller.ts:23 ; apps/backend/src/application/trade-assistant/wiki-review.service.ts:58`
Le traçage des entrées, contrôles et écritures a été complété par des régressions locales : six assertions de sécurité échouaient avant correction, couvrant les quatre constats de cette passe. Il ne s’agit pas d’une reproduction HTTP sur la production.
## Correction
Chaque proposition porte une version persistée. Publication et rejet exigent expectedVersion, entier positif ; le serveur compare la version lue puis effectue une écriture conditionnelle atomique. Une modification concurrente produit un conflit HTTP 409. L’interface envoie la version affichée et réinitialise les champs lors du changement de version.
## Vérification
Test de version obsolète sans publication, contrôle positif de publication, décisions concurrentes avec un seul gagnant et refus d’une ancienne révision sur PostgreSQL. La migration VersionWikiContributions initialise les lignes existantes à 1.
Voir le [compte rendu et les limites de couverture](../CORRECTIONS-FUSION-IA-2026-09-22.md). Aucun fichier `.env` n’a été lu, aucun service de production n’a été contacté, aucune migration n’a été appliquée à la base du projet pendant ces tests.