Supply Chain Monitor – открытый инструмент Elastic для автоматического мониторинга популярных пакетов в PyPI и npm на предмет признаков компрометации цепочки поставок. Система отслеживает новые релизы в обоих реестрах, сравнивает каждый выпуск с предыдущей версией, передаёт различия в LLM через Cursor Agent CLI и, если модель считает релиз вредоносным, отправляет предупреждение в Slack. Проект распространяется по лицензии MIT и опубликован на GitHub 27 марта 2026 года.
| Параметр | Описание |
|---|---|
| Назначение | Мониторит новые релизы популярных пакетов в PyPI и npm и ищет признаки supply chain-атаки |
| Основной механизм | Получает новые версии, строит diff с предыдущим релизом, передаёт изменения на анализ LLM и шлёт alert в Slack |
| Поддерживаемые экосистемы | PyPI и npm, обе включены по умолчанию |
| Зависимости | Python 3.9+, Cursor Agent CLI, опционально Slack-бот |
| Формат работы | Однократный запуск, непрерывный мониторинг, отдельный diff и отдельный анализ |
| Лицензия | MIT |
Supply Chain Monitor наблюдает за самими публичными реестрами и пытается как можно раньше заметить, что в популярный пакет попал подозрительный релиз. Проект работает с потоком новых публикаций в PyPI и npm. Такой подход делает инструмент ближе к системе раннего обнаружения, чем к обычной проверке зависимостей в CI.
Elastic отдельно указывает, что именно этот инструмент помог обнаружить компрометацию пакета axios 0.30.4. Система зафиксировала подозрительный релиз, построила diff, передала его на анализ и получила вердикт, после чего команда смогла быстро отреагировать. Эта история важна для оценки проекта, потому что показывает не только лабораторную схему из README, но и реальный кейс применения. Проект распространяется по лицензии MIT. Для внутреннего развёртывания и доработки это удобная модель.
Как работает Supply Chain Monitor
Для PyPI и npm запускаются отдельные потоки опроса, а дальше обе ветки сходятся в единый конвейер анализа и оповещения. В случае PyPI инструмент берёт список популярных пакетов из набора hugovk/top-pypi-packages, затем вызывает changelog_since_serial() через XML-RPC и отбирает только события «new release» по пакетам из списка наблюдения. В случае npm проект использует набор download-counts для формирования watchlist и читает реестр через CouchDB-поток _changes, после чего выделяет новые версии, опубликованные после последнего прохода.
Для каждого нового релиза монитор скачивает старую и новую версии пакета, строит унифицированный diff в Markdown и передаёт его Cursor Agent CLI в режиме ask. Промпт заставляет модель оценивать изменения как «benign» или «malicious» и кратко объяснять вывод. Если вердикт вредоносный, инструмент публикует предупреждение в Slack. Журналы пишет и в консоль, и в ежедневный лог-файл. Состояние опроса сохраняет в last_serial.yaml, чтобы после перезапуска продолжить работу с нужной точки.
README довольно прямо перечисляет типы признаков, на которые ориентируют модель. Среди них обфускация через base64, exec, eval или XOR, сетевые обращения к неожиданным хостам, запись файлов в каталоги автозапуска и закрепления, запуск процессов и shell-команд, скрытие данных в медиафайлах, кража токенов и учётных данных, а также признаки тайпсквоттинга. С практической точки зрения это значит, что проект сосредоточен не на уязвимостях вообще, а именно на симптомах вредоносной подмены или компрометации релиза.
Как использовать на практике
В однократном режиме можно запустить анализ последних событий примерно за десять минут командой python monitor.py --once. Для постоянного режима проект предлагает задавать размер watchlist и интервал опроса, например следить за топ-1000 пакетов с интервалом в пять минут или за топ-15000 пакетов уже с предупреждениями в Slack. Отдельные скрипты позволяют вручную сравнить две версии пакета, запустить только анализ diff-файла или отдельно посмотреть, что сейчас выходит в PyPI без полного конвейера LLM-анализа.
Практическая ценность здесь в том, что проект легко разложить на части. Можно использовать его как непрерывный мониторинг реестров, можно как утилиту для diff между двумя версиями пакета, а можно как оболочку вокруг Cursor Agent CLI для вынесения вердикта по уже готовому diff. Такая модульность делает проект полезнее, чем «монолит на один сценарий».
Лучше всего Supply Chain Monitor подходит командам безопасности, которые следят за экосистемными угрозами, а не только за своими собственными зависимостями. Проект особенно уместен там, где есть необходимость наблюдать за верхушкой PyPI и npm, быстро получать предупреждения по подозрительным публикациям и сразу видеть объяснение, почему релиз выглядит вредоносным. Для команд разведки угроз и AppSec такой формат может быть полезен как внешний «радар» по двум крупнейшим пакетным экосистемам.
Как установить и запустить
Требуется Python 3.9+ и установленный Cursor Agent CLI.
Установка зависимостей:
pip install -r requirements.txt
Установка Cursor Agent CLI:
curl https://cursor.com/install -fsS | bash
Проверка:
agent --version
Далее нужно авторизоваться в Cursor и настроить Slack в файле etc/slack.json.
Примеры запуска:
# разовый запуск
python monitor.py --once
# постоянный мониторинг
python monitor.py --top 1000 --interval 300
# с алертами в Slack
python monitor.py --top 15000 --interval 300 --slack
Сильные стороны и ограничения
| Плюсы | Минусы |
|---|---|
| Следит сразу за PyPI и npm и работает с реестрами в режиме, близком к реальному времени | Зависит от Cursor Agent CLI и внешнего LLM-сервиса |
| Строит diff между релизами, а не ограничивается списком новых версий | Анализ идёт последовательно и может отставать при высокой скорости публикаций |
| Умеет автоматически предупреждать в Slack | Списки популярных пакетов обновляет только при перезапуске |
| Легко разбирается на отдельные утилиты для diff, анализа и исследования PyPI | На Windows нет такой же изоляции анализа, как на macOS/Linux |
| Уже показал практическую ценность на кейсе с axios 0.30.4 | Фокусируется на топ-пакетах, а не на всей экосистеме без ограничений |
Supply Chain Monitor – не средство для локальной проверки зависимостей разработчика, а внешний мониторинг популярных пакетов в двух крупнейших реестрах. Его сильная сторона в том, что он сводит в одну цепочку наблюдение за публикациями, построение diff, LLM-анализ и оповещение. После кейса с axios проект уже трудно считать просто экспериментом. В то же время он остаётся инструментом с явной зависимостью от Cursor Agent CLI и с ограничениями по пропускной способности. Для AppSec- и threat intelligence-команд это выглядит как полезный радар по PyPI и npm, но не как автономное и исчерпывающее решение всей проблемы software supply chain.