Skip to content

Data Sources

Andrii Sheiko edited this page Nov 3, 2026 · 6 revisions

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

Canonical CVE feed (Ubuntu, основне)

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.

Ubuntu OVAL (альтернатива)

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.

Debian Security Tracker (Debian, основне)

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 package linux — Debian веде kernel-фікси через версію пакета, тому перевіряється версія встановленого linux-image-*, а не uname -r напряму;
  • advisory-правила для CVE без опублікованої fixed version.

AlmaLinux OVAL

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), тож результату для такого пакета довіряти не можна.

Загальне рішення поки не планується: мейнтейнери ведуть репозиторії по-різному, тому підтримку можна додавати точково, дослідивши, як саме мейнтейнер працює з конкретним репозиторієм.

Джерела enrichment

Окремо від рулсетів builder (у режимах --write-priority / --priority-only) звертається до CISA KEV і FIRST EPSS для збагачення cve-priority.json. Це не джерела правил — див. Priority.

Clone this wiki locally