30 lines
2.2 KiB
Markdown
30 lines
2.2 KiB
Markdown
# SEC-20 — Écrasement et retrait de contributions wiki étrangères
|
||
|
||
Date : 22 septembre 2026. Gravité historique : **Moyenne** (CWE-639 / CWE-862). Statut : corrigé dans le code de `ia`, déploiement non vérifié.
|
||
|
||
## Scénario et conditions
|
||
|
||
Un utilisateur authentifié pouvant proposer une contribution choisit le titre d’une page existante, appartenant à un autre auteur ou déjà publiée. La recherche globale par titre puis la révision remplaçaient le contenu et remettaient la page en attente, sans contrôler auteur, organisation ou statut.
|
||
|
||
## Impact et limites
|
||
|
||
Le contenu partagé pouvait être détruit ou retiré de la recherche globale, avec conservation trompeuse de l’auteur initial. Ce chemin ne publiait pas directement un nouveau texte sans administrateur.
|
||
|
||
## 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/backend/src/application/mcp/capabilities/knowledge.capabilities.ts:106 ; apps/backend/src/domain/entities/wiki-contribution.entity.ts:114 ; apps/backend/src/infrastructure/persistence/typeorm/repositories/typeorm-wiki-contribution.repository.ts:56`
|
||
|
||
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
|
||
|
||
Le service impose auteur et organisation identiques et refuse toute modification d’une page publiée. Le dépôt répète les contrôles dans les prédicats SQL. La création utilise INSERT ON CONFLICT DO NOTHING ; une collision de titre ne remplace plus une page existante.
|
||
|
||
## Vérification
|
||
|
||
Tests de refus des pages étrangères/en ligne, contrôle positif de sa propre proposition, collision simultanée de titres insensible à la casse et contrôle des prédicats sur PostgreSQL.
|
||
|
||
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.
|