Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ GitHub Actions, позволявшая ΡΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Nixpkgs

Раскрыты свСдСния ΠΎΠ± уязвимостях Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… GitHub Actions, автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ pull-запросов Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Nixpkgs, примСняСмый Π² дистрибутивС NixOS ΠΈ Π² экосистСмС, связанной с ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ Nix. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ позволяла постороннСму ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‚ΠΎΠΊΠ΅Π½, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ доступ Π½Π° запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π² Nixpkgs. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ позволял Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² любой ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π² ΠΎΠ±Ρ…ΠΎΠ΄ процСссов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ рСцСнзирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ Nixpkgs ΠΈ подстановки своСго ΠΊΠΎΠ΄Π° Π² любой ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Ρ‹Π»Π° продСмонстрирована исслСдоватСлями бСзопасности Π² октябрС ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ NixCon ΠΈ сразу Π±Ρ‹Π»Π° устранСна Π² инфраструктурС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, подробности ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠ΅ раскрыты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ спустя Π³ΠΎΠ΄. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° связана с использованиСм Π² GitHub-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Nixpkgs ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² GitHub Actions, привязанных ΠΊ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Β«pull_request_targetΒ» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈ поступлСнии Π½ΠΎΠ²Ρ‹Ρ… pull-запросов.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ события Β«pull_requestΒ» Π² Β«pull_request_targetΒ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ прСдоставялСтся доступ Π½Π° запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊ сборочному ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого внимания ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² pull-запросС. Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· привязанных ΠΊ Β«pull_request_targetΒ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π² pull-запросС Ρ„Π°ΠΉΠ»Π° Β«OWNERSΒ», для Ρ‡Π΅Π³ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Π»Π°ΡΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ ΡƒΡ‚ΠΈΡ‚ΠΈΡ‚Π° 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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² случаС ошибки оформлСния Ρ„Π°ΠΉΠ»Π° OWNERS ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° codeowners-validator Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»Π° содСрТимоС Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠΉ строки Π² стандартный Π»ΠΎΠ³, доступный ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ. Атака свСлась ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² pull-запросС символичСской ссылки с ΠΈΠΌΠ΅Π½Π΅ΠΌ OWNERS, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅ΠΉΡΡ Π½Π° Ρ„Π°ΠΉΠ» Β«.credentialsΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² сборочном ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. БоотвСтствСнно, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ ошибкС ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π»ΠΎΠ³ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, содСрТащСй Ρ‚ΠΎΠΊΠ΅Π½ доступа ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.

 Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ GitHub Actions, позволявшая ΡΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Nixpkgs

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€Π°Π²ΠΈΠ» editorconfig. steps: β€” name: Get list of changed files from PR run: gh api […] | jq [ … ] > Β«$HOME/changed_filesΒ» β€” uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge β€” name: Checking EditorConfig run: cat Β«$HOME/changed_filesΒ» | xargs -r editorconfig-checker

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° Π² использовании ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Β«xargsΒ» для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ editorconfig-checker с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ· pull-запроса. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ»ΠΈΡΡŒ Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ³ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² pull-запросС Ρ„Π°ΠΉΠ» со спСцсимволами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΏΡ€ΠΈ запускС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ editorconfig-checker ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. НапримСр, ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° Β«β€”helpΒ» ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° editorconfig-checker Π²Ρ‹Π²Π΅Π»Π° Π±Ρ‹ подсказку ΠΎΠ± ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ опциях.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ