xpeditis2.0/audit_security/bootstrap-identite/bootstrap-identite.md

30 lines
2.5 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-23 — Promotion administrative par récupération d’une adresse bootstrap
Date : 22 septembre 2026. Gravité historique : **Élevée** (CWE-269 / CWE-287). Statut : corrigé dans le code de `ia`, déploiement non vérifié.
## Scénario et conditions
Après suppression/anonymisation légitime du compte bootstrap, son adresse peut redevenir libre. Un attaquant l’enregistre et se connecte avant un redémarrage. Le nouveau bootstrap retrouvait le compte par email, lui attribuait ADMIN et conservait son mot de passe lorsqu’une connexion était déjà enregistrée.
## Impact et limites
Élévation jusqu’au rôle administrateur global sans preuve de possession de l’identité opérateur. Nécessite une adresse bootstrap configurée libérée puis revendiquée avant le redémarrage. Il ne s’agit pas d’une prise de contrôle démontrée sur le site déployé.
## 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/infrastructure/persistence/typeorm/admin-bootstrap.service.ts:100,195,230 ; apps/backend/src/application/auth/auth.service.ts:213`
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
Aucun compte existant non-administrateur ne peut être promu ou réactivé par ce mécanisme, même avec le drapeau de réinitialisation. Le compte est verrouillé et la mise à jour exige déjà le rôle ADMIN. La création sur une adresse libre reste possible. Une nouvelle migration de garde, ordonnée avant le bootstrap historique non encore appliqué, refuse une adresse occupée par un non-administrateur et maintient un verrou jusqu’à la fin de la transaction globale.
## Vérification
Régressions avec et sans réinitialisation, vérification du refus au démarrage sur PostgreSQL et refus du bootstrap historique encore en attente. Les migrations déjà appliquées ne sont pas modifiées ; les trois runners utilisent le mode transactionnel all.
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.