Если разработчик, выбирая между удобством и безопасностью, выбирает удобство, он не получит ни удобства, ни безопасности

Инженер по безопасности загрузил вредоносный скрипт в свой аккаунт 1280x1080 nice-security-engineering_exw.png
Инженер по безопасности загрузил вредоносный скрипт в свой аккаунт

Прошло всего-навсего пол года, но новостная лента не переставала приносить новые забавные уязвимости.
Как обычно, я не акцентирую внимание на системных уязвимостях в snapd / Rust Coreutils / Flatpak, ядре (Copy Fail, Dirty Frag, Fragnesia, pidfd, PinTheft, GRO Frag) или AppArmor.


Какими бы опасными они не были - они “условно” пассивные, то есть при их наличии необходим ряд факторов и активных действий изнутри или извне для успешной эксплуатации.

Мне гораздо интереснее следить за внедрениями вредоносного кода в системы распространения пакетов, библиотеки и прочие репозитории.

Потому что это относится к “активным” и непосредственным атакам, им почти не надо сочетания определённых факторов, после загрузки они сразу же поразят репозиторий разработчика, далее соберут его персональную/финансовую/авторизационную информацию, а после этого продолжат действовать по цепочке на всех серверах, к которым у него был доступ.

Meta-Wiki и Ололошка

Инженер по безопасности компании Wikimedia Foundation случайно загрузил вредоносный скрипт в свой аккаунт с глобальными административными правами.

Компрометация Telnyx

756 тысяч загрузок в месяц.


Всё как обычно:

  • *.env
  • ~/.aws/credentials
  • ~/.ssh/
  • ~/.gitconfig
  • ~/.kube/config
  • ~/.npmrc
  • ~/.docker/
  • ~/.pypirc
  • ENV:
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • GOOGLE_APPLICATION_CREDENTIALS
    • NPM_TOKEN
    • TWINE_PASSWORD
  • Crypto Wallets

Компрометация LiteLLM через цепочку зависимостей

95 млн загрузок в месяц.


Сбор данных:

  • SSH keys
  • environment variables (API keys, secrets)
  • AWS/GCP/Azure/K8s credentials
  • Crypto Wallets
  • database passwords
  • SSL private keys
  • shell history
  • CI/CD configs

Компрометация elementary-data через GitHub Actions

Поражение каталога PyPI, GitHub-репозитория и официального Docker-образа.
1.1 млн загрузок в месяц.

GitHub Actions
GitHub Actions

Скрипт собирает:

  • Да всё то же самое 。^‿^。


Постоянные вопросы

После прочтения подобных новостей у меня постоянно возникают вопросы:

  • Что делают ключи / токены рядом с выполняемым проектом?
    Хотя вести разработку при особом желании можно отдельно от других проектов.
  • Зачем держать все проекты под одной учёткой?
  • Что под этими учётками вообще делают крипто-кошельки?

Пожалуй, мне хватит этой и предыдущих публикаций в качестве аргументов в споре с коллегами “Почему я так переусложняю конфигурацию собственной системы”.