Files
Timur Tukaev ec2203a934 docs(security): publish vulnerability reporting and a backlog reconciliation
Four independent reviews of the first draft of this reporting found that it
overstated remediation, understated how much of the backlog was never
applicable, and contained a disclosure leak the stated rule had not
anticipated. What lands here is the corrected version.

The reconciliation is the substantive artifact. It audits every finding the
CVE-scanning pipeline has tracked against what the project actually shipped,
because the pipeline has no write-back from this repository and so has never
marked anything fixed. Findings: remediation did happen and is invisible to the
tracker, concentrated in one wave in June 2026 rather than the steady stream an
earlier draft claimed; 57% of the backlog was never applicable or cannot be
assessed, the largest block being packages that contain no executable
vulnerable code, chiefly kernel headers, since a container never provides a
running kernel; reachable exposure in a stock install is an estimated 2-5% of
the tracker; four component bumps are available upstream and not yet taken; and
the pipeline itself has seven defects, including deduplication by CVE
identifier alone and a broken attribution step that left 16% of findings
unattributable.

The monthly reports are cut back to per-month facts. Remediation is no longer
attributed to individual months: crossing a severity-banded count of still-open
findings with one month's component bumps, which anyone can enumerate from the
commit log, narrows the search for unpatched exposure more than a bare count
does. An earlier draft did exactly that while refusing to publish bare counts
on disclosure grounds. The triage-latency figure is also gone, because 494 of
495 decisions were recorded in a single bulk pass and a per-finding latency
cannot be recovered from a closing timestamp.

Two process-tracking issues that the pipeline's severity filter should have
excluded are no longer counted as findings, so the total is 825 rather than 827.

The disclosure rule is revised in two directions, both more open: findings with
no upstream fix will be named with mitigation guidance, since there is nothing
to wait for and a mitigation is then the only available control; and the
generator's guard now covers every advisory namespace rather than CVE alone,
refuses to emit any file if any file would leak, and takes released evidence
rather than a stale tracker label as its source of truth.

SECURITY.md, the self-assessment and the GTR are brought into line: all three
previously described this reporting as unpublishable, and the GTR refused on
principle the counts the reports print.

Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Timur Tukaev <timur.tukaev@aenix.io>
2026-08-11 00:40:31 +05:00
..

Monthly security reports

Public reporting on vulnerability handling in the Cozystack project, generated from the tracked findings of the organization-wide CVE-scanning pipeline described in SECURITY.md.

Start with the backlog reconciliation. The monthly reports state what happened in a month, counted from the pipeline's own records. The pipeline has no write-back from the main repository, so it has never marked a finding as fixed and its outstanding counts overstate real exposure. The reconciliation establishes what was actually remediated, how much of the backlog was never applicable, and what is defective in the tooling. The monthly figures are not interpretable without it.

Document Covers
Backlog reconciliation Every finding since the pipeline started, audited against what shipped. As of 2026-08-11
August 2026 Incomplete; data cut off 2026-08-10
July 2026
June 2026
May 2026
April 2026 First month; an initial load rather than a discovery rate

What these reports contain

Findings are reported as counts by severity. An individual finding is named once its fix is merged and released — both such findings to date appear in the reconciliation and in the month they shipped.

Two deliberate exceptions to that reticence, both arrived at by reviewing the rule rather than applying it mechanically. Findings with no upstream fix will be named, with mitigation guidance, because there is nothing to wait for and silence serves nobody: an adopter needs to know when a mitigation is the only available control. And remediation is not attributed to individual months, because a count of still-open findings crossed with one month's list of component bumps — which anybody can enumerate from the commit log — narrows the search for unpatched exposure further than a bare count does.

What stays embargoed is narrow: findings where Cozystack's own packaging, defaults or integration logic introduces or worsens the exposure. There the project is the only source, and the process is the coordinated disclosure in SECURITY.md.

Scope of the counts

The counts cover findings from the pipeline, which scans every non-fork, non-archived repository in the cozystack organization — not this repository alone. They are filtered to what the pipeline treats as actionable: development-and-build-only dependencies, findings whose upstream has had no fix for over a year, findings already carrying a triage decision, and findings with no severity assigned are excluded before a finding is tracked. Two of those filters do not work as documented, which the reconciliation records.

Vulnerabilities reported privately against Cozystack's own code, packaging, defaults or integration logic follow the separate process in SECURITY.md, with its own response targets, and are disclosed through GitHub Security Advisories rather than here.

Provenance and its limits

These figures are self-attested. The tracker is private, because it holds per-finding detail for exposure that is not yet fixed, so a reader cannot currently reproduce the counts. Publishing the pipeline's policy documents and scanning scripts — which contain no finding data — so that the method can be audited independently of the numbers is outstanding work. Until that lands, treat the numbers as a project statement rather than as verified evidence.