[P2][journal] Valider le descripteur avant chmod et troncature #59

Closed
opened 2026-09-29 20:34:49 +00:00 by silex · 0 comments
Owner

Gravité et périmètre

P2 / medium. Journal événementiel et sécurité des fichiers, commit 65442d2.

Constat

internal/events/journal.go:287–323 applique Fchmod avant de vérifier le type, le propriétaire et le nombre de liens. La rotation mono-fichier ouvre également avec O_TRUNC (:202), ce qui tronque avant la validation du descripteur.

Les symlinks finaux sont déjà refusés par O_NOFOLLOW ; le défaut restant concerne notamment les hardlinks.

Reproduction

Tests sur fichiers temporaires : créer un fichier externe au journal et un hardlink à sa place ; appeler secureOpenJournalFile. L'ouverture est rejetée pour Nlink != 1, mais le fichier cible passe de 0644 à 0600. Avec les flags O_TRUNC utilisés par la rotation mono-fichier, son contenu est vidé avant le rejet.

Impact et limites

Modification ou perte de données via une entrée incorrecte. Le runtime privé limite l'exposition ; aucune attaque interutilisateur n'est démontrée. Ce cas ne bloque pas le parcours nominal.

Correction et acceptation

Ouvrir sans opération destructive, valider le descripteur, puis appliquer permissions et éventuelle troncature sur ce même descripteur. Tester qu'un hardlink, fichier spécial ou propriétaire invalide est rejeté sans modification du fichier cible ; conserver les garanties non-bloquantes, nofollow et de rotation bornée.

## Gravité et périmètre P2 / medium. Journal événementiel et sécurité des fichiers, commit `65442d2`. ## Constat `internal/events/journal.go:287–323` applique Fchmod avant de vérifier le type, le propriétaire et le nombre de liens. La rotation mono-fichier ouvre également avec O_TRUNC (`:202`), ce qui tronque avant la validation du descripteur. Les symlinks finaux sont déjà refusés par O_NOFOLLOW ; le défaut restant concerne notamment les hardlinks. ## Reproduction Tests sur fichiers temporaires : créer un fichier externe au journal et un hardlink à sa place ; appeler secureOpenJournalFile. L'ouverture est rejetée pour Nlink != 1, mais le fichier cible passe de 0644 à 0600. Avec les flags O_TRUNC utilisés par la rotation mono-fichier, son contenu est vidé avant le rejet. ## Impact et limites Modification ou perte de données via une entrée incorrecte. Le runtime privé limite l'exposition ; aucune attaque interutilisateur n'est démontrée. Ce cas ne bloque pas le parcours nominal. ## Correction et acceptation Ouvrir sans opération destructive, valider le descripteur, puis appliquer permissions et éventuelle troncature sur ce même descripteur. Tester qu'un hardlink, fichier spécial ou propriétaire invalide est rejeté sans modification du fichier cible ; conserver les garanties non-bloquantes, nofollow et de rotation bornée.
silex closed this issue 2026-09-29 22:05:43 +00:00
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
2027a/murmur#59
No description provided.