Des informations sur des vulnérabilités dans les gestionnaires GitHub Actions, qui sont automatiquement invoqués lors de l'envoi de demandes de tirage dans le référentiel de paquets Nixpkgs, utilisé dans la distribution NixOS et dans l'écosystème lié au gestionnaire de paquets Nix, ont été rendues publiques. La vulnérabilité permettait à un tiers d'extraire un jeton, offrant un accès en écriture et en lecture au code source de tous les paquets hébergés dans Nixpkgs. Ce jeton permettait de modifier directement tout paquet via le référentiel Git du projet, contournant ainsi les processus de vérification et de révision des modifications.
La possibilité de compromettre Nixpkgs et d'injecter son propre code dans n'importe quel paquet a été démontrée par des chercheurs en sécurité lors de la conférence NixCon en octobre dernier et a immédiatement été corrigée dans l'infrastructure du projet. Cependant, les détails concernant l'attaque n'ont été révélés qu'un an plus tard. Le problème était lié à l'utilisation dans le référentiel GitHub Nixpkgs des gestionnaires GitHub Actions, liés à l'événement « pull_request_target » et effectuant des vérifications automatisées lors de l'arrivée de nouvelles demandes de tirage.
Contrairement à l'événement « pull_request », les gestionnaires de « pull_request_target » se voient accorder un accès en écriture et en lecture à l'environnement de construction, ce qui nécessite une attention particulière lors de la manipulation des données transmises dans la demande de tirage. Dans l'un des gestionnaires liés à « pull_request_target », une vérification du fichier « OWNERS » mentionné dans la demande de tirage était effectuée à l'aide de l'utilitaire codeowners-validator : steps: - 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 était que, en cas d'erreur de formatage du fichier OWNERS, l'utilitaire codeowners-validator affichait le contenu de la ligne mal formatée dans le journal standard, accessible publiquement. L'attaque consistait à placer une liaison symbolique dans la demande de tirage, nommée OWNERS, pointant vers le fichier « .credentials », dans lequel les informations d'identification sont stockées dans l'environnement de construction. Ainsi, le traitement de ce fichier a entraîné une erreur et l'affichage dans le journal public de la première ligne, contenant le jeton d'accès au référentiel.

En outre, une autre vulnérabilité a été trouvée dans le gestionnaire effectuant la vérification des règles d'editorconfig. étapes: — nom: Obtenir la liste des fichiers modifiés depuis le 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'outil «xargs» pour exécuter le programme editorconfig-checker sur chaque fichier du pull request. Comme les noms de fichiers n'étaient pas vérifiés pour leur validité, un attaquant pouvait soumettre un fichier avec des caractères spéciaux dans le pull request, qui seraient traités lors de l'exécution de l'outil editorconfig-checker comme arguments de ligne de commande. Par exemple, en créant un fichier «—help», l'outil editorconfig-checker afficherait des conseils sur les options disponibles.
Source : opennet.ru
