Skip to content

fix(sécurité): durcir les accès fichiers et les appels bq - #38

Merged
skadel merged 2 commits into
mainfrom
codex/security-hardening
Jul 25, 2026
Merged

fix(sécurité): durcir les accès fichiers et les appels bq#38
skadel merged 2 commits into
mainfrom
codex/security-hardening

Conversation

@skadel

@skadel skadel commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Résumé

  • centralise les gardes anti-path-traversal
  • sécurise les accès aux modèles, contextes et dépôts de tests
  • durcit l'exécution du subprocess bq
  • ajoute une couverture de régression dédiée

Validation

  • 10 tests de sécurité passent

Pile

PR 1/5 — base de la série.

skadel added 2 commits July 25, 2026 18:21
…2026-07)

Suite à l'audit de sécurité du projet :

- Traversée de chemin via `model_name`/`full_path` (contrôlés côté HTTP) : nouveau
  helper `utils/path_guard.py:safe_join` (containment sous racine), appliqué à
  `_test_path` (raise), `read_model_sql`/`get_model_file_*`, `load_model_context`
  et le catch-all SPA de `server.py`. Un `../` ne peut plus lire/écrire/supprimer
  hors de `.mocksql/tests`, `models_path` ou le dossier statique (fuite `back/.env`).

- Injection de commande dans `_run_bq_cli` : retrait de `shell=True`, exécutable
  résolu via `shutil.which`, et validation stricte (`_require_bq_component`) des
  composants projet/dataset/table/billing_project au build de la commande. Le
  wrapper `bq` étant un `.cmd` (arguments re-parsés par cmd.exe même sans shell),
  la validation des composants est le vrai garde-fou.

- Garde hex sur `source_sha` avant injection dans un argv git (option-injection).

- Outillage : règle ruff flake8-bandit `S` activée ; bruit inhérent au domaine
  ignoré (asserts, SQL en f-string). Les subprocess/binds restants sont `# noqa`
  justifiés ; les 2 binds `0.0.0.0` portent un TODO pointant le finding #1
  (non traité — décision produit).

Tests : back/tests/test_security_guards.py (10, rouges avant le fix).
@skadel
skadel merged commit 9688950 into main Jul 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant