Проблема безопасности CodeCov Bash Uploader
Как минимизировать нашу поверхность атаки с Circleci Контексты помогли нам пройти проблему безопасности CodeCov Bash Uploader невредимым
Что такое кодеков
Для тех, кто не знает, Codecov, это онлайн-платформа для отчетов о проведении проведенного кода и статистики, основанные в 2014 году. Согласно их веб-сайту, более 29 000 организаций и более 1 миллиона разработчиков используют свои инструменты. Список включает в себя Google, Atlassian, Washington Post, RBC и Procter & Gamble Co.
Его основной инструмент, Bash Uploader, используется для отправки отчетов охвата кода на платформу. Эти сообщения помогают разработчикам измерять, насколько хорошо их исходный код покрыт тестами. Это главная причина, по которой он широко используется среди разработчиков и организаций.
Как насчет нарушения?
15 апреля 2021 года, Кодеков сообщил в пресс-релизе, что кто-то получил несанкционированный доступ к его сценарию и модифицировал его без его разрешения.
«Наше расследование решило, что начиная с 31 января 2021 года, были периодические, несанкционированные изменения нашего сценария загрузчика Bash загрузчиком третьей стороной, что позволило им потенциально экспортировать информацию, хранящуюся в средах непрерывной интеграции наших пользователей. Эта информация затем отправлена на сторонний сервер за пределами инфраструктуры Кодекова « »
По словам Кодеков, хакер получил доступ к:
Любые учетные данные, токен или ключ, которые клиенты проходили через их непрерывный бегун интеграции, которые были бы доступны при выполнении сценариев загрузчика Bash;
Любой сервис, хранилище данных и код приложения, который может быть доступен с этими учетными данными, токенами или ключами;
Дистанционная информация GIT (URL-адрес репозитория происхождения) репозиториев с использованием загрузчика Bash для загрузки покрытия в CodeCov в их непрерывной интеграции.
Для тех потенциальных угроз, Кодеков сильно поощряет разработчиков немедленно переворачивать все свои учетные данные, токены или ключи, расположенные в переменных среда в их процессе CI.
Почему мы в безопасности от этого в Cloudskiff?
Мы используем Circleci для постоянного создания, тестирования и развертывания нашего детектирования дрейфа с открытым исходным кодом CLI, driftctl Отказ Как и большинство проектов, нам нужно манипулировать чувствительными переменными среды, которые могут означать, что это событие может повлиять на нас.
Но Circleci Обеспечивает простой и безопасный способ хранения и поделиться этими чувствительными переменными среды между проектами и заданиями (или трубопроводами или шагами в других Ci), это называется контекст Отказ Как организация в Circleci, вы можете, в ваших настройках создавать и управлять контекстами.
Вы можете использовать контекстную клавишу в разделе «Рабочие процессы» файла Configpt Project.yml, чтобы дать любые задания доступ к переменным среды, связанные с контекстом.
version: 2.1 # Jobs declaration for build, test and deploy not displayed workflows: build-test-deploy: jobs: - build - test - deploy: context: restricted-context requires: - build - test
В приведенном выше примере только задание развертывания имеет доступ к переменным среды, созданные в контексте ограничения-контекста. С другой стороны, задания по сборке и тестированию не имеют никакого доступа к чувствительным переменным в их выполнении.
Это в основном то, что мы делаем сегодня в нашем файле circleci config.yml. Каждый раз, когда нам нужно позвонить на нашу тестовую работу, чтобы выполнить сценарий загрузчика CodeCov Bash Uploader (E.G. Каждый push, pull request и release рабочие процессы), поскольку мы не прикрепляем к нему никакого контекста, у хакера нет доступа к нашим секретным переменным.
Мы стараемся сохранить нашу работу как можно маленькую, чтобы уменьшить поверхность атаки путем разделения проблем, а контекст Circleci хорошо подходит для помощи в этой хорошей практике.
Мы могли бы избежать этой угрозы
Один из способов, которым мы могли бы избежать, это так же, как кодеков начал расследовать атаку. Компания сообщила утром 1 апреля 2021 года, что один клиент использовал Shasum, который доступен на его загрузке Bash, чтобы подтвердить целостность загрузки, извлеченного из https://codecov.io/bash Отказ
Действительно, как указано на своем веб-сайте документации, «его можно проверить для правильности, вычисляя Shasum на загрузку и сравнение с результатом, который мы храним в репозитории GitHub».
Примером может быть:
$ curl -s -o codecov https://codecov.io/bash \ && VERSION=$(grep 'VERSION=\".*\"' codecov | cut -d'"' -f2) \ && shasum -a 512 -c --ignore-missing <(curl -s [https://raw.githubusercontent.com/codecov/codecov-bash/${VERSION}/SHA512SUM)](https://raw.githubusercontent.com/codecov/codecov-bash/${VERSION}/SHA512SUM))
Этот простой скрипт может быть запущен на каждом задании теста перед запуском Bash Uploader. Если бы мы делали это таким образом, мы могли бы видеть раньше взлома, и мы могли бы сообщить о нем раньше Кодекову.
Наша окончательная проблема испытаний выглядит так:
test: docker: - image: golang:1.16 steps: - checkout - run: make install-tools - run: make test - run: name: Check Codecov command: | curl -s -o codecov https://codecov.io/bash \ && VERSION=$(grep 'VERSION=\".*\"' codecov | cut -d'"' -f2) \ && shasum -a 512 -c --ignore-missing <(curl -s https://raw.githubusercontent.com/codecov/codecov-bash/${VERSION}/SHA512SUM) - run: name: Codecov upload command: | chmod +x codecov ./codecov
Driftctl — это Свободный и открытый источник CLI, что следы, анализы, приоритеты и предупреждает о дрейфу инфраструктуры
Больше информации о нас
Справка:
Оригинал: «https://dev.to/driftctl/codecov-bash-uploader-security-issue-2b7e»