{# Server tab "vulnerabilities": OSV findings for the installed packages. Context: s, vulns (services.vulns.summary), user, csrf #} {% set v = vulns %}
Critical
{{ v.counts.critical }}
High
{{ v.counts.high }}
Medium
{{ v.counts.medium }}
Low / unknown
{{ v.counts.low + v.counts.unknown }}
{{ v.packages }} packages{% if v.osv_ecosystem %} · {{ v.osv_ecosystem }}{% endif %}
Last scan: {% if v.scanned_at %}{{ v.scanned_at|timeago }} ({{ v.scanned_at|dt }}){% else %}not yet{% if v.inventory and v.inventory.changed_at %} — queued, the worker scans within a minute{% endif %}{% endif %}{% if v.error %} · {{ v.error }}{% endif %} · source OSV.dev · rescans when the package list changes and every 7 days. {% if v.runtimes %}
Runtimes: {% for k, val in v.runtimes.items() %}{{ k }} {{ val }}{% endfor %}
{% endif %}
{% if user.can_edit %}
{% endif %}
{% if not v.inventory or not v.packages %}

No package inventory yet

Agent 1.2+ sends the installed package list (dpkg / apk / rpm) once a day and whenever it changes; Vigil matches every package version against the OSV.dev database (Debian, Ubuntu, Alpine, Rocky/Alma advisories) and lists what needs updating. Make sure "Send package inventory" is on under Alert rules → Logs & inventory.

{% elif not v.vulns %}

No known vulnerabilities in the {{ v.packages }} installed packages{% if v.scanned_at %} (scanned {{ v.scanned_at|timeago }}){% endif %}.

{% else %}
{% for x in v.vulns %} {% endfor %}
SeverityPackageInstalled → fixedAdvisorySummarySeen
{{ x.severity }} {{ x.package }} {{ x.version }}{% if x.fixed_version %} → {{ x.fixed_version }}{% else %} (no fix yet){% endif %} {{ x.vuln_id }}{% if x.published %}
{{ x.published.strftime('%Y-%m-%d') }}
{% endif %}
{{ (x.summary or '')[:220] }}{% if x.summary and x.summary|length > 220 %}…{% endif %} {{ x.first_seen|timeago }}

Fix: apt upgrade <package> / apk upgrade / dnf update; entries disappear on the next inventory change. An incident opens when new critical vulnerabilities appear.

{% endif %}