Код-ревью Middle Зависимости и supply chain обновлено
Ревью: workflow сборки и публикации
Вопрос
Найдите проблемы безопасности цепочки поставок в workflow.
name: release
on: push
permissions: write-all
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- uses: someone/setup-tool@v1
- run: curl -sSL https://install.example.sh | sh
- run: npm install
- run: npm run build
- run: docker build -t registry.example.com/app:latest . && docker push registry.example.com/app:latest
Коротко
Хороший релизный пайплайн: минимальные права, только защищённые ветки, все внешние компоненты закреплены по хешу, воспроизводимая установка, подпись образа и provenance.
Что должен найти ревьюер
- Безопасностьстрока 3
write-allдаёт токену CI все права: компрометация любого шага позволяет писать в репозиторий и релизы. Нужны минимальныеpermissions. - Безопасностьстрока 2Релиз на любой push в любую ветку: публиковать нужно только из защищённой ветки или тега.
- Безопасностьстрока 8Действие закреплено по ветке
main, а не по SHA. - Безопасностьстрока 9Стороннее действие малоизвестного автора по тегу: тег можно перевесить.
- Безопасностьстрока 10
curl | shвыполняет непроверенный скрипт без закрепления версии и проверки хеша. - Безопасностьстрока 11
npm installвместоnpm ci: сборка не строго по lock-файлу. - Безопасностьстрока 13Образ публикуется с тегом
latestбез подписи и provenance: на проде нельзя проверить, что это ваш образ.
Разбор
Хороший релизный пайплайн: минимальные права, только защищённые ветки, все внешние компоненты закреплены по хешу, воспроизводимая установка, подпись образа и provenance.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.