Sécurité (moyenne) : le contrôle de fuite ne cherche que la valeur exacte des secrets #16

Closed
opened 2026-10-13 23:46:42 +02:00 by mathieu · 1 comment
Owner

Constat (revue de sécurité du 2026-10-13)

fuite() fait grep -qF de la valeur exacte (lane-code, lane-fix, lane-review, lane-triage). Un agent en écriture qui a lu la clé (cas documenté, git commit -F /proc/self/environ) peut l'écrire encodée — base64, hexadécimal, inversée, coupée en morceaux — dans pr.md ou un commit, et elle est publiée.

Pistes

  • Chercher aussi les formes base64, hex, inversée, et toute fenêtre d'environ 16 caractères de la clé.
  • Surtout : une clé jetable par run, via une passerelle (url-api, jeton-api) avec budget et révocation après le run, pour qu'une fuite ne coûte presque rien.

Critères d'acceptation

  • Les formes encodées courantes sont refusées, test à l'appui.
  • La piste de la clé jetable est décidée (faite ou écartée, avec raison).
## Constat (revue de sécurité du 2026-10-13) `fuite()` fait `grep -qF` de la valeur exacte (lane-code, lane-fix, lane-review, lane-triage). Un agent en écriture qui a lu la clé (cas documenté, `git commit -F /proc/self/environ`) peut l'écrire encodée — base64, hexadécimal, inversée, coupée en morceaux — dans `pr.md` ou un commit, et elle est publiée. ## Pistes - Chercher aussi les formes base64, hex, inversée, et toute fenêtre d'environ 16 caractères de la clé. - Surtout : une clé jetable par run, via une passerelle (`url-api`, `jeton-api`) avec budget et révocation après le run, pour qu'une fuite ne coûte presque rien. ## Critères d'acceptation - [ ] Les formes encodées courantes sont refusées, test à l'appui. - [ ] La piste de la clé jetable est décidée (faite ou écartée, avec raison).
Author
Owner

Fait.

  • Contrôle de fuite renforcé par #18 (606be5c) : valeur brute, inversée, fenêtre de 16 caractères, base64 standard et url-safe aux trois décalages, hex, percent-encoding, y compris après retrait des blancs ; échec fermé ; même fonction dans les quatre lanes, tests. git log -p --text --no-textconv --no-ext-diff dans code et fix. Limites écrites dans CONTRAT.md : un filet, pas une frontière.
  • Piste de fond : la clé d'API des lanes vit depuis l'origine dans un espace Anthropic qui leur est réservé, avec plafond de dépense — une fuite coûte au plus ce plafond. La clé jetable par run (passerelle type LiteLLM, l'API d'administration d'Anthropic ne créant pas de clé) est reportée.
Fait. - Contrôle de fuite renforcé par #18 (`606be5c`) : valeur brute, inversée, fenêtre de 16 caractères, base64 standard et url-safe aux trois décalages, hex, percent-encoding, y compris après retrait des blancs ; échec fermé ; même fonction dans les quatre lanes, tests. `git log -p --text --no-textconv --no-ext-diff` dans `code` et `fix`. Limites écrites dans CONTRAT.md : un filet, pas une frontière. - Piste de fond : la clé d'API des lanes vit depuis l'origine dans un espace Anthropic qui leur est réservé, avec plafond de dépense — une fuite coûte au plus ce plafond. La clé jetable par run (passerelle type LiteLLM, l'API d'administration d'Anthropic ne créant pas de clé) est reportée.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/lanes#16
No description provided.