Avatud on teave GitHub Action'ite haavatavuste kohta, mis käivitatakse automaatselt, kui esitatakse pull-request'e Nixpkgs'i pakettide hoidlasse, mida kasutatakse NixOS'i ja Nix'i paketihalduri ökosüsteemis. Haavatavus võimaldas kolmandatel isikutel hankida märgise, mis andis lugemis- ja kirjutamisõiguseid kõigi Nixpkgs'is hoitavate pakettide lähtekoodile. See märgis võimaldas otse muudatusi teha igas pakendis projekti Git-repos, mööda kontrollimis- ja ülevaatusprotsessidest.
Nixpkgs'i kompromiteerimise ja oma koodi sisestamise võimalus demonstreeriti turvauuringute läbiviijate poolt eelmisel aastal NixCon konverentsil ning see kõrvaldatud kohe projekti infrastruktuuris. Siiski paljastati rünnaku üksikasjad alles aasta hiljem. Probleem oli seotud GitHub'i Nixpkgs'i hoidlas kasutatavate GitHub Action'ite käitlejatega, mis olid seotud "pull_request_target" sündmusega ja viisid automaatsete kontrollideni, kui saabuvad uued pull-request'id.
Erinevalt sündmusest «pull_request» omab «pull_request_target» käitlejatel kirjutamise ja lugemise juurdepääsu ehituskeskkonnale, mis nõuab erilist tähelepanu andmete töötlemisel, mis edastatakse pull-päringus. Ühes «pull_request_target» käitlejaga kontrolliti pull-päringus esitatud faili «OWNERS», milleks koguti ja kutsuti välja utiliit 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
Probleem seisnes selles, et kui FAILI OWNERS vormistamisel tekkis viga, siis utiliit codeowners-validator väljastas ebaõigesti vormistatud rea sisu avalikku logsüsteemi. Rünnak piirnes pull-päringus sümboolse lingi paigutamisega nimega OWNERS, mis osutas failile «.credentials», kuhu ehituskeskkonnas salvestatakse autentimisteave. Seega viis selle faili töötlemine veani ja esimeses real avalikus logis kuvati juurdepääsu token repository.

Lisaks leiti veel üks haavatavus editorconfig reeglite kontrollimiseks mõeldud protsessoris. steps: — name: Hangi muudetud failide loend PR-ist run: gh api […] | jq [ … ] > «$HOME/changed_files» — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge — name: Kontrolli EditorConfig run: cat «$HOME/changed_files» | xargs -r editorconfig-checker
Antud juhul oli probleem utiliidi «xargs» kasutamises, et käivitada programmi editorconfig-checker iga faili puhul, mis on pull-requestis. Kuna faili nimesid ei kontrollitud, sai ründaja pull-requesti lisada faili erimärkidega, mis oleksid utiliidi editorconfig-checker käivitamisel käsurea argumentidena töödeldud. Näiteks, faili loomisel «—help» oleks utiliit editorconfig-checker väljastanud olemasolevate valikute kohta vihje.
Allikas: opennet.ru
