Repository navigation
Data Sources
Builder уміє працювати з чотирма джерелами. Вони взаємовиключні в межах одного запуску, але пишуть в один вихідний каталог — для змішаного парку builder просто запускається кілька разів.
Коротка шпаргалка:
| Джерело | Прапорець | Роль |
|---|---|---|
| Canonical CVE feed | --canonical-cves |
Основне джерело для Ubuntu |
| Ubuntu OVAL | --ubuntu-oval |
Альтернатива/бекап для Ubuntu, зручне для dev/test |
| Debian Security Tracker | --debian-cves |
Основне джерело для Debian |
| AlmaLinux OVAL | --almalinux-oval |
Офіційне джерело precise fixed rules для AlmaLinux 8/9/10 |
https://ubuntu.com/security/cves.json
rule-builder --canonical-cves --releases focal,jammy,noble --output-dir /srv/www/pycve/rulesЦе офіційний фід Canonical CVE tracker. Він обраний основним, бо містить per-release/per-package статуси й найточніше відображає семантику Ubuntu security tracker — зокрема стани, з яких народжуються advisory-правила.
Операційна ціна — спосіб доставки: фід пагінований із практичним максимумом limit=20 записів на сторінку, тому повний перший обхід — це тисячі HTTP-запитів, і на нестабільній мережі трапляються timeout-и та 503/504. Саме для цього builder має checkpoint/resume:
- після кожної успішної сторінки зберігається checkpoint із
next_offset; - витягнуті записи складаються append-only у
*.records.jsonlпоруч із checkpoint; - перерваний запуск продовжується з місця зупинки, а при тимчасовій недоступності фіду builder не здається після першого вичерпання retry-бюджету, а повторює з backoff;
- після успішного завершення службові файли прибираються.
Для remote-запусків checkpoint вмикається автоматично (<output-dir>/canonical-feed.checkpoint.json). Детальніше про стани checkpoint — в Architecture.
rule-builder --ubuntu-oval --releases focal,jammy,noble --output-dir /srv/www/pycve/rulesТой самий Canonical CVE tracker, але в іншій пакувальці: один OVAL XML-файл (plain або .bz2) на кожен реліз, який завантажується цілком:
https://security-metadata.canonical.com/oval/com.ubuntu.{release}.cve.oval.xml.bz2
За якістю та актуальністю дані еквівалентні --canonical-cves — обидва фіди генеруються з одного трекера. Різниця в trade-off доставки: замість тисяч маленьких пагінованих запитів — один великий файл на реліз. Це означає:
- набагато менше HTTP-запитів, немає проблеми «далеких сторінок»;
- але кожен запуск завантажує повний файл заново — часткового resume немає,
--checkpoint-pathі--max-pagesтут не застосовуються.
Тому OVAL-шлях зручний для dev/test і як аварійний фолбек, коли пагінований фід недоступний, але основним джерелом лишається --canonical-cves з його checkpoint/resume. Деталі мапінгу OVAL-статусів на match_mode/rule_status — у Server Reference.
https://security-tracker.debian.org/tracker/data/json
rule-builder --debian-cves --releases bookworm,bullseye,trixie --output-dir /srv/www/pycve/rulesОфіційний JSON-експорт Debian Security Tracker — один файл з усіма пакетами й релізами, без пагінації, тому checkpoint тут не потрібен. Наразі це найкраще практичне bulk-джерело для Debian.
З нього builder формує:
-
package_version-правила для звичайних пакетів; -
kernel_package_version-правила для source packagelinux— Debian веде kernel-фікси через версію пакета, тому перевіряється версія встановленогоlinux-image-*, а неuname -rнапряму; - advisory-правила для CVE без опублікованої fixed version.
https://security.almalinux.org/oval/org.almalinux.alsa-{release}.xml.bz2
rule-builder --almalinux-oval --releases 10 --output-dir /srv/www/pycve/rulesОфіційний AlmaLinux OVAL stream містить ALSA advisory, CVE, severity та точні RPM EVR-пороги у вигляді epoch:version-release. Builder формує package_version для звичайних RPM і kernel_package_version для пакетів запущеного ядра. Результат AlmaLinux 10 записується в almalinux10.json.
OVAL описує вже випущені виправлення, тому поточний шлях генерує precise match_mode = version правила. Unfixed/pending advisory з цього джерела не формуються. Довгі advisory descriptions не дублюються в кожному package rule, щоб release-файл залишався придатним для доставки агентам.
Усі джерела вище описують лише пакети самого дистрибутива. Пакети зі сторонніх репозиторіїв (Sury, Percona тощо) PyCVE не перевіряє, і агент ніяк про них не попереджає:
-
Для пакета немає правил. Агент нічого не повідомляє, тож
OKне означає, що такий пакет безпечний. Наприклад,php7.2із Sury на Debian trixie не дає жодної знахідки. -
Назва збігається з пакетом дистрибутива. Версія стороннього пакета порівнюється з порогом дистрибутива (наприклад,
php8.2із Sury на Debian bookworm), тож результату для такого пакета довіряти не можна.
Загальне рішення поки не планується: мейнтейнери ведуть репозиторії по-різному, тому підтримку можна додавати точково, дослідивши, як саме мейнтейнер працює з конкретним репозиторієм.
Окремо від рулсетів builder (у режимах --write-priority / --priority-only) звертається до CISA KEV і FIRST EPSS для збагачення cve-priority.json. Це не джерела правил — див. Priority.