Код-ревью 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.

Что должен найти ревьюер

  1. Безопасностьстрока 3
    write-all даёт токену CI все права: компрометация любого шага позволяет писать в репозиторий и релизы. Нужны минимальные permissions.
  2. Безопасностьстрока 2
    Релиз на любой push в любую ветку: публиковать нужно только из защищённой ветки или тега.
  3. Безопасностьстрока 8
    Действие закреплено по ветке main, а не по SHA.
  4. Безопасностьстрока 9
    Стороннее действие малоизвестного автора по тегу: тег можно перевесить.
  5. Безопасностьстрока 10
    curl | sh выполняет непроверенный скрипт без закрепления версии и проверки хеша.
  6. Безопасностьстрока 11
    npm install вместо npm ci: сборка не строго по lock-файлу.
  7. Безопасностьстрока 13
    Образ публикуется с тегом latest без подписи и provenance: на проде нельзя проверить, что это ваш образ.

Разбор

Хороший релизный пайплайн: минимальные права, только защищённые ветки, все внешние компоненты закреплены по хешу, воспроизводимая установка, подпись образа и provenance.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.