Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ test-eval:
EVAL_SERVICE_URL=http://localhost:8083 ENGINE_HMAC_SECRET=${ENGINE_HMAC_SECRET:-secret} npx jest packages/eval-service/__tests__/eval-service.integration.test.js

# Backfill des composants sans workspaceId (orphelins) — SB-IDOR-2026-01.
# À exécuter AVANT ou EN MÊME TEMPS que le déploiement du code fail-closed
# (assertComponentInWorkspace), sinon les composants orphelins deviennent
# non éditables/destructibles par personne (même leur propriétaire).
# MIGRATION ONE-SHOT : plus nécessaire à partir de v0.11.16 (le fail-closed +
# l'estampillage workspaceId sur POST /workspaces/ empêchent les nouveaux orphelins).
# À exécuter une seule fois, au déploiement du code fail-closed, sinon les composants
# orphelins existants deviennent non éditables/destructibles par personne (même leur
# propriétaire). Idempotent — inutile de le relancer sur une instance déjà ≥ v0.11.16.
# Lance le script dans le container main (config.local.json monté → base locale).
backfill-orphans:
@docker compose ps --status running main >/dev/null 2>&1 || { echo "❌ Container main non démarré — démarrer d'abord (make up / docker-up)"; exit 1; }
Expand Down
3 changes: 3 additions & 0 deletions advisories/SB-IDOR-2026-01/2026-08-idor-workspace-import.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ CVSS à calculer (probablement ~8.x : réseau + authentifié faible + impact él
`POST /workspaces/` (corrige aussi le bug latent de rattachement des composants) et
(2) un **backfill** des orphelins existants (`packages/main/scripts/backfillOrphanComponents.js`)
— les 3 à déployer ensemble, sinon les orphelins deviennent non éditables/destructibles.
⚠️ **Backfill = migration one-shot, plus nécessaire à partir de v0.11.16** (le fail-closed
+ l'estampillage empêchent la création de nouveaux orphelins) ; à exécuter une seule fois
au déploiement de v0.11.16, idempotent.

## CWE
- **CWE-639** : Authorization Bypass Through User-Controlled Key (IDOR)
Expand Down
8 changes: 8 additions & 0 deletions packages/main/scripts/backfillOrphanComponents.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@
// tourner AVANT ou EN MÊME TEMPS que le déploiement du code corrigé, pour que les
// flux PUT/DELETE légitimes continuent de fonctionner.
//
// ⚠️ MIGRATION ONE-SHOT — PLUS NÉCESSAIRE À PARTIR DE v0.11.16.
// Depuis v0.11.16 : le fail-closed + l'estampillage de workspaceId sur le chemin
// embedded de POST /workspaces/ garantissent qu'aucun nouveau composant sans
// workspaceId ne peut être créé. Ce script n'est donc utile que pour les instances
// qui ont des orphelins pré-existants (créés avant v0.11.16) : il suffit de l'exécuter
// une fois au déploiement de v0.11.16. Idempotent — sans danger de le relancer,
// mais sur une instance déjà ≥ v0.11.16 il n'aura plus rien à faire.
//
// Principe : pour chaque composant sans workspaceId, on cherche le workspace qui le
// référence dans sa liste `workspace.components` et on estampe workspaceId = workspace._id.
// Les composants non retrouvés (vraiment orphelins) sont listés à la fin pour contrôle
Expand Down
Loading