Details about vulnerabilities in GitHub Actions handlers, automatically triggered when submitting pull requests to the Nixpkgs package repository used in the NixOS distribution and the ecosystem related to the Nix package manager, have been disclosed. The vulnerability allowed an outsider to extract a token granting read and write access to the source code of all packages hosted in Nixpkgs. This token enabled direct modifications to any package via the project's Git repository, bypassing the review and approval processes.
The possibility of compromising Nixpkgs and injecting one's code into any package was demonstrated by security researchers at last year's NixCon conference and was promptly addressed in the project's infrastructure. However, details of the conducted attack were only revealed a year later. The issue was linked to the use of GitHub Actions handlers in the Nixpkgs GitHub repository, tied to the 'pull_request_target' event and executing automated checks upon receiving new pull requests.
Im Gegensatz zum Ereignis „pull_request“ bieten „pull_request_target“ Handlern Lese- und Schreibzugriff auf die Build-Umgebung, was besondere Aufmerksamkeit bei der Arbeit mit den im Pull-Request übermittelten Daten erfordert. In einem der mit „pull_request_target“ verknüpften Handler wurde die in dem Pull-Request bereitgestellte Datei „OWNERS“ überprüft, wofür das Tool codeowners-validator gesammelt und aufgerufen wurde: 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
Das Problem war, dass im Falle eines Fehlers bei der Formatierung der Datei OWNERS das Tool codeowners-validator den Inhalt der fehlerhaft formatierten Zeile in das standardmäßige Protokoll ausgab, das öffentlich zugänglich ist. Der Angriff bestand darin, in dem Pull-Request einen symbolischen Link mit dem Namen OWNERS zu platzieren, der auf die Datei „.credentials“ verweist, in der die Anmeldeinformationen in der Build-Umgebung gespeichert sind. Folglich führte die Verarbeitung dieser Datei zu einem Fehler und zur Ausgabe der ersten Zeile im öffentlichen Protokoll, die das Zugriffstoken für das Repository enthielt.

Darüber hinaus wurde eine weitere Schwachstelle im Handler gefunden, der die Regeln für editorconfig überprüft. Schritte: — name: Liste der geänderten Dateien aus PR abrufen run: gh api […] | jq [ … ] > "$HOME/changed_files" — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge — name: Überprüfung der EditorConfig run: cat "$HOME/changed_files" | xargs -r editorconfig-checker
In diesem Fall lag das Problem in der Verwendung des Tools „xargs“, um das Programm editorconfig-checker mit jeder Datei aus dem Pull-Request auszuführen. Da die Dateinamen nicht auf Richtigkeit überprüft wurden, konnte ein Angreifer im Pull-Request eine Datei mit Sonderzeichen bereitstellen, die beim Ausführen des Tools editorconfig-checker als Befehlszeilenargumente verarbeitet wurden. Beispielsweise würde das Erstellen einer Datei „—help“ dem Tool editorconfig-checker eine Übersicht der verfügbaren Optionen anzeigen.
Quelle: opennet.ru
