xpeditis2.0/audit_security/identifiants-demo-preprod/identifiants-demo-preprod.md

2.8 KiB
Raw Permalink Blame History

SEC-22 — Comptes de démonstration utilisables en préproduction

Date : 22 septembre 2026. Gravité historique : Élevée (CWE-798). Statut : corrigé dans le code de ia, déploiement non vérifié.

Scénario et conditions

Le classificateur introduit par ia considérait APP_ENV=preprod comme non-production même avec NODE_ENV=production. Sur une base neuve ou avant neutralisation, les migrations pouvaient créer/conserver les comptes de démonstration actifs avec leur mot de passe public. La configuration de routage examinée n’imposait pas de restriction d’accès externe.

Impact et limites

Un client pouvant atteindre la connexion pouvait obtenir le rôle ADMIN avec les identifiants publics sur ce cycle de déploiement. Les bases déjà migrées ne rejouent pas automatiquement ces migrations ; leur état réel n’a pas été consulté.

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/deployment-environment.ts:19 ; apps/backend/src/infrastructure/persistence/typeorm/migrations/1730000000007-SeedTestUsers.ts:35 ; apps/backend/src/infrastructure/persistence/typeorm/migrations/1756000000000-NeutralizeSeedAccountsInProduction.ts:113 ; infra/preprod/docker-stack.preprod.yml:153

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

NODE_ENV=production impose la protection. Hors production explicite, seuls dev/development/local/test désactivent cette protection ; préproduction, staging et valeurs absentes/inconnues sont protégés. Une nouvelle migration remplace les mots de passe publics encore présents des comptes de démonstration et de l’adresse bootstrap configurée, en conservant les mots de passe personnalisés et le dernier administrateur actif. Un hash du mot de passe public est aussi refusé avant le bootstrap historique et au démarrage.

Vérification

Tests du classificateur et des migrations, rotation réelle Argon2 sur PostgreSQL, préservation d’un mot de passe personnalisé et du rôle actif. La revue indépendante a révélé le cas d’une adresse bootstrap différente des comptes de démonstration : le garde préalable et la rotation couvrent également cette adresse. Les sessions liées à l’ancien hash deviennent invalides.

Voir le compte rendu et les limites de couverture. 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.