Skip to content

check_secret_paths_ignored : une négation gagnante (!motif) est lue comme « protégé » #17708

Description

@jsboige

Grain: LIGHT/guard -- lane myia-ai-01:CoursIA

Constat

scripts/ci/check_secret_paths_ignored.py (#17442), fonction verdict_chemin, classe un chemin désignoré par un motif de négation comme VERSIONNEE, c'est-à-dire protégé.

Git le permet sans erreur : git check-ignore -v --no-index rend rc=0 quand la règle gagnante est une négation. Mesure sur un dépôt neuf dont le .gitignore contient versionne/* puis !versionne/visible.env :

rc 0 '.gitignore:2:!versionne/visible.env\tversionne/visible.env\n'

verdict_chemin teste returncode == 1 and not stdout pour conclure NON_IGNORE. Ce cas passe donc à côté : la ligne est parsée, sa source .gitignore est suivie, et le verdict est VERSIONNEE.

Portée réelle aujourd'hui

Elle est faible. Les règles de main ignorent le répertoire (.secrets/), et git ne peut pas réinclure un fichier dont le répertoire parent est exclu. Le défaut devient réel si quelqu'un réécrit un jour la règle en .secrets/* puis ajoute une exception !…. La garde passerait alors au vert sur un secret stageable.

Remède proposé

Dans verdict_chemin, quand le motif parsé commence par !, rendre NON_IGNORE (avec la source nommée), et ajouter un test de contrôle positif sur ce cas.

L'organe du trousseau (#17425, commit 56a97902c3) applique déjà ce traitement côté appelant, avec un test (test_motif_de_negation_n_est_pas_une_protection). La correction doit remonter dans l'organe partagé, et l'appelant la retirera ensuite.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions