Отравленный релиз LiteLLM два часа крал учётные данные, пока PyPI его не убрал
Вредоносные колёса LiteLLM 1.107.0 не совпадали ни с одним коммитом в истории проекта. В них была одна внедрённая строка data = "cook", которая копировала три файла-импланта в site-packages.
LiteLLM 1.107.0 появился на PyPI 21 октября в 11:39 UTC и внутри каждого процесса Python на машине запускал стилер учётных данных. Скрытый демон затем раз в час звонил домой за новым кодом, а к 13:40 релиз уже убрали.
Помогла бы задержка установки зависимостей? Один специалист по безопасности цепочки поставок из треда считает, что достаточно и 24 часов. Скептик уверен, что медианная атака остаётся незамеченной месяцами.
Релиз, которому не соответствует ни один коммит в git
Разбор SafeDep начинается с несоответствия: в pyproject.toml из sdist была внедрённая строка data = "cook", которая копировала три файла-импланта в site-packages. «Upstream-репозиторий на GitHub их не содержит». SafeDep с умеренной и высокой уверенностью считает, что приватный релизный конвейер BerriAI собрал колёса из исходного кода, изменённого злоумышленниками, но подтвердить это смогут только логи конвейера.
Один файл .pth — и каждый процесс Python
Файл cook.pth запускает стилер в каждом процессе Python на машине. Он охотится за SSH-ключами, учётными данными облака и CI/CD, паролями из браузеров, токенами AI-инструментов, ключами провайдеров из базы прокси LiteLLM и метаданными AWS-инстансов. Всё собранное он шифрует и отправляет на www.litellm[.]dev.
Второй файл, sitecustomize.py, запускает отсоединённый демон, который просыпается каждый час. Он читает домен сервера из файла на GitHub, снова запускает стилер и выполняет код, который возвращает сервер. Аккаунт на GitHub удалили примерно через два часа после релиза, так что демону теперь не к кому обращаться. Хосты, которые запустили пакет раньше, могли уже получить код второго этапа.
Окно, всё 21 октября по UTC: колёса собраны с 11:20 по 11:37, загружены с 11:39 по 11:40, релиз на GitHub появился в 11:50, а к 13:40 релиз исчез с PyPI и аккаунт был удалён.
«Задержки короче этого — шарлатанство»
Задержки установки зависимостей, то есть пауза перед тем, как новый релиз можно поставить, стали первым спором в треде.
«Когда я в последний раз искал данные, помню, медианная атака на цепочку поставок оставалась незамеченной месяцами, а то и годами. Задержки короче этого — шарлатанство.» — комментатор
Ответ пришёл от разработчика, чей профиль ведёт на инструмент pmg от SafeDep.
«Даже задержки в 24 часа достаточно, чтобы защитить потребителей от таких взломов.» — разработчик, в профиле которого указан pmg от SafeDep
Этот релиз прожил около двух часов. У задержек тоже есть цена: инженер, который держит семидневную задержку на внутреннем прокси PyPI, говорит, что она задерживает и обновления безопасности, поэтому он исключает их вручную.
Песочницы: их отключают или игнорируют к сотому запросу
Другой комментатор усомнился, что песочницы вообще помогают.
«В какой-то момент всплывающие окна с разрешениями надоедают, и мы начинаем выдавать любое разрешение как нормальное.» — комментатор
Не все согласились.
«Нет, это можно заблокировать инструментами песочницы.» — пользователь, который запускает своих coding-агентов за песочницей Nono
Его схема пропускает трафик агента через прокси, который подставляет учётные данные, поэтому настоящих ключей у агента нет.
LiteLLM попадает в цель не впервые. Один разработчик откопал старый аудит-скрипт за март:
«Это уже вторая серьёзная эксплуатация LiteLLM за год или два?»
Прокси LiteLLM хранит ключи провайдеров для каждой модели, которую вызывает компания, поэтому тот, кто установил 1.107.0, должен считать все учётные данные на этом хосте украденными и сменить их, а не сначала проверять три файла.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
ООН объявила 1,5°C утраченными и требует сократить выбросы на 69% к 2040
Доклад ЮНЕП называется «Точка невозврата». Вывод: шанс уложиться в 1,5°C с ограниченным превышением «утрачен», поэтому цель теперь — остаться ниже 2°C и вернуться к 1,5°C к 2100 году.