Des vulnĂ©rabilitĂ©s dans les gestionnaires d'actions GitHub, automatiquement invoquĂ©s lors de la soumission de requĂȘtes d'extraction au dĂ©pĂŽt de paquets Nixpkgs, utilisĂ© dans la distribution NixOS et l'Ă©cosystĂšme de gestion de paquets Nix, ont Ă©tĂ© rĂ©vĂ©lĂ©es. Cette vulnĂ©rabilitĂ© permettait Ă un utilisateur non autorisĂ© d'extraire un jeton accordant un accĂšs en lecture et en Ă©criture au code source de tous les paquets hĂ©bergĂ©s dans Nixpkgs. Ce jeton permettait de modifier directement n'importe quel paquet via le dĂ©pĂŽt Git du projet, contournant ainsi les processus de rĂ©vision et d'approbation.
La possibilitĂ© de compromettre Nixpkgs et d'injecter du code personnalisĂ© dans n'importe quel paquet a Ă©tĂ© dĂ©montrĂ©e par des chercheurs en sĂ©curitĂ© en octobre dernier lors de la confĂ©rence NixCon et a Ă©tĂ© immĂ©diatement corrigĂ©e dans l'infrastructure du projet. Cependant, les dĂ©tails de l'attaque n'ont Ă©tĂ© divulguĂ©s qu'un an plus tard. Le problĂšme Ă©tait liĂ© Ă l'utilisation de gestionnaires d'actions GitHub dans le dĂ©pĂŽt GitHub Nixpkgs, liĂ©s Ă l'Ă©vĂ©nement « pull_request_target » et effectuant des vĂ©rifications automatiques lors de nouvelles requĂȘtes d'extraction.
Contrairement Ă l'Ă©vĂ©nement « pull_request », les gestionnaires de « pull_request_target » disposent d'un accĂšs en lecture/Ă©criture Ă l'environnement de compilation, ce qui nĂ©cessite une attention particuliĂšre lors de l'utilisation des donnĂ©es transmises dans une requĂȘte de tirage. L'un des gestionnaires liĂ©s à « pull_request_target » a validĂ© le fichier « OWNERS » fourni dans la requĂȘte de tirage en compilant et en appelant l'utilitaire codeowners-validator : Ă©tapes : â uses : actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with : ref : refs/pull/$/merge path : pr â run : nix-build base/ci -A codeownersValidator â run : result/bin/codeowners-validator env : OWNERS_FILE : pr/ci/OWNERS
Le problĂšme rĂ©sidait dans le fait que si le fichier OWNERS Ă©tait mal formatĂ©, l'utilitaire codeowners-validator enregistrait le contenu de la chaĂźne malformĂ©e dans le journal standard, accessible au public. L'attaque consistait Ă placer un lien symbolique nommĂ© OWNERS dans la requĂȘte d'extraction, pointant vers le fichier « .credentials », qui stocke les identifiants dans l'environnement de compilation. Par consĂ©quent, le traitement de ce fichier provoquait une erreur et la premiĂšre ligne, contenant le jeton d'accĂšs au dĂ©pĂŽt, Ă©tait enregistrĂ©e dans le journal public.

De plus, une autre vulnĂ©rabilitĂ© a Ă©tĂ© dĂ©couverte dans le gestionnaire qui vĂ©rifie les rĂšgles editorconfig. Ă©tapes : â nom : obtenir la liste des fichiers modifiĂ©s Ă partir de PR exĂ©cuter : gh api [âŠ] | jq [ ⊠] > « $HOME/changed_files » â utilise : actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 avec : ref : refs/pull/$/merge â nom : vĂ©rification d'EditorConfig exĂ©cuter : cat « $HOME/changed_files » | xargs -r editorconfig-checker
Dans ce cas, le problÚme résidait dans l'utilisation de l'utilitaire « xargs » pour exécuter editorconfig-checker avec chaque fichier de la pull request. Les noms de fichiers n'étant pas validés, un attaquant pouvait inclure un fichier contenant des caractÚres spéciaux dans la pull request, qui seraient traités comme des arguments de ligne de commande lors de l'exécution d'editorconfig-checker. Par exemple, lors de la création d'un fichier « --help », editorconfig-checker affichait un indice sur les options disponibles.
Source: opennet.ru
