fix(securite): fichiers de commande du runner refermés pour verifier, journal suspendu, node tué avant GITHUB_OUTPUT #21

Merged
mathieu merged 2 commits from securite-journal-fichiers-commande into main 2026-10-14 04:27:23 +02:00
Owner

Revue de sécurité ciblée du 2026-10-14 (après #19), en lecture seule, plus vérification dans les sources du runner Forgejo 13.2.0.

  • Moyen-haut : verifier (code, fix) ne refermait pas les fichiers de commande du runner. lancer.sh fait chmod go-w du dossier de $GITHUB_ENV (fichiers parfois en 666), pas le job verifier : le code livré pouvait y écrire et passer des variables aux étapes suivantes, post-étape d'actions/checkout en root comprise. Corrigé ; installer.py signale une CI sur pull_request qui ne le fait pas (les tests.yml des dépôts équipés sont concernés, à reprendre au réépinglage).
  • Bas : commandes passées par le journal. Le runner 13.2.0 ignore set-env, set-output, add-path (act/runner/command.go) ; il honore add-mask et les annotations. Ce que node écrit au journal (agent, verifier) est encadré par ::stop-commands::<jeton aléatoire> ; le résumé de resultat.json est échappé dans les quatre lanes.
  • Moyen : processus de node vivants pendant les dernières commandes root de lancer.sh. Tués juste après l'agent ; le nombre de commits est validé avant $GITHUB_OUTPUT.
  • Bas : nom du dépôt échappé dans l'expression du scan ; commentaire sur .git/config rectifié (le verrou réel est verrou-git.sh).

Tests : Isolement.test_code_livre_sous_node, test_ci_aval_signalee étendu ; 50 OK, les nouveaux échouent sur 879a8a9. CONTRAT.md décrit les règles.

À éprouver sur essai-actions avant fusion.

Revue de sécurité ciblée du 2026-10-14 (après #19), en lecture seule, plus vérification dans les sources du runner Forgejo 13.2.0. - **Moyen-haut : `verifier` (code, fix) ne refermait pas les fichiers de commande du runner.** `lancer.sh` fait `chmod go-w` du dossier de `$GITHUB_ENV` (fichiers parfois en 666), pas le job `verifier` : le code livré pouvait y écrire et passer des variables aux étapes suivantes, post-étape d'`actions/checkout` en root comprise. Corrigé ; `installer.py` signale une CI sur `pull_request` qui ne le fait pas (les `tests.yml` des dépôts équipés sont concernés, à reprendre au réépinglage). - **Bas : commandes passées par le journal.** Le runner 13.2.0 ignore `set-env`, `set-output`, `add-path` (`act/runner/command.go`) ; il honore `add-mask` et les annotations. Ce que node écrit au journal (agent, `verifier`) est encadré par `::stop-commands::<jeton aléatoire>` ; le résumé de `resultat.json` est échappé dans les quatre lanes. - **Moyen : processus de node vivants pendant les dernières commandes root de `lancer.sh`.** Tués juste après l'agent ; le nombre de commits est validé avant `$GITHUB_OUTPUT`. - **Bas :** nom du dépôt échappé dans l'expression du scan ; commentaire sur `.git/config` rectifié (le verrou réel est `verrou-git.sh`). Tests : `Isolement.test_code_livre_sous_node`, `test_ci_aval_signalee` étendu ; 50 OK, les nouveaux échouent sur `879a8a9`. CONTRAT.md décrit les règles. À éprouver sur essai-actions avant fusion.
verifier (code, fix) laissait le code livré écrire dans GITHUB_ENV, créé en 666 : variables passées aux post-étapes en root. Commandes du journal suspendues par un jeton aléatoire là où node écrit au journal ; résumé de resultat.json échappé. lancer.sh tue les processus de node juste après l'agent et valide le nombre de commits ; nom du dépôt échappé dans l'expression du scan ; commentaire de .git/config rectifié. installer.py signale une CI sur pull_request qui ne referme pas ces fichiers.
Le jeton de ::stop-commands:: s'imprimait au journal, lisible par l'agent sur un dépôt public. La sortie de l'agent et du code livré va dans un fichier de root, affiché une fois node tué, chaque ligne derrière « │ ».
mathieu deleted branch securite-journal-fichiers-commande 2026-10-14 04:27:23 +02:00
Sign in to join this conversation.
No reviewers
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!21
No description provided.