p PatchFirst

Для DevOps, SRE и сисадминов

Тысяча CVE. Какие чинить сегодня?

Сканер выдал простыню: половину Ubuntu уже закрыла бэкпортами, а уязвимость из KEV в публичной службе потерялась в середине. Платный мониторинг PatchFirst собирает очередь P0–P3. Бесплатная проверка показывает рейтинг и подсвеченный стек без детализации.

Разовая проверка одного сервера — рейтинг, стек с подсветкой и общие слепые зоны. Мониторинг — платный. Годовая подписка дешевле на 20%: один сервер на год — $28,80 вместо $36,00. Первые 5 серверов — $3,00 за каждый в месяц; с 6-го сервера — $2,00; с 26-го сервера — $1,50.

Поток находок у серверной стойки проходит сортировку и превращается в три очереди приоритетов.

Что проверяем

Сейчас — пакеты, точные версии зависимостей и распознанные продукты. Охват зависит от прав агента и доступных данных.

Сейчас

  • Пакеты ОС: Debian, Ubuntu, Alpine, RHEL-семейство (Rocky Linux, AlmaLinux), openSUSE и SLES.
  • PHP: composer.lock.
  • Node.js: npm (package-lock.json), Yarn v1 и Berry (yarn.lock), pnpm (pnpm-lock.yaml).
  • Python: poetry.lock, Pipfile.lock, uv.lock, requirements*.txt с точными версиями ==; установленные пакеты в найденных venv/site-packages.
  • Версии рантаймов и служб, распознанных по каталогу продуктов.
  • Образы контейнеров — по имени и тегу; содержимое образов не проверяется и остаётся слепой зоной. Неизвестные образы и плавающие теги требуют ручной проверки.

Прямые и транзитивные зависимости; dev-зависимости помечаются. Поиск ограничен правами доступа, временем и числом файлов и пакетов. Неточные версии и сработавшие ограничения отражаются в слепых зонах.

Скоро

  • Ruby: Gemfile.lock.
  • Go: go.sum и сведения о сборке бинарников.
  • Rust: Cargo.lock.
  • Java: lock-файлы Maven/Gradle и манифесты jar.

Эти экосистемы пока не проверяются.

Старая версия — ещё не ответ.

Один пакет уже исправлен дистрибутивом. Другой пришёл из PPA и выпал из проверки. Для них нужны разные правила.

Не чинить уже исправленное

Ubuntu может перенести исправление в старую ветку без смены основной версии. PatchFirst проверяет пакеты дистрибутива через OSV по исходному пакету и версии, а не сравнивает их только с диапазонами апстрима.

Это помогает уменьшить шум от бэкпортов и оставить время на реальные обновления.

Не потерять сторонний пакет

PatchFirst распознаёт признаки сторонних репозиториев в версии, исключает такие пакеты из OSV-проверки дистрибутива и сопоставляет их с CVE.org как апстрим.

Реальный случай из разработки PatchFirst: RCE в PHP 8.3.35 из PPA sury, OSV эту уязвимость не показывал. Поэтому для PPA нельзя полагаться только на данные дистрибутива.

Для свежих CVE PatchFirst отдельно отмечает случаи, когда у дистрибутива ещё нет записи OSV с нужным пакетом.

В мониторинге — очередь работ вместо счётчика CVE.

Риск = тяжесть (0–10: приоритет дистрибутива, иначе CVSS) × эксплуатируемость (KEV ×2, эксплойт ×1,4…) × доступность (наружу 1,0; возможно наружу 0,8; внутри сети 0,6; локально 0,45). Например, CVSS 7 + KEV на публичном сервисе = 7 × 2 × 1,0 = 14 → P0, чинить сегодня.

P0 и P1 — в начало очереди

P0 — риск ≥14 или KEV на публичном компоненте; ориентир исправления — сутки. P1 — следующая очередь, ориентир — неделя. Если есть P0, итоговый рейтинг не выше 49.

P2 и P3 — в план работ

P2 — ориентир на месяц, P3 — остальные находки. Отчёт сохраняет детали: приоритет помогает выбрать порядок, но решение об обновлении остаётся у инженера.

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

Установить обновление недостаточно, если работает старое ядро. А образ с плавающим тегом не даёт надёжной версии для проверки.

Ядро обновили. Перезагрузили?

PatchFirst анализирует запущенное ядро. Если установлено более новое, в отчёте будет отдельная находка о необходимости перезагрузки.

База не должна торчать наружу

Доступные снаружи БД, Redis и Docker API попадают в отдельные находки. Номера портов остаются на сервере владельца. Агент оценивает доступность по bind и публичному адресу, без внешней пробы.

Слепые зоны не спрятаны

Нераспознанные образы и плавающие теги вроде latest или 17 отмечаются как слепые зоны.

Зависимости приложения тоже входят в проверку.

PatchFirst проверяет composer.lock, npm/Yarn/pnpm и Python pip/poetry по точным версиям, включая транзитивные и dev-зависимости. Метки lock-файлов показывают проект; ограничения сбора попадают в слепые зоны. Ruby, Go, Rust и Java пока не поддерживаются.

Без root. С контролем отправки.

Агент — один файл: автономный бинарник или zipapp для Python. Для мониторинга установщик добавляет пользовательский cron раз в 6 часов.

Сначала посмотрите payload

Режим dry-run показывает, что отправит агент. Для бесплатной проверки можно получить обезличенный JSON, просмотреть его и вставить на странице вручную.

Python не обязателен: бинарник содержит всё для шифрования имён. Для шифрования имён в варианте на Python нужен python3-cryptography. Агент собирает технический инвентарь без доступа к содержимому ваших баз данных.

Обезличивание — до отправки

Хосты заменяются на UUID, IP — на признак публичного адреса. Пути и частные названия скрываются HMAC-метками. При включённом шифровании имён словарь зашифрован отдельным ключом, которого у сервиса нет. Без шифрования агент словарь не отправляет.

Обезличенные инвентари и отчёты хранятся в PostgreSQL в читаемом для сервиса виде. Бэкапы шифруются отдельным ключом получателя. Подробнее о данных →

Имена можно не задавать: в кабинете останется «Сервер 01». Для удобства можно указать условное имя, например web-1: оно хранится открыто. Не пишите домен, IP-адрес, название компании или клиента. Если нужна защита, включите шифрование имён в разделе «Аккаунт»: браузер перенесёт заданные имена в зашифрованный словарь, а открытые копии удалятся с сервиса.

Ограничения

Начните с одного хоста

Посмотрите, каким компонентам нужно внимание.

Разовая проверка бесплатна: команда возвращает ссылку на отчёт, или вы загружаете обезличенный JSON. В отчёте — рейтинг, названия и установленные версии компонентов с подсветкой, общие слепые зоны. Что именно уязвимо и что обновить первым — в платном мониторинге. Регулярный контроль — в платном мониторинге. Годовая подписка дешевле на 20%: один сервер на год — $28,80 вместо $36,00. Первые 5 серверов — $3,00 за каждый в месяц; с 6-го сервера — $2,00; с 26-го сервера — $1,50.