Атака на litellm: Wake-up Call для аудита зависимостей

#security#python#supply-chain#devops

TL;DR: Атака на библиотеку litellm через цепочку поставок (supply chain attack) подчеркивает важность аудита зависимостей. Вредоносный код выполнялся сразу после установки, не требуя импорта или вызова функций. Проверьте свои проекты на наличие уязвимых версий и внедрите инструменты для автоматического аудита зависимостей.

Введение

Атаки через цепочку поставок становятся всё более изощрёнными и опасными. Недавний инцидент с библиотекой litellm — яркий пример того, как злоумышленники могут использовать доверие к популярным инструментам для внедрения вредоносного кода. В данном случае атака была обнаружена только из-за ошибки в коде злоумышленников, что привело к краху систем. Если бы код работал корректно, атака могла оставаться незамеченной неделями.

Основная часть

Что произошло?

Версии 1.82.7 и 1.82.8 библиотеки litellm содержали вредоносный код, который выполнялся сразу после установки через pip install. Код собирал SSH-ключи, AWS-креды, секреты Kubernetes, криптокошельки и переменные окружения. Важно отметить, что код не требовал импорта или вызова функций — он запускался автоматически благодаря использованию .pth файлов, которые Python загружает при старте.

Как это произошло?

Атака была осуществлена через компрометацию инструмента безопасности Trivy. Злоумышленники украли токен для публикации на PyPI и загрузили вредоносные версии litellm. Этот инцидент демонстрирует, что даже инструменты, предназначенные для защиты, могут стать точкой входа для атак.

Практические шаги

  1. Проверка версий litellm:
    Используйте команду pip show litellm на всех серверах и разработческих машинах. Если версия выше 1.82.6, считайте систему полностью скомпрометированной.

    pip show litellm
    
  2. Ротация секретов:
    Незамедлительно замените все секреты, включая AWS-ключи, пароли баз данных и API-токены для OpenAI, Anthropic и других сервисов.

  3. Аудит зависимостей:
    Проверьте все зависимости проекта на наличие litellm как транзитивной зависимости. Используйте pip freeze для получения списка установленных пакетов.

    pip freeze | grep litellm
    
  4. Фиксация версий:
    Закрепите версию litellm на 1.82.6 в файле requirements.txt до устранения проблемы.

    litellm==1.82.6
    
  5. Автоматизация аудита:
    Внедрите инструменты для автоматического аудита зависимостей, такие как pip-audit, в CI/CD конвейер. Добавьте pre-commit хук для ручного ревью новых зависимостей.

    pip install pip-audit
    pip-audit
    

Пример интеграции pip-audit в CI/CD

# .github/workflows/audit.yml
name: Dependency Audit

on: [push, pull_request]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Install pip-audit
        run: pip install pip-audit
      - name: Run pip-audit
        run: pip-audit

Заключение

Атака на litellm — это серьёзный сигнал для всех разработчиков о необходимости более внимательного отношения к зависимостям. Внедрение инструментов для автоматического аудита и регулярный мониторинг зависимостей должны стать стандартной практикой в каждом проекте. Помните, что безопасность — это не разовая акция, а непрерывный процесс.

Проверьте свои проекты уже сегодня.


Источник: https://www.reddit.com/r/webdev/comments/1s496iy/that_litellm_supply_chain_attack_is_a_wake_up/