Datgelwyd gwendidau mewn trinwyr GitHub Actions, sy'n cael eu galw'n awtomatig wrth gyflwyno ceisiadau tynnu i'r storfa becynnau Nixpkgs, a ddefnyddir yn y dosbarthiad NixOS ac ecosystem rheolwr pecynnau Nix. Roedd y gwendidau'n caniatáu i ddefnyddiwr heb awdurdod echdynnu tocyn a oedd yn rhoi mynediad darllen ac ysgrifennu i god ffynhonnell yr holl becynnau a gynhelir yn Nixpkgs. Roedd y tocyn hwn yn caniatáu addasu unrhyw becyn yn uniongyrchol trwy storfa Git y prosiect, gan osgoi'r prosesau adolygu a chymeradwyo.
Dangoswyd y gallu i beryglu Nixpkgs a chwistrellu cod personol i unrhyw becyn gan ymchwilwyr diogelwch fis Hydref diwethaf yng nghynhadledd NixCon a chafodd ei drwsio ar unwaith yn seilwaith y prosiect. Fodd bynnag, dim ond blwyddyn yn ddiweddarach y datgelwyd manylion yr ymosodiad. Roedd y broblem yn gysylltiedig â defnyddio trinwyr GitHub Actions yn ystorfa GitHub Nixpkgs, sydd wedi'u rhwymo i'r digwyddiad "pull_request_target" ac yn perfformio gwiriadau awtomataidd ar geisiadau tynnu newydd.
Yn wahanol i'r digwyddiad "pull_request", rhoddir mynediad darllen/ysgrifennu i'r amgylchedd adeiladu i drinwyr yn "pull_request_target", sy'n gofyn am ofal arbennig wrth weithio gyda data a basiwyd mewn cais tynnu. Dilysodd un o'r trinwyr sydd wedi'u rhwymo i "pull_request_target" y ffeil "OWNERS" a ddarparwyd yn y cais tynnu trwy adeiladu a galw'r cyfleustodau codeowners-validator: camau: — defnyddiau: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf gyda: cyf: refs/pull/$/merge llwybr: pr — rhedeg: nix-build base/ci -A codeownersValidator — rhedeg: result/bin/codeowners-validator amgylchedd: OWNERS_FILE: pr/ci/OWNERS
Y broblem oedd, pe bai'r ffeil OWNERS wedi'i fformatio'n anghywir, byddai'r cyfleustodau codeowners-validator yn allbynnu cynnwys y llinyn camffurfiedig i'r log safonol, sydd ar gael i'r cyhoedd. Roedd yr ymosodiad yn cynnwys gosod dolen symbolaidd o'r enw OWNERS yn y cais tynnu, gan bwyntio at y ffeil ".credentials", sy'n storio manylion mewngofnodi yn yr amgylchedd adeiladu. O ganlyniad, arweiniodd prosesu'r ffeil hon at wall ac allbynnwyd y llinell gyntaf, yn cynnwys tocyn mynediad y storfa, i'r log cyhoeddus.

Yn ogystal, canfuwyd bregusrwydd arall yn y trinwr sy'n gwirio rheolau editorconfig. camau: — enw: Cael rhestr o ffeiliau wedi'u newid o PR rhediad: gh api […] | jq [ … ] > «$HOME/changed_files» — defnyddiau: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 gyda: cyf: refs/pull/$/merge — enw: Gwirio EditorConfig rhediad: cat «$HOME/changed_files» | xargs -r editorconfig-checker
Yn yr achos hwn, y broblem oedd y defnydd o'r cyfleustodau "xargs" i redeg editorconfig-checker gyda phob ffeil yn y cais tynnu. Gan nad oedd enwau ffeiliau wedi'u dilysu, gallai ymosodwr gynnwys ffeil sy'n cynnwys nodau arbennig yn y cais tynnu, a fyddai'n cael ei phrosesu fel dadleuon llinell orchymyn wrth redeg editorconfig-checker. Er enghraifft, wrth greu ffeil "--help", byddai editorconfig-checker yn dangos awgrym am yr opsiynau sydd ar gael.
Ffynhonnell: opennet.ru
