Ang mga kahinaan sa mga tagapangasiwa ng GitHub Actions, na awtomatikong hinihimok kapag nagsusumite ng mga pull request sa Nixpkgs package repository, na ginamit sa pamamahagi ng NixOS at ang Nix package manager ecosystem, ay isiniwalat. Ang kahinaan ay nagbigay-daan sa isang hindi awtorisadong user na kumuha ng token na nagbibigay ng read at write na access sa source code ng lahat ng package na naka-host sa Nixpkgs. Ang token na ito ay nagbigay-daan sa direktang pagbabago ng anumang package sa pamamagitan ng Git repository ng proyekto, na lumalampas sa mga proseso ng pagsusuri at pag-apruba.
Ang kakayahang ikompromiso ang Nixpkgs at mag-inject ng custom na code sa anumang pakete ay ipinakita ng mga mananaliksik ng seguridad noong nakaraang Oktubre sa NixCon conference at agad na na-patch sa imprastraktura ng proyekto. Gayunpaman, ang mga detalye ng pag-atake ay isiniwalat lamang makalipas ang isang taon. Ang isyu ay nauugnay sa paggamit ng mga tagapangasiwa ng GitHub Actions sa Nixpkgs GitHub repository, na nakatali sa kaganapang "pull_request_target" at nagsasagawa ng mga automated na pagsusuri sa mga bagong pull request.
Hindi tulad ng kaganapang "pull_request", ang mga humahawak sa "pull_request_target" ay binibigyan ng read/write access sa build environment, na nangangailangan ng espesyal na pangangalaga kapag nagtatrabaho sa data na ipinasa sa isang pull request. Ang isa sa mga handler na nakatali sa "pull_request_target" ay nag-validate sa "OWNERS" na file na ibinigay sa pull request sa pamamagitan ng pagbuo at pagtawag sa codeowners-validator utility: steps: — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with: ref: refs/pull/$/running code: pr-Vlidator — run code: pr-Vlidator tumakbo: resulta/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
Ang problema ay kung ang OWNERS file ay na-format nang hindi tama, ang codeowners-validator utility ay maglalabas ng mga nilalaman ng malformed string sa standard, publicly accessible log. Ang pag-atake ay binubuo ng paglalagay ng simbolikong link na pinangalanang OWNERS sa pull request, na tumuturo sa ".credentials" na file, na nag-iimbak ng mga kredensyal sa build environment. Dahil dito, ang pagproseso ng file na ito ay nagresulta sa isang error at ang unang linya, na naglalaman ng token ng pag-access sa imbakan, ay na-output sa pampublikong log.

Bilang karagdagan, ang isa pang kahinaan ay natagpuan sa handler na sumusuri sa mga panuntunan ng editorconfig. mga hakbang: — pangalan: Kumuha ng listahan ng mga binagong file mula sa PR run: gh api […] | jq [ … ] > «$HOME/changed_files» — gumagamit ng: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: ref: refs/pull/$/merge — pangalan: Sinusuri ang EditorConfig run: cat «$HOME/changed_files» | xargs -r editorconfig-checker
Sa kasong ito, ang isyu ay ang paggamit ng "xargs" utility upang patakbuhin ang editorconfig-checker sa bawat file sa pull request. Dahil hindi na-validate ang mga filename, maaaring magsama ang isang attacker ng file na naglalaman ng mga espesyal na character sa pull request, na ipoproseso bilang command-line arguments kapag nagpapatakbo ng editorconfig-checker. Halimbawa, kapag gumagawa ng "--help" na file, magpapakita ang editorconfig-checker ng pahiwatig tungkol sa mga available na opsyon.
Pinagmulan: opennet.ru
