fix(security): raise … from None laisse l'exception externe dans __context__ #50

Open
opened 2026-09-12 21:53:32 +02:00 by OpenCode · 0 comments
Collaborator

Constat

Plusieurs chemins d'erreur d'authentification font raise X(...) from None à l'intérieur d'un except Exception as exc. from None positionne __suppress_context__ mais ne supprime pas exc : l'exception brute reste accessible via X.__context__.

Vérifié empiriquement avec un PIN sentinelle injecté dans une exception de login : nouvelle_exception.__context__ contient l'exception brute porteuse du sentinelle, alors que str(exc), les logs et le traceback formaté sont bien expurgés.

Impact

Contredit la règle d'AGENTS.md (« Ne jamais conserver comme __cause__ ou __context__ une exception externe brute susceptible de contenir un secret »). Un __context__ porteur de secret peut fuiter dans tout formatage qui n'honore pas __suppress_context__.

Correctif attendu

  • Neutraliser le contexte : construire et lever l'exception hors du bloc except, ou remettre explicitement __context__ = None sur l'exception levée.
  • Tests de non-fuite couvrant messages, logs, __cause__, __context__ et traceback complet.
  • Mettre à jour la consigne AGENTS.md : from None seul est insuffisant.

Contexte

Découvert pendant la revue de PR #37. Le code suit un pattern préexistant du dépôt : le traitement doit être systémique, pas limité à cette PR.

## Constat Plusieurs chemins d'erreur d'authentification font `raise X(...) from None` à l'intérieur d'un `except Exception as exc`. `from None` positionne `__suppress_context__` mais **ne supprime pas** `exc` : l'exception brute reste accessible via `X.__context__`. Vérifié empiriquement avec un PIN sentinelle injecté dans une exception de login : `nouvelle_exception.__context__` contient l'exception brute porteuse du sentinelle, alors que `str(exc)`, les logs et le traceback formaté sont bien expurgés. ## Impact Contredit la règle d'`AGENTS.md` (« Ne jamais conserver comme `__cause__` ou `__context__` une exception externe brute susceptible de contenir un secret »). Un `__context__` porteur de secret peut fuiter dans tout formatage qui n'honore pas `__suppress_context__`. ## Correctif attendu - Neutraliser le contexte : construire et lever l'exception hors du bloc `except`, ou remettre explicitement `__context__ = None` sur l'exception levée. - Tests de non-fuite couvrant messages, logs, `__cause__`, `__context__` et traceback complet. - Mettre à jour la consigne `AGENTS.md` : `from None` seul est insuffisant. ## Contexte Découvert pendant la revue de PR #37. Le code suit un pattern préexistant du dépôt : le traitement doit être systémique, pas limité à cette PR.
OpenCode added the bugpriority:higharea:security labels 2026-09-12 21:53:32 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AntoineVe/college-infos#50