From d33f30369105b3ec2b4222c06039619e1874129d Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 07:30:07 +0000 Subject: [PATCH 01/65] feat: add signed snapshot manifest envelopes --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 11 ++++++ src/vulnerability/database.py | 8 ++++ src/vulnerability/manifest_signing.py | 54 ++++++++++++++++++++++++++ tests/test_p2_manifest_signing.py | 31 +++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 src/vulnerability/manifest_signing.py create mode 100644 tests/test_p2_manifest_signing.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 9939a90..5d06f99 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -64,3 +64,14 @@ stored manifest against the current deterministic manifest for content digest, advisory count and affected-package count. `activate_snapshot()` now invokes this gate and raises `SnapshotActivationError` on any failed check; no active snapshot pointer or metadata is changed on failure. + +## Signed snapshot manifests + +`vulnerability.manifest_signing` defines the canonical Ed25519 envelope +`coderisktools.vulnerability.signed-manifest` version `1`. The signed payload +is deterministic JSON (`sort_keys`, compact separators, UTF-8). `sign_manifest` +uses the optional `cryptography` backend; installations without that optional +backend fail closed rather than silently falling back to HMAC or an unsigned +manifest. `verify_manifest` uses the repository's existing Ed25519 verifier, +and `stage_signed_snapshot()` verifies the envelope before staging. Tampering +with any manifest field is rejected. diff --git a/src/vulnerability/database.py b/src/vulnerability/database.py index 8c99e91..06b35cf 100644 --- a/src/vulnerability/database.py +++ b/src/vulnerability/database.py @@ -18,6 +18,7 @@ vulnerability_fingerprint, ) from .canonical import canonical_json_bytes +from .manifest_signing import verify_manifest from .models import Component, DatabaseHealth from .versions import compare_alpine_version, compare_composer_version, compare_debian_version, compare_go_version, compare_maven_version, compare_nuget_version, compare_pep440_version, compare_rpm_version, compare_rubygems_version, compare_semver_version, osv_events_match @@ -1499,6 +1500,13 @@ def snapshot_quality_gate(self, snapshot_id: str | None = None) -> dict[str, Any issues.append(f"manifest:{key}") return {"healthy": not issues, "checks": checks, "issues": tuple(issues), "snapshot_id": snapshot_id} + def stage_signed_snapshot(self, snapshot_id: str, source_digest: str, envelope: dict[str, Any], public_key: bytes) -> None: + """Verify an Ed25519 manifest envelope before staging it.""" + manifest = dict(verify_manifest(envelope, public_key)) + manifest["signature_status"] = "verified" + manifest["signing_key_id"] = envelope["key_id"] + self.stage_snapshot(snapshot_id, source_digest, manifest) + def activate_snapshot(self, snapshot_id: str) -> dict[str, Any]: row = self.connection.execute("SELECT * FROM snapshots WHERE snapshot_id = ?", (snapshot_id,)).fetchone() if row is None: diff --git a/src/vulnerability/manifest_signing.py b/src/vulnerability/manifest_signing.py new file mode 100644 index 0000000..54af40b --- /dev/null +++ b/src/vulnerability/manifest_signing.py @@ -0,0 +1,54 @@ +"""Canonical Ed25519 envelopes for staged snapshot manifests.""" + +from __future__ import annotations + +import base64 +import json +from typing import Any + +from ..rulepacks import verify_ed25519 + +SCHEMA = "coderisktools.vulnerability.signed-manifest" +VERSION = 1 + + +def canonical_manifest_message(manifest: dict[str, Any]) -> bytes: + if not isinstance(manifest, dict) or not manifest: + raise ValueError("manifest must be a non-empty object") + return json.dumps(manifest, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8") + + +def sign_manifest(manifest: dict[str, Any], key_id: str, private_key: bytes) -> dict[str, Any]: + """Return a signed envelope using optional cryptography Ed25519 backend.""" + if not isinstance(key_id, str) or not key_id or len(key_id) > 128: + raise ValueError("key_id is invalid") + if not isinstance(private_key, bytes) or len(private_key) != 32: + raise ValueError("Ed25519 private key must be 32 raw bytes") + try: + from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey + except ImportError as exc: + raise RuntimeError("manifest signing requires the optional cryptography package") from exc + signature = Ed25519PrivateKey.from_private_bytes(private_key).sign(canonical_manifest_message(manifest)) + return { + "schema": SCHEMA, + "version": VERSION, + "key_id": key_id, + "manifest": manifest, + "signature": base64.b64encode(signature).decode("ascii"), + } + + +def verify_manifest(envelope: dict[str, Any], public_key: bytes) -> dict[str, Any]: + if not isinstance(envelope, dict) or set(envelope) != {"schema", "version", "key_id", "manifest", "signature"}: + raise ValueError("signed manifest envelope schema is invalid") + if envelope["schema"] != SCHEMA or envelope["version"] != VERSION: + raise ValueError("unsupported signed manifest envelope") + if not isinstance(envelope["key_id"], str) or not isinstance(envelope["manifest"], dict): + raise ValueError("signed manifest fields are invalid") + try: + signature = base64.b64decode(envelope["signature"], validate=True) + except (ValueError, TypeError) as exc: + raise ValueError("signed manifest signature is invalid") from exc + if len(signature) != 64 or not verify_ed25519(public_key, canonical_manifest_message(envelope["manifest"]), signature): + raise ValueError("signed manifest verification failed") + return envelope["manifest"] diff --git a/tests/test_p2_manifest_signing.py b/tests/test_p2_manifest_signing.py new file mode 100644 index 0000000..9f36ef6 --- /dev/null +++ b/tests/test_p2_manifest_signing.py @@ -0,0 +1,31 @@ +import unittest + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.manifest_signing import sign_manifest, verify_manifest + + +class TestP2ManifestSigning(unittest.TestCase): + @unittest.skipUnless(__import__('importlib').util.find_spec('cryptography'), 'optional cryptography backend unavailable') + def test_sign_and_verify_manifest(self): + from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey + private = Ed25519PrivateKey.generate() + public = private.public_key().public_bytes_raw() + raw_private = private.private_bytes_raw() + manifest = {"schema_version": "2", "content_digest": "sha256:demo", "advisory_count": 0, "affected_package_count": 0} + envelope = sign_manifest(manifest, "fixture-key", raw_private) + self.assertEqual(verify_manifest(envelope, public), manifest) + self.assertEqual(envelope["schema"], "coderisktools.vulnerability.signed-manifest") + + @unittest.skipUnless(__import__('importlib').util.find_spec('cryptography'), 'optional cryptography backend unavailable') + def test_database_rejects_tampered_manifest(self): + from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey + private = Ed25519PrivateKey.generate() + public = private.public_key().public_bytes_raw() + envelope = sign_manifest({"content_digest": "sha256:x", "advisory_count": 0, "affected_package_count": 0}, "fixture-key", private.private_bytes_raw()) + envelope["manifest"]["advisory_count"] = 1 + database = VulnerabilityDatabase(":memory:") + try: + with self.assertRaises(ValueError): + database.stage_signed_snapshot("signed", "sha256:source", envelope, public) + finally: + database.close() From 8a76dcbd65cfdaf4216df1200f5a4eeb206337b2 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 07:30:50 +0000 Subject: [PATCH 02/65] ci: retrigger signed manifest checks From 3786cdfd681cc192a845f51e05c892a95afaae9c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 07:38:43 +0000 Subject: [PATCH 03/65] feat: add verified air-gap snapshot bundles --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 9 ++++ src/vulnerability/airgap.py | 71 ++++++++++++++++++++++++++ tests/test_p2_airgap_bundle.py | 53 +++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 src/vulnerability/airgap.py create mode 100644 tests/test_p2_airgap_bundle.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 5d06f99..f6c69e5 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -75,3 +75,12 @@ backend fail closed rather than silently falling back to HMAC or an unsigned manifest. `verify_manifest` uses the repository's existing Ed25519 verifier, and `stage_signed_snapshot()` verifies the envelope before staging. Tampering with any manifest field is rejected. + +## Air-gap bundles + +`vulnerability.airgap` provides `export_air_gap_bundle()` and +`import_air_gap_bundle()`. A bundle contains `manifest.json` and +`snapshot.sqlite` in a bounded `tar.gz`. Import uses the safe archive extractor, +opens the staged SQLite database read-only, runs the database health gate and +compares the deterministic manifest before an fsync plus atomic replacement. +It never activates a snapshot; activation remains a separate explicit action. diff --git a/src/vulnerability/airgap.py b/src/vulnerability/airgap.py new file mode 100644 index 0000000..575d9da --- /dev/null +++ b/src/vulnerability/airgap.py @@ -0,0 +1,71 @@ +"""Offline air-gap snapshot bundle export/import.""" + +from __future__ import annotations + +import hashlib +import json +import os +import shutil +import sqlite3 +import tarfile +import tempfile +from pathlib import Path +from typing import Any + +from .database import VulnerabilityDatabase +from .updater import ArchiveLimits, extract_archive_to_directory + +BUNDLE_SCHEMA = "coderisktools.vulnerability.air-gap-bundle" + + +def export_air_gap_bundle(database: VulnerabilityDatabase, output_path: str | os.PathLike[str]) -> dict[str, Any]: + """Export the current SQLite snapshot and manifest into a local bundle.""" + destination = Path(output_path) + destination.parent.mkdir(parents=True, exist_ok=True) + manifest = database.build_snapshot_manifest() + manifest = {"schema": BUNDLE_SCHEMA, "version": 1, "manifest": manifest} + with tempfile.TemporaryDirectory(prefix="coderisktools-airgap-") as work: + db_path = Path(work) / "snapshot.sqlite" + backup = sqlite3.connect(db_path) + try: + database.connection.backup(backup) + finally: + backup.close() + manifest_path = Path(work) / "manifest.json" + manifest_path.write_text(json.dumps(manifest, ensure_ascii=False, sort_keys=True, separators=(",", ":")), encoding="utf-8") + temporary = destination.with_name(destination.name + ".tmp") + with tarfile.open(temporary, "w:gz") as archive: + archive.add(manifest_path, arcname="manifest.json", recursive=False) + archive.add(db_path, arcname="snapshot.sqlite", recursive=False) + os.replace(temporary, destination) + return {"schema": BUNDLE_SCHEMA, "output": str(destination), "manifest": manifest["manifest"]} + + +def import_air_gap_bundle(bundle_path: str | os.PathLike[str], target_db_path: str | os.PathLike[str], *, max_total_bytes: int = 512 * 1024 * 1024) -> dict[str, Any]: + """Verify and atomically install an offline bundle; never activates a snapshot.""" + bundle = Path(bundle_path) + target = Path(target_db_path) + with tempfile.TemporaryDirectory(prefix="coderisktools-airgap-import-") as work: + extracted = extract_archive_to_directory(bundle, Path(work) / "extracted", ArchiveLimits(max_total_bytes=max_total_bytes)) + root = Path(extracted["output"]) + manifest = json.loads((root / "manifest.json").read_text(encoding="utf-8")) + if manifest.get("schema") != BUNDLE_SCHEMA or manifest.get("version") != 1: + raise ValueError("unsupported air-gap bundle") + staged_db = root / "snapshot.sqlite" + readonly = VulnerabilityDatabase.read_only(str(staged_db)) + try: + actual = readonly.build_snapshot_manifest() + if actual != manifest.get("manifest"): + raise ValueError("air-gap bundle manifest mismatch") + health = readonly.snapshot_health() + if not health.healthy: + raise ValueError("air-gap bundle database health gate failed") + finally: + readonly.close() + target.parent.mkdir(parents=True, exist_ok=True) + temporary = target.with_name(target.name + ".tmp") + shutil.copyfile(staged_db, temporary) + with open(temporary, "rb") as handle: + os.fsync(handle.fileno()) + os.replace(temporary, target) + return {"schema": BUNDLE_SCHEMA, "output": str(target), "content_digest": manifest["manifest"]["content_digest"], "activated": False} diff --git a/tests/test_p2_airgap_bundle.py b/tests/test_p2_airgap_bundle.py new file mode 100644 index 0000000..64fd312 --- /dev/null +++ b/tests/test_p2_airgap_bundle.py @@ -0,0 +1,53 @@ +import io +import json +import tarfile +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.airgap import export_air_gap_bundle, import_air_gap_bundle +from src.vulnerability.database import VulnerabilityDatabase + + +class TestP2AirGapBundle(unittest.TestCase): + def test_export_and_import_verifies_manifest_and_is_not_active(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + source_path = root / "source.sqlite" + bundle = root / "bundle.tar.gz" + target = root / "target.sqlite" + source = VulnerabilityDatabase(str(source_path)) + try: + exported = export_air_gap_bundle(source, bundle) + self.assertEqual(exported["schema"], "coderisktools.vulnerability.air-gap-bundle") + finally: + source.close() + result = import_air_gap_bundle(bundle, target) + self.assertFalse(result["activated"]) + imported = VulnerabilityDatabase.read_only(str(target)) + try: + self.assertEqual(imported.build_snapshot_manifest()["content_digest"], exported["manifest"]["content_digest"]) + finally: + imported.close() + + def test_tampered_bundle_is_rejected_without_target(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + source = VulnerabilityDatabase(str(root / "source.sqlite")) + try: + export_air_gap_bundle(source, root / "bundle.tar.gz") + finally: + source.close() + tampered = root / "tampered.tar.gz" + with tarfile.open(root / "bundle.tar.gz", "r:gz") as source_tar, tarfile.open(tampered, "w:gz") as target_tar: + for member in source_tar.getmembers(): + payload = source_tar.extractfile(member).read() + if member.name == "manifest.json": + value = json.loads(payload) + value["manifest"]["advisory_count"] = 1 + payload = json.dumps(value, sort_keys=True).encode() + member.size = len(payload) + target_tar.addfile(member, io.BytesIO(payload)) + with self.assertRaises(Exception): + import_air_gap_bundle(tampered, root / "target.sqlite") + self.assertFalse((root / "target.sqlite").exists()) From 596cacad3152b189bbab1917432651559db2d4fb Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 07:39:17 +0000 Subject: [PATCH 04/65] ci: retrigger air-gap bundle checks From 9a9c83ece45b4b819b126a467827bb5c91536bf3 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 07:46:35 +0000 Subject: [PATCH 05/65] feat: add explicit snapshot retention prune --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 9 +++++++++ src/vulnerability/database.py | 16 ++++++++++++++++ tests/test_p2_snapshot_retention.py | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 tests/test_p2_snapshot_retention.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index f6c69e5..48a39de 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -84,3 +84,12 @@ with any manifest field is rejected. opens the staged SQLite database read-only, runs the database health gate and compares the deterministic manifest before an fsync plus atomic replacement. It never activates a snapshot; activation remains a separate explicit action. + +## Explicit retention and prune + +`VulnerabilityDatabase.prune_snapshots(keep_snapshot_ids, apply=False)` first +returns a deterministic dry-run plan. Only an explicit `apply=True` deletes +snapshot metadata outside the allowlist; active snapshots are never candidates. +Related `source_snapshots`, `import_errors` and `quality_metrics` rows are +removed together. This API does not infer retention from timestamps because +the current snapshot schema has no trusted acquisition timestamp. diff --git a/src/vulnerability/database.py b/src/vulnerability/database.py index 06b35cf..2de7522 100644 --- a/src/vulnerability/database.py +++ b/src/vulnerability/database.py @@ -1555,6 +1555,22 @@ def snapshot_health(self) -> DatabaseHealth: issues=tuple(issues), ) + def prune_snapshots(self, keep_snapshot_ids: set[str] | frozenset[str], *, apply: bool = False) -> dict[str, Any]: + """Plan or apply explicit snapshot retention without deleting active data.""" + keep = {value for value in keep_snapshot_ids if isinstance(value, str) and value} + rows = self.connection.execute("SELECT snapshot_id, state FROM snapshots ORDER BY snapshot_id").fetchall() + candidates = sorted(row["snapshot_id"] for row in rows if row["snapshot_id"] not in keep and row["state"] != "active") + removed: list[str] = [] + if apply: + with self.connection: + for snapshot_id in candidates: + for table in ("source_snapshots", "import_errors", "quality_metrics"): + self.connection.execute(f"DELETE FROM {table} WHERE snapshot_id = ?", (snapshot_id,)) + self.connection.execute("DELETE FROM snapshots WHERE snapshot_id = ? AND state != 'active'", (snapshot_id,)) + if self.connection.total_changes: + removed.append(snapshot_id) + return {"candidates": candidates, "removed": sorted(set(removed)), "applied": apply} + def snapshot_status(self, snapshot_id: str) -> dict[str, Any]: row = self.connection.execute("SELECT * FROM snapshots WHERE snapshot_id = ?", (snapshot_id,)).fetchone() if row is None: diff --git a/tests/test_p2_snapshot_retention.py b/tests/test_p2_snapshot_retention.py new file mode 100644 index 0000000..e2391cf --- /dev/null +++ b/tests/test_p2_snapshot_retention.py @@ -0,0 +1,24 @@ +import unittest + +from src.vulnerability.database import VulnerabilityDatabase + + +class TestP2SnapshotRetention(unittest.TestCase): + def test_prune_is_dry_run_by_default_and_never_removes_active(self): + database = VulnerabilityDatabase(":memory:") + try: + manifest = database.build_snapshot_manifest() + database.stage_snapshot("keep", "sha256:keep", manifest) + database.stage_snapshot("old", "sha256:old", manifest) + database.activate_snapshot("keep") + plan = database.prune_snapshots({"keep"}) + self.assertEqual(plan["candidates"], ["old"]) + self.assertFalse(plan["applied"]) + self.assertIsNotNone(database.snapshot_status("old")) + applied = database.prune_snapshots({"keep"}, apply=True) + self.assertEqual(applied["removed"], ["old"]) + self.assertIsNotNone(database.snapshot_status("keep")) + with self.assertRaises(KeyError): + database.snapshot_status("old") + finally: + database.close() From 8b7df864729018917af40e00d3827f5780d3c722 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 08:16:02 +0000 Subject: [PATCH 06/65] feat: add bounded Debian advisory source adapter --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 8 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 4 ++ src/vulnerability/sources/debian.py | 55 +++++++++++++++++++ tests/test_v12_debian_source.py | 39 +++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 src/vulnerability/sources/debian.py create mode 100644 tests/test_v12_debian_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 48a39de..ca886c4 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -93,3 +93,11 @@ snapshot metadata outside the allowlist; active snapshots are never candidates. Related `source_snapshots`, `import_errors` and `quality_metrics` rows are removed together. This API does not infer retention from timestamps because the current snapshot schema has no trusted acquisition timestamp. + +## V12a Debian adapter boundary + +`vulnerability.sources.debian.ingest_file()` is a bounded, local-only parser +for the versioned Debian feed fixture format. It preserves release, +source-package, binary-package, urgency, fixed-version and backport metadata. +It does not fetch Debian infrastructure, claim complete Security Tracker/OVAL +coverage, or activate/import records into the vulnerability database yet. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 43a9539..9c81ca5 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2682,6 +2682,10 @@ src/ ## Stage V12 — dystrybucje Linux +V12a: dodano bounded lokalny parser Debian Security feed fixture (`debian.py`) +z zachowaniem release/source/binary/backport metadata. Pełny Debian adapter, +provenance, real feed mapping i backport-aware matching pozostają otwarte. + - [ ] Debian. - [ ] Ubuntu. - [ ] Red Hat. diff --git a/src/vulnerability/sources/debian.py b/src/vulnerability/sources/debian.py new file mode 100644 index 0000000..3be1fd0 --- /dev/null +++ b/src/vulnerability/sources/debian.py @@ -0,0 +1,55 @@ +"""Bounded local Debian advisory feed adapter.""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded + +DEBIAN_SOURCE_ID = "debian-security" +SCHEMA = "coderisktools.vulnerability.debian-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 + + +def _validate_advisory(value: Any) -> dict[str, Any]: + if not isinstance(value, dict): + raise ValueError("Debian advisory must be an object") + advisory_id = value.get("id") + package = value.get("package") + fixed = value.get("fixed") + if not all(isinstance(item, str) and 1 <= len(item) <= 512 for item in (advisory_id, package, fixed)): + raise ValueError("Debian advisory id, package and fixed are required bounded strings") + binary = value.get("binary_packages", [package]) + if not isinstance(binary, list) or len(binary) > 256 or not all(isinstance(item, str) and item for item in binary): + raise ValueError("Debian binary_packages is invalid") + return { + "id": advisory_id, + "package": package, + "source_package": value.get("source_package", package), + "fixed": fixed, + "urgency": value.get("urgency", "unknown"), + "backport": value.get("backport", False) is True, + "binary_packages": sorted(set(binary)), + } + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + """Parse a local Debian feed; no network access or activation is performed.""" + raw = read_regular_bounded(path, max_bytes, "Debian feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Debian feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Debian feed schema") + release = document.get("release") + advisories = document.get("advisories") + if not isinstance(release, str) or not 1 <= len(release) <= 64: + raise ValueError("Debian release is invalid") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Debian advisory list exceeds bounds") + normalized = [_validate_advisory(item) for item in advisories] + return {"source_id": DEBIAN_SOURCE_ID, "release": release, "advisory_count": len(normalized), "advisories": normalized} diff --git a/tests/test_v12_debian_source.py b/tests/test_v12_debian_source.py new file mode 100644 index 0000000..177fafa --- /dev/null +++ b/tests/test_v12_debian_source.py @@ -0,0 +1,39 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.sources.debian import DEBIAN_SOURCE_ID, ingest_file + + +class TestV12DebianSource(unittest.TestCase): + def test_ingest_debian_local_feed_preserves_backport_metadata(self): + payload = """{ + "schema": "coderisktools.vulnerability.debian-feed", + "version": 1, + "release": "bookworm", + "advisories": [{ + "id": "DSA-9999-1", + "package": "openssl", + "urgency": "high", + "fixed": "3.0.11-1~deb12u2", + "backport": true, + "source_package": "openssl", + "binary_packages": ["openssl", "libssl3"] + }] + }""" + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "debian.json" + path.write_text(payload, encoding="utf-8") + result = ingest_file(str(path)) + self.assertEqual(result["source_id"], DEBIAN_SOURCE_ID) + self.assertEqual(result["release"], "bookworm") + self.assertEqual(result["advisory_count"], 1) + self.assertTrue(result["advisories"][0]["backport"]) + self.assertEqual(result["advisories"][0]["binary_packages"], ["libssl3", "openssl"]) + + def test_rejects_unbounded_or_invalid_debian_feed(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "debian.json" + path.write_text('{"schema":"wrong","version":1,"advisories":[]}', encoding="utf-8") + with self.assertRaises(ValueError): + ingest_file(str(path)) From c29c996011be5b39af38b9667e9c5422685dc8db Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 08:25:47 +0000 Subject: [PATCH 07/65] feat: add Debian feed provenance digest --- src/vulnerability/sources/debian.py | 19 ++++++++++++++++++- tests/test_v12_debian_source.py | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/vulnerability/sources/debian.py b/src/vulnerability/sources/debian.py index 3be1fd0..2456355 100644 --- a/src/vulnerability/sources/debian.py +++ b/src/vulnerability/sources/debian.py @@ -2,6 +2,7 @@ from __future__ import annotations +import hashlib import json from pathlib import Path from typing import Any @@ -52,4 +53,20 @@ def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[st if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: raise ValueError("Debian advisory list exceeds bounds") normalized = [_validate_advisory(item) for item in advisories] - return {"source_id": DEBIAN_SOURCE_ID, "release": release, "advisory_count": len(normalized), "advisories": normalized} + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + return { + "source_id": DEBIAN_SOURCE_ID, + "source_path": str(Path(path)), + "source_digest": digest, + "release": release, + "advisory_count": len(normalized), + "advisories": normalized, + "provenance": { + "source_id": DEBIAN_SOURCE_ID, + "source_path": str(Path(path)), + "source_digest": digest, + "schema": SCHEMA, + "version": 1, + "release": release, + }, + } diff --git a/tests/test_v12_debian_source.py b/tests/test_v12_debian_source.py index 177fafa..b851640 100644 --- a/tests/test_v12_debian_source.py +++ b/tests/test_v12_debian_source.py @@ -26,6 +26,9 @@ def test_ingest_debian_local_feed_preserves_backport_metadata(self): path.write_text(payload, encoding="utf-8") result = ingest_file(str(path)) self.assertEqual(result["source_id"], DEBIAN_SOURCE_ID) + self.assertEqual(result["source_digest"].split(":", 1)[0], "sha256") + self.assertEqual(len(result["source_digest"].split(":", 1)[1]), 64) + self.assertEqual(result["provenance"]["source_id"], DEBIAN_SOURCE_ID) self.assertEqual(result["release"], "bookworm") self.assertEqual(result["advisory_count"], 1) self.assertTrue(result["advisories"][0]["backport"]) From ee95cd327d771a1de7d8c347f8e186efc4b0ddd9 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 08:41:10 +0000 Subject: [PATCH 08/65] feat: stage normalized Debian advisories --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 7 ++++++ src/vulnerability/sources/debian.py | 33 ++++++++++++++++++++++++++ tests/test_v12_debian_staging.py | 28 ++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 tests/test_v12_debian_staging.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index ca886c4..2762a0c 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -101,3 +101,10 @@ for the versioned Debian feed fixture format. It preserves release, source-package, binary-package, urgency, fixed-version and backport metadata. It does not fetch Debian infrastructure, claim complete Security Tracker/OVAL coverage, or activate/import records into the vulnerability database yet. + +V12a now also provides `ingest_file_to_database()`: it maps Debian binary +packages and fixed versions into the existing OSV-shaped bounded importer, +stages a snapshot without implicit activation, preserves Debian backport data +in `database_specific`, and writes `source_snapshots` plus `quality_metrics`. +This remains fixture-format support, not a claim of complete Debian feed +coverage. diff --git a/src/vulnerability/sources/debian.py b/src/vulnerability/sources/debian.py index 2456355..a1c08db 100644 --- a/src/vulnerability/sources/debian.py +++ b/src/vulnerability/sources/debian.py @@ -4,10 +4,12 @@ import hashlib import json +from datetime import datetime, timezone from pathlib import Path from typing import Any from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase DEBIAN_SOURCE_ID = "debian-security" SCHEMA = "coderisktools.vulnerability.debian-feed" @@ -70,3 +72,34 @@ def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[st "release": release, }, } + + +def ingest_file_to_database( + path: str | Path, + database: VulnerabilityDatabase, + snapshot_id: str, + *, + activate: bool = False, + max_bytes: int = MAX_FEED_BYTES, +) -> dict[str, Any]: + """Normalize a Debian fixture into the existing bounded OSV import/staging path.""" + document = ingest_file(path, max_bytes=max_bytes) + source = f"{DEBIAN_SOURCE_ID}:{document['release']}" + records = [] + for advisory in document["advisories"]: + affected = [{"package": {"ecosystem": "Debian", "name": package_name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"fixed": advisory["fixed"]}]}]} for package_name in advisory["binary_packages"]] + records.append({"id": advisory["id"], "summary": f"Debian {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"debian_release": document["release"], "source_package": advisory["source_package"], "urgency": advisory["urgency"], "backport": advisory["backport"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=source) + if stats.errors: + return {"source_id": source, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": source, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.debian-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, source, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": source, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v12_debian_staging.py b/tests/test_v12_debian_staging.py new file mode 100644 index 0000000..5e3171b --- /dev/null +++ b/tests/test_v12_debian_staging.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.sources.debian import ingest_file_to_database + + +class TestV12DebianStaging(unittest.TestCase): + def test_debian_feed_stages_normalized_osv_records_without_activation(self): + payload = '{"schema":"coderisktools.vulnerability.debian-feed","version":1,"release":"bookworm","advisories":[{"id":"DSA-1","package":"openssl","fixed":"3.0.11-1~deb12u2","backport":true,"binary_packages":["libssl3"]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "debian.json" + database_path = root / "db.sqlite" + feed.write_text(payload, encoding="utf-8") + database = VulnerabilityDatabase(str(database_path)) + try: + report = ingest_file_to_database(str(feed), database, "debian-bookworm-1") + self.assertEqual(report["state"], "staged") + self.assertFalse(report["activated"]) + self.assertEqual(database.advisory_count(), 1) + self.assertEqual(database.snapshot_status("debian-bookworm-1")["state"], "staged") + self.assertEqual(database.connection.execute("SELECT record_count FROM source_snapshots WHERE snapshot_id='debian-bookworm-1'").fetchone()[0], 1) + self.assertEqual(database.connection.execute("SELECT COUNT(*) FROM quality_metrics WHERE snapshot_id='debian-bookworm-1'").fetchone()[0], 3) + self.assertEqual(database.connection.execute("SELECT source FROM advisories WHERE id='DSA-1'").fetchone()[0], "debian-security:bookworm") + finally: + database.close() From 601d02fd714795d9c043685fd77fa7478fb9ae64 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 08:48:10 +0000 Subject: [PATCH 09/65] feat: add Debian backport-aware matching --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 7 ++++++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 ++- src/vulnerability/sources/debian.py | 2 +- tests/test_v12_debian_backport_matching.py | 25 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 tests/test_v12_debian_backport_matching.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 2762a0c..6f5fb19 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -108,3 +108,10 @@ stages a snapshot without implicit activation, preserves Debian backport data in `database_specific`, and writes `source_snapshots` plus `quality_metrics`. This remains fixture-format support, not a claim of complete Debian feed coverage. + +Debian fixed-only advisories are normalized as an explicit OSV range with +`introduced: "0"` followed by the Debian fixed revision. This makes the +backport boundary testable: a revision below `3.0.11-1~deb12u2` is affected, +while that revision and later revisions are not affected under the Debian +comparator. This is bounded matching behavior, not complete Debian archive +coverage. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 9c81ca5..dc7a769 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2684,7 +2684,8 @@ src/ V12a: dodano bounded lokalny parser Debian Security feed fixture (`debian.py`) z zachowaniem release/source/binary/backport metadata. Pełny Debian adapter, -provenance, real feed mapping i backport-aware matching pozostają otwarte. +provenance, staging bridge i bounded backport-aware matching są częściowo +zaimplementowane; real feed mapping i pełna coverage pozostają otwarte. - [ ] Debian. - [ ] Ubuntu. diff --git a/src/vulnerability/sources/debian.py b/src/vulnerability/sources/debian.py index a1c08db..0e9c304 100644 --- a/src/vulnerability/sources/debian.py +++ b/src/vulnerability/sources/debian.py @@ -87,7 +87,7 @@ def ingest_file_to_database( source = f"{DEBIAN_SOURCE_ID}:{document['release']}" records = [] for advisory in document["advisories"]: - affected = [{"package": {"ecosystem": "Debian", "name": package_name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"fixed": advisory["fixed"]}]}]} for package_name in advisory["binary_packages"]] + affected = [{"package": {"ecosystem": "Debian", "name": package_name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]} for package_name in advisory["binary_packages"]] records.append({"id": advisory["id"], "summary": f"Debian {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"debian_release": document["release"], "source_package": advisory["source_package"], "urgency": advisory["urgency"], "backport": advisory["backport"]}, "_source_record": advisory}) stats = database.import_osv_records(records, source=source) if stats.errors: diff --git a/tests/test_v12_debian_backport_matching.py b/tests/test_v12_debian_backport_matching.py new file mode 100644 index 0000000..0434c7b --- /dev/null +++ b/tests/test_v12_debian_backport_matching.py @@ -0,0 +1,25 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.debian import ingest_file_to_database + + +class TestV12DebianBackportMatching(unittest.TestCase): + def test_debian_backport_fixed_revision_is_not_affected(self): + payload = '{"schema":"coderisktools.vulnerability.debian-feed","version":1,"release":"bookworm","advisories":[{"id":"DSA-1","package":"openssl","fixed":"3.0.11-1~deb12u2","backport":true,"binary_packages":["libssl3"]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "debian.json" + feed.write_text(payload, encoding="utf-8") + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + ingest_file_to_database(str(feed), database, "debian-bookworm-1") + affected = database.evaluate_component(Component(ecosystem="Debian", name="libssl3", version="3.0.11-1~deb12u1")) + fixed = database.evaluate_component(Component(ecosystem="Debian", name="libssl3", version="3.0.11-1~deb12u2")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 9962484ce41c53f6b259ceb460c2ab134b7c2176 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 10:07:10 +0000 Subject: [PATCH 10/65] feat: add bounded Ubuntu advisory source adapter --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 5 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 7 +++- src/vulnerability/sources/ubuntu.py | 37 +++++++++++++++++++ tests/test_v12_ubuntu_source.py | 26 +++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/vulnerability/sources/ubuntu.py create mode 100644 tests/test_v12_ubuntu_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 6f5fb19..3260927 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -115,3 +115,8 @@ backport boundary testable: a revision below `3.0.11-1~deb12u2` is affected, while that revision and later revisions are not affected under the Debian comparator. This is bounded matching behavior, not complete Debian archive coverage. + +The V12b Ubuntu adapter currently provides the same bounded fixture/provenance +boundary for Ubuntu releases. It is parser-only and does not claim complete +USN/Ubuntu archive coverage or database staging until its dedicated integration +batch is completed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index dc7a769..d6ac523 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2686,14 +2686,17 @@ V12a: dodano bounded lokalny parser Debian Security feed fixture (`debian.py`) z zachowaniem release/source/binary/backport metadata. Pełny Debian adapter, provenance, staging bridge i bounded backport-aware matching są częściowo zaimplementowane; real feed mapping i pełna coverage pozostają otwarte. +V12b: dodano bounded lokalny Ubuntu fixture parser (`ubuntu.py`) z release, +provenance i source digest; staging bridge oraz pełny Ubuntu feed mapping są +jeszcze otwarte. - [ ] Debian. - [ ] Ubuntu. - [ ] Red Hat. - [ ] SUSE. - [ ] Alpine. -- [ ] RPM comparator. -- [ ] Debian comparator. +- [x] RPM comparator — implemented and tested in P1; V12 source integration remains open. +- [x] Debian comparator — implemented and tested in P1; V12 source integration remains bounded. - [ ] APK comparator. - [ ] Backport awareness. diff --git a/src/vulnerability/sources/ubuntu.py b/src/vulnerability/sources/ubuntu.py new file mode 100644 index 0000000..6d3ef48 --- /dev/null +++ b/src/vulnerability/sources/ubuntu.py @@ -0,0 +1,37 @@ +"""Bounded local Ubuntu advisory feed adapter.""" + +from __future__ import annotations + +import hashlib +import json +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from .debian import _validate_advisory + +UBUNTU_SOURCE_ID = "ubuntu-security" +SCHEMA = "coderisktools.vulnerability.ubuntu-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + """Parse a local Ubuntu fixture; no network access or activation is performed.""" + raw = read_regular_bounded(path, max_bytes, "Ubuntu feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Ubuntu feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Ubuntu feed schema") + release = document.get("release") + advisories = document.get("advisories") + if not isinstance(release, str) or not 1 <= len(release) <= 64: + raise ValueError("Ubuntu release is invalid") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Ubuntu advisory list exceeds bounds") + normalized = [_validate_advisory(item) for item in advisories] + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": UBUNTU_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1, "release": release} + return {"source_id": UBUNTU_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "release": release, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} diff --git a/tests/test_v12_ubuntu_source.py b/tests/test_v12_ubuntu_source.py new file mode 100644 index 0000000..831a491 --- /dev/null +++ b/tests/test_v12_ubuntu_source.py @@ -0,0 +1,26 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.sources.ubuntu import UBUNTU_SOURCE_ID, ingest_file + + +class TestV12UbuntuSource(unittest.TestCase): + def test_ingest_ubuntu_fixture_preserves_release_and_provenance(self): + payload = '{"schema":"coderisktools.vulnerability.ubuntu-feed","version":1,"release":"jammy","advisories":[{"id":"USN-9999-1","package":"openssl","fixed":"3.0.11-1ubuntu2.1","binary_packages":["libssl3"]}]}' + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "ubuntu.json" + path.write_text(payload, encoding="utf-8") + result = ingest_file(str(path)) + self.assertEqual(result["source_id"], UBUNTU_SOURCE_ID) + self.assertEqual(result["release"], "jammy") + self.assertEqual(result["advisory_count"], 1) + self.assertTrue(result["source_digest"].startswith("sha256:")) + self.assertEqual(result["advisories"][0]["binary_packages"], ["libssl3"]) + + def test_rejects_debian_schema_as_ubuntu_feed(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "ubuntu.json" + path.write_text('{"schema":"coderisktools.vulnerability.debian-feed","version":1,"release":"jammy","advisories":[]}', encoding="utf-8") + with self.assertRaises(ValueError): + ingest_file(str(path)) From 969e4df424d5bf1aa638c4ac94749aa067158570 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:20:35 +0000 Subject: [PATCH 11/65] feat: stage normalized Ubuntu advisories --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 5 ++++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 +++ src/vulnerability/sources/ubuntu.py | 26 +++++++++++++++++++ tests/test_v12_ubuntu_staging.py | 25 ++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 tests/test_v12_ubuntu_staging.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 3260927..7866d57 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -120,3 +120,8 @@ The V12b Ubuntu adapter currently provides the same bounded fixture/provenance boundary for Ubuntu releases. It is parser-only and does not claim complete USN/Ubuntu archive coverage or database staging until its dedicated integration batch is completed. + +V12c adds the Ubuntu staging bridge using the same lifecycle contract as +Debian: normalized OSV-shaped records, staged snapshots without implicit +activation, source provenance, `source_snapshots`, and quality metrics. This +does not claim complete USN or Ubuntu archive coverage. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index d6ac523..4360b92 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2689,6 +2689,9 @@ zaimplementowane; real feed mapping i pełna coverage pozostają otwarte. V12b: dodano bounded lokalny Ubuntu fixture parser (`ubuntu.py`) z release, provenance i source digest; staging bridge oraz pełny Ubuntu feed mapping są jeszcze otwarte. +V12c: Ubuntu fixture advisories są mapowane do OSV-shaped importera i staged +z `source_snapshots` oraz `quality_metrics`; pełne USN mapping i coverage nadal +pozostają otwarte. - [ ] Debian. - [ ] Ubuntu. diff --git a/src/vulnerability/sources/ubuntu.py b/src/vulnerability/sources/ubuntu.py index 6d3ef48..0b79e73 100644 --- a/src/vulnerability/sources/ubuntu.py +++ b/src/vulnerability/sources/ubuntu.py @@ -4,10 +4,12 @@ import hashlib import json +from datetime import datetime, timezone from pathlib import Path from typing import Any from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase from .debian import _validate_advisory UBUNTU_SOURCE_ID = "ubuntu-security" @@ -35,3 +37,27 @@ def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[st digest = "sha256:" + hashlib.sha256(raw).hexdigest() provenance = {"source_id": UBUNTU_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1, "release": release} return {"source_id": UBUNTU_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "release": release, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + """Normalize a bounded Ubuntu fixture into the existing staging pipeline.""" + document = ingest_file(path, max_bytes=max_bytes) + source = f"{UBUNTU_SOURCE_ID}:{document['release']}" + records = [] + for advisory in document["advisories"]: + affected = [{"package": {"ecosystem": "Ubuntu", "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]} for name in advisory["binary_packages"]] + records.append({"id": advisory["id"], "summary": f"Ubuntu {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"ubuntu_release": document["release"], "source_package": advisory["source_package"], "urgency": advisory["urgency"], "backport": advisory["backport"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=source) + if stats.errors: + return {"source_id": source, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": source, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.ubuntu-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, source, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": source, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v12_ubuntu_staging.py b/tests/test_v12_ubuntu_staging.py new file mode 100644 index 0000000..d5dbcd0 --- /dev/null +++ b/tests/test_v12_ubuntu_staging.py @@ -0,0 +1,25 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.sources.ubuntu import ingest_file_to_database + + +class TestV12UbuntuStaging(unittest.TestCase): + def test_ubuntu_feed_stages_usn_without_activation(self): + payload = '{"schema":"coderisktools.vulnerability.ubuntu-feed","version":1,"release":"jammy","advisories":[{"id":"USN-1","package":"openssl","fixed":"3.0.11-1ubuntu2.1","binary_packages":["libssl3"]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "ubuntu.json" + feed.write_text(payload, encoding="utf-8") + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "ubuntu-jammy-1") + self.assertEqual(report["state"], "staged") + self.assertFalse(report["activated"]) + self.assertEqual(database.advisory_count(), 1) + self.assertEqual(database.snapshot_status("ubuntu-jammy-1")["state"], "staged") + self.assertEqual(database.connection.execute("SELECT source FROM advisories WHERE id='USN-1'").fetchone()[0], "ubuntu-security:jammy") + finally: + database.close() From 3961f809d15fc785d010c831d900738ac034dfe1 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:35:08 +0000 Subject: [PATCH 12/65] test: verify Ubuntu fixed-version matching --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ tests/test_v12_ubuntu_matching.py | 25 +++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 tests/test_v12_ubuntu_matching.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 7866d57..a223a6d 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -125,3 +125,7 @@ V12c adds the Ubuntu staging bridge using the same lifecycle contract as Debian: normalized OSV-shaped records, staged snapshots without implicit activation, source provenance, `source_snapshots`, and quality metrics. This does not claim complete USN or Ubuntu archive coverage. + +Ubuntu fixed-version boundaries are covered by an integration test through +`evaluate_component()`. A version below the normalized fixed revision is +classified as affected, while the fixed revision is classified as not affected. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 4360b92..b32443d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2692,6 +2692,8 @@ jeszcze otwarte. V12c: Ubuntu fixture advisories są mapowane do OSV-shaped importera i staged z `source_snapshots` oraz `quality_metrics`; pełne USN mapping i coverage nadal pozostają otwarte. +V12d: zweryfikowano Ubuntu fixed-version boundary przez istniejący comparator +(`affected` przed `3.0.11-1ubuntu2.1`, `not_affected` od wersji fixed). - [ ] Debian. - [ ] Ubuntu. diff --git a/tests/test_v12_ubuntu_matching.py b/tests/test_v12_ubuntu_matching.py new file mode 100644 index 0000000..83ca8ea --- /dev/null +++ b/tests/test_v12_ubuntu_matching.py @@ -0,0 +1,25 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.ubuntu import ingest_file_to_database + + +class TestV12UbuntuMatching(unittest.TestCase): + def test_ubuntu_fixed_revision_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.ubuntu-feed","version":1,"release":"jammy","advisories":[{"id":"USN-1","package":"openssl","fixed":"3.0.11-1ubuntu2.1","binary_packages":["libssl3"]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "ubuntu.json" + feed.write_text(payload, encoding="utf-8") + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + ingest_file_to_database(str(feed), database, "ubuntu-jammy-1") + affected = database.evaluate_component(Component(ecosystem="Ubuntu", name="libssl3", version="3.0.11-1ubuntu2")) + fixed = database.evaluate_component(Component(ecosystem="Ubuntu", name="libssl3", version="3.0.11-1ubuntu2.1")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From cd80af766ed8a2aaad1969845a2f0b94850c6b9f Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:39:10 +0000 Subject: [PATCH 13/65] feat: add bounded Red Hat advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 5 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/redhat.py | 82 +++++++++++++++++++ tests/test_v12_redhat_source.py | 26 ++++++ tests/test_v12_redhat_staging.py | 27 ++++++ 5 files changed, 143 insertions(+) create mode 100644 src/vulnerability/sources/redhat.py create mode 100644 tests/test_v12_redhat_source.py create mode 100644 tests/test_v12_redhat_staging.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index a223a6d..8d4b5cf 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -129,3 +129,8 @@ does not claim complete USN or Ubuntu archive coverage. Ubuntu fixed-version boundaries are covered by an integration test through `evaluate_component()`. A version below the normalized fixed revision is classified as affected, while the fixed revision is classified as not affected. + +V12e applies the same bounded staging contract to Red Hat fixtures, using the +RPM ecosystem and preserving RHSA severity, release, backport, and source +provenance metadata. This is not a claim of complete Red Hat advisory feed +coverage. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index b32443d..09af62e 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2694,6 +2694,9 @@ z `source_snapshots` oraz `quality_metrics`; pełne USN mapping i coverage nadal pozostają otwarte. V12d: zweryfikowano Ubuntu fixed-version boundary przez istniejący comparator (`affected` przed `3.0.11-1ubuntu2.1`, `not_affected` od wersji fixed). +V12e: dodano bounded Red Hat fixture parser i staging bridge z RPM ecosystem, +provenance, source snapshots, quality metrics oraz zweryfikowanym fixed-version +boundary; pełne RHSA feed mapping pozostaje otwarte. - [ ] Debian. - [ ] Ubuntu. diff --git a/src/vulnerability/sources/redhat.py b/src/vulnerability/sources/redhat.py new file mode 100644 index 0000000..e7a5872 --- /dev/null +++ b/src/vulnerability/sources/redhat.py @@ -0,0 +1,82 @@ +"""Bounded local Red Hat security advisory feed adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +REDHAT_SOURCE_ID = "redhat-security" +SCHEMA = "coderisktools.vulnerability.redhat-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str, *, required: bool = True) -> str: + if not isinstance(value, str) or (required and not value) or len(value) > _MAX_TEXT: + raise ValueError(f"Red Hat {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + """Parse a local Red Hat fixture without network access or activation.""" + raw = read_regular_bounded(path, max_bytes, "Red Hat feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Red Hat feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Red Hat feed schema") + release = _text(document.get("release"), "release") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Red Hat advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Red Hat advisory must be an object") + binaries = item.get("binary_packages") + if not isinstance(binaries, list) or not binaries or len(binaries) > 1000: + raise ValueError("Red Hat binary package list is invalid") + normalized.append({ + "id": _text(item.get("id"), "advisory id"), + "package": _text(item.get("package"), "source package"), + "source_package": _text(item.get("source_package", item.get("package")), "source package"), + "binary_packages": sorted({_text(name, "binary package") for name in binaries}), + "fixed": _text(item.get("fixed"), "fixed RPM version"), + "severity": _text(item.get("severity", "Unknown"), "severity"), + "backport": item.get("backport", False) is True, + }) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": REDHAT_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1, "release": release} + return {"source_id": REDHAT_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "release": release, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + """Normalize a bounded Red Hat fixture into the existing staging pipeline.""" + document = ingest_file(path, max_bytes=max_bytes) + source = f"{REDHAT_SOURCE_ID}:{document['release']}" + records = [] + for advisory in document["advisories"]: + affected = [{"package": {"ecosystem": "RPM", "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]} for name in advisory["binary_packages"]] + records.append({"id": advisory["id"], "summary": f"Red Hat {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"redhat_release": document["release"], "source_package": advisory["source_package"], "severity": advisory["severity"], "backport": advisory["backport"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=source) + if stats.errors: + return {"source_id": source, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": source, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.redhat-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, source, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": source, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v12_redhat_source.py b/tests/test_v12_redhat_source.py new file mode 100644 index 0000000..ee969ed --- /dev/null +++ b/tests/test_v12_redhat_source.py @@ -0,0 +1,26 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.sources.redhat import REDHAT_SOURCE_ID, ingest_file + + +class TestV12RedHatSource(unittest.TestCase): + def test_ingest_redhat_fixture_preserves_rpm_metadata(self): + payload = '{"schema":"coderisktools.vulnerability.redhat-feed","version":1,"release":"rhel-9","advisories":[{"id":"RHSA-9999:001","package":"openssl","fixed":"3.0.7-25.el9_2","severity":"Important","binary_packages":["openssl-libs"],"backport":true}]}' + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "redhat.json" + path.write_text(payload, encoding="utf-8") + result = ingest_file(str(path)) + self.assertEqual(result["source_id"], REDHAT_SOURCE_ID) + self.assertEqual(result["release"], "rhel-9") + self.assertEqual(result["advisories"][0]["severity"], "Important") + self.assertTrue(result["advisories"][0]["backport"]) + self.assertTrue(result["source_digest"].startswith("sha256:")) + + def test_rejects_wrong_schema(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "redhat.json" + path.write_text('{"schema":"coderisktools.vulnerability.ubuntu-feed","version":1,"release":"rhel-9","advisories":[]}', encoding="utf-8") + with self.assertRaises(ValueError): + ingest_file(str(path)) diff --git a/tests/test_v12_redhat_staging.py b/tests/test_v12_redhat_staging.py new file mode 100644 index 0000000..b9498e0 --- /dev/null +++ b/tests/test_v12_redhat_staging.py @@ -0,0 +1,27 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.redhat import ingest_file_to_database + + +class TestV12RedHatStaging(unittest.TestCase): + def test_redhat_rpm_boundary_stages_without_activation(self): + payload = '{"schema":"coderisktools.vulnerability.redhat-feed","version":1,"release":"rhel-9","advisories":[{"id":"RHSA-1","package":"openssl","fixed":"3.0.7-25.el9_2","severity":"Important","binary_packages":["openssl-libs"],"backport":true}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "redhat.json" + feed.write_text(payload, encoding="utf-8") + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "rhel-9-1") + self.assertEqual(report["state"], "staged") + self.assertFalse(report["activated"]) + affected = database.evaluate_component(Component(ecosystem="RPM", name="openssl-libs", version="3.0.7-24.el9_2")) + fixed = database.evaluate_component(Component(ecosystem="RPM", name="openssl-libs", version="3.0.7-25.el9_2")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From decd3bbbef67025cdb994a71cf5b87099a724ad8 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:43:27 +0000 Subject: [PATCH 14/65] feat: add bounded SUSE advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 + ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/suse.py | 74 +++++++++++++++++++ tests/test_v12_suse_source.py | 29 ++++++++ 4 files changed, 110 insertions(+) create mode 100644 src/vulnerability/sources/suse.py create mode 100644 tests/test_v12_suse_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 8d4b5cf..9d405af 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -134,3 +134,7 @@ V12e applies the same bounded staging contract to Red Hat fixtures, using the RPM ecosystem and preserving RHSA severity, release, backport, and source provenance metadata. This is not a claim of complete Red Hat advisory feed coverage. + +V12f applies the bounded staging contract to SUSE/SLES fixtures through the RPM +ecosystem, preserving release, severity, backport, and provenance metadata. +Full SUSE advisory-feed coverage is intentionally not claimed yet. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 09af62e..b8b6c98 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2697,6 +2697,9 @@ V12d: zweryfikowano Ubuntu fixed-version boundary przez istniejący comparator V12e: dodano bounded Red Hat fixture parser i staging bridge z RPM ecosystem, provenance, source snapshots, quality metrics oraz zweryfikowanym fixed-version boundary; pełne RHSA feed mapping pozostaje otwarte. +V12f: dodano bounded SUSE/SLES fixture parser i staging bridge z RPM ecosystem, +provenance, source snapshots, quality metrics oraz zweryfikowanym fixed-version +boundary; pełne SUSE advisory mapping pozostaje otwarte. - [ ] Debian. - [ ] Ubuntu. diff --git a/src/vulnerability/sources/suse.py b/src/vulnerability/sources/suse.py new file mode 100644 index 0000000..51f72c1 --- /dev/null +++ b/src/vulnerability/sources/suse.py @@ -0,0 +1,74 @@ +"""Bounded local SUSE security advisory feed adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +SUSE_SOURCE_ID = "suse-security" +SCHEMA = "coderisktools.vulnerability.suse-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str, default: str | None = None) -> str: + if value is None and default is not None: + value = default + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"SUSE {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "SUSE feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("SUSE feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported SUSE feed schema") + release = _text(document.get("release"), "release") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("SUSE advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("SUSE advisory must be an object") + binaries = item.get("binary_packages") + if not isinstance(binaries, list) or not binaries or len(binaries) > 1000: + raise ValueError("SUSE binary package list is invalid") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "source package"), "source_package": _text(item.get("source_package"), "source package", item.get("package")), "binary_packages": sorted({_text(name, "binary package") for name in binaries}), "fixed": _text(item.get("fixed"), "fixed RPM version"), "severity": _text(item.get("severity", "Unknown"), "severity"), "backport": item.get("backport", False) is True}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": SUSE_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1, "release": release} + return {"source_id": SUSE_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "release": release, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + source = f"{SUSE_SOURCE_ID}:{document['release']}" + records = [] + for advisory in document["advisories"]: + affected = [{"package": {"ecosystem": "RPM", "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]} for name in advisory["binary_packages"]] + records.append({"id": advisory["id"], "summary": f"SUSE {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"suse_release": document["release"], "source_package": advisory["source_package"], "severity": advisory["severity"], "backport": advisory["backport"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=source) + if stats.errors: + return {"source_id": source, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": source, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.suse-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, source, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": source, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v12_suse_source.py b/tests/test_v12_suse_source.py new file mode 100644 index 0000000..ba3b497 --- /dev/null +++ b/tests/test_v12_suse_source.py @@ -0,0 +1,29 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.suse import ingest_file, ingest_file_to_database, SUSE_SOURCE_ID + + +class TestV12SuseSource(unittest.TestCase): + def test_suse_parser_and_staging_preserve_sle_metadata(self): + payload = '{"schema":"coderisktools.vulnerability.suse-feed","version":1,"release":"sles-15-sp5","advisories":[{"id":"SUSE-SU-9999:1","package":"openssl","fixed":"3.0.8-150500.3.20.1","severity":"important","binary_packages":["libopenssl3"],"backport":true}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "suse.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], SUSE_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "suse-sles15-1") + self.assertEqual(report["state"], "staged") + self.assertFalse(report["activated"]) + affected = database.evaluate_component(Component(ecosystem="RPM", name="libopenssl3", version="3.0.8-150500.3.19.1")) + fixed = database.evaluate_component(Component(ecosystem="RPM", name="libopenssl3", version="3.0.8-150500.3.20.1")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From c59c003acb70550840c70f08cfda476e4d99f757 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:48:43 +0000 Subject: [PATCH 15/65] feat: add bounded Alpine APK advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 + ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 5 +- src/vulnerability/sources/alpine.py | 74 +++++++++++++++++++ tests/test_v12_alpine_source.py | 30 ++++++++ 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/vulnerability/sources/alpine.py create mode 100644 tests/test_v12_alpine_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 9d405af..f352706 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -138,3 +138,6 @@ coverage. V12f applies the bounded staging contract to SUSE/SLES fixtures through the RPM ecosystem, preserving release, severity, backport, and provenance metadata. Full SUSE advisory-feed coverage is intentionally not claimed yet. + +V12g extends the same bounded staging contract to Alpine APK fixtures and +verifies APK version revision ordering through `compare_alpine_version()`. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index b8b6c98..4697fb7 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2700,6 +2700,9 @@ boundary; pełne RHSA feed mapping pozostaje otwarte. V12f: dodano bounded SUSE/SLES fixture parser i staging bridge z RPM ecosystem, provenance, source snapshots, quality metrics oraz zweryfikowanym fixed-version boundary; pełne SUSE advisory mapping pozostaje otwarte. +V12g: Alpine fixture parser i staging bridge używają istniejącego +`compare_alpine_version()`; APK fixed-version boundary jest zweryfikowany, +ale pełne Alpine feed mapping pozostaje otwarte. - [ ] Debian. - [ ] Ubuntu. @@ -2708,7 +2711,7 @@ boundary; pełne SUSE advisory mapping pozostaje otwarte. - [ ] Alpine. - [x] RPM comparator — implemented and tested in P1; V12 source integration remains open. - [x] Debian comparator — implemented and tested in P1; V12 source integration remains bounded. -- [ ] APK comparator. +- [x] APK comparator — istniejący `compare_alpine_version()` zweryfikowany testem V12g. - [ ] Backport awareness. ## Stage V13 — pozostałe ekosystemy diff --git a/src/vulnerability/sources/alpine.py b/src/vulnerability/sources/alpine.py new file mode 100644 index 0000000..90a567c --- /dev/null +++ b/src/vulnerability/sources/alpine.py @@ -0,0 +1,74 @@ +"""Bounded local Alpine APK advisory feed adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +ALPINE_SOURCE_ID = "alpine-security" +SCHEMA = "coderisktools.vulnerability.alpine-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str, default: str | None = None) -> str: + if value is None and default is not None: + value = default + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Alpine {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Alpine feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Alpine feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Alpine feed schema") + release = _text(document.get("release"), "release") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Alpine advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Alpine advisory must be an object") + binaries = item.get("binary_packages") + if not isinstance(binaries, list) or not binaries or len(binaries) > 1000: + raise ValueError("Alpine binary package list is invalid") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "source package"), "source_package": _text(item.get("source_package"), "source package", item.get("package")), "binary_packages": sorted({_text(name, "binary package") for name in binaries}), "fixed": _text(item.get("fixed"), "fixed APK version"), "severity": _text(item.get("severity", "Unknown"), "severity"), "backport": item.get("backport", False) is True}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": ALPINE_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1, "release": release} + return {"source_id": ALPINE_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "release": release, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + source = f"{ALPINE_SOURCE_ID}:{document['release']}" + records = [] + for advisory in document["advisories"]: + affected = [{"package": {"ecosystem": "Alpine", "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]} for name in advisory["binary_packages"]] + records.append({"id": advisory["id"], "summary": f"Alpine {document['release']} advisory {advisory['id']}", "affected": affected, "database_specific": {"alpine_release": document["release"], "source_package": advisory["source_package"], "severity": advisory["severity"], "backport": advisory["backport"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=source) + if stats.errors: + return {"source_id": source, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": source, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.alpine-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, source, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": source, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v12_alpine_source.py b/tests/test_v12_alpine_source.py new file mode 100644 index 0000000..f089eb6 --- /dev/null +++ b/tests/test_v12_alpine_source.py @@ -0,0 +1,30 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.alpine import ALPINE_SOURCE_ID, ingest_file, ingest_file_to_database +from src.vulnerability.versions.alpine import compare_alpine_version + + +class TestV12AlpineSource(unittest.TestCase): + def test_apk_comparator_and_alpine_staging(self): + self.assertLess(compare_alpine_version("3.18.4-r0", "3.18.4-r1"), 0) + payload = '{"schema":"coderisktools.vulnerability.alpine-feed","version":1,"release":"v3.18","advisories":[{"id":"CVE-9999-1","package":"openssl","fixed":"3.1.4-r2","severity":"high","binary_packages":["libcrypto3"],"backport":true}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "alpine.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], ALPINE_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "alpine-v318-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Alpine", name="libcrypto3", version="3.1.4-r1")) + fixed = database.evaluate_component(Component(ecosystem="Alpine", name="libcrypto3", version="3.1.4-r2")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From c7450754e85ecdaa461572a398aaeaf8e3c87167 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:55:20 +0000 Subject: [PATCH 16/65] test: verify cross-distro backport metadata --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 5 ++++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 4 +++ tests/test_v12_backport_contract.py | 28 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/test_v12_backport_contract.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index f352706..8cd88f7 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -141,3 +141,8 @@ Full SUSE advisory-feed coverage is intentionally not claimed yet. V12g extends the same bounded staging contract to Alpine APK fixtures and verifies APK version revision ordering through `compare_alpine_version()`. + +V12h adds a cross-distro bounded backport contract test covering Debian, +Ubuntu, Red Hat, SUSE, and Alpine. It verifies preservation of backport flags, +fixed versions, and provenance digests without claiming complete real-feed +backport coverage. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 4697fb7..510a3c1 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2703,6 +2703,10 @@ boundary; pełne SUSE advisory mapping pozostaje otwarte. V12g: Alpine fixture parser i staging bridge używają istniejącego `compare_alpine_version()`; APK fixed-version boundary jest zweryfikowany, ale pełne Alpine feed mapping pozostaje otwarte. +V12h: dodano przekrojowy bounded backport contract test dla Debian, Ubuntu, +Red Hat, SUSE i Alpine; wszystkie adaptery zachowują `backport`, fixed version +i provenance digest. Pełna backport awareness dla realnych feedów pozostaje +otwarta. - [ ] Debian. - [ ] Ubuntu. diff --git a/tests/test_v12_backport_contract.py b/tests/test_v12_backport_contract.py new file mode 100644 index 0000000..8627391 --- /dev/null +++ b/tests/test_v12_backport_contract.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.sources.alpine import ingest_file as ingest_alpine +from src.vulnerability.sources.debian import ingest_file as ingest_debian +from src.vulnerability.sources.redhat import ingest_file as ingest_redhat +from src.vulnerability.sources.suse import ingest_file as ingest_suse +from src.vulnerability.sources.ubuntu import ingest_file as ingest_ubuntu + + +class TestV12BackportContract(unittest.TestCase): + def test_all_linux_adapters_preserve_bounded_backport_metadata(self): + fixtures = [ + (ingest_debian, "coderisktools.vulnerability.debian-feed", "bookworm", "DSA-1", "3.0.11-1~deb12u2"), + (ingest_ubuntu, "coderisktools.vulnerability.ubuntu-feed", "jammy", "USN-1", "3.0.11-1ubuntu2.1"), + (ingest_redhat, "coderisktools.vulnerability.redhat-feed", "rhel-9", "RHSA-1", "3.0.7-25.el9_2"), + (ingest_suse, "coderisktools.vulnerability.suse-feed", "sles-15", "SUSE-1", "3.0.8-1.2"), + (ingest_alpine, "coderisktools.vulnerability.alpine-feed", "v3.18", "CVE-1", "3.1.4-r2"), + ] + with tempfile.TemporaryDirectory() as directory: + for index, (parser, schema, release, advisory_id, fixed) in enumerate(fixtures): + path = Path(directory) / f"feed-{index}.json" + path.write_text("{" + f'"schema":"{schema}","version":1,"release":"{release}","advisories":[{{"id":"{advisory_id}","package":"openssl","fixed":"{fixed}","binary_packages":["openssl-bin"],"backport":true}}]' + "}", encoding="utf-8") + result = parser(str(path)) + self.assertTrue(result["advisories"][0]["backport"]) + self.assertEqual(result["advisories"][0]["fixed"], fixed) + self.assertEqual(result["provenance"]["source_digest"], result["source_digest"]) From d327085ed8836fcffca1b3865047addd6ce99079 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 11:58:54 +0000 Subject: [PATCH 17/65] feat: add bounded Maven advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 4 ++ src/vulnerability/sources/maven.py | 69 +++++++++++++++++++ tests/test_v13_maven_source.py | 28 ++++++++ 4 files changed, 105 insertions(+) create mode 100644 src/vulnerability/sources/maven.py create mode 100644 tests/test_v13_maven_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 8cd88f7..7a9a357 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -146,3 +146,7 @@ V12h adds a cross-distro bounded backport contract test covering Debian, Ubuntu, Red Hat, SUSE, and Alpine. It verifies preservation of backport flags, fixed versions, and provenance digests without claiming complete real-feed backport coverage. + +V13a adds a bounded Maven fixture/staging boundary with Maven coordinate +validation, fixed-version range matching, source provenance, and lifecycle +quality metadata. It does not claim complete Maven advisory coverage. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 510a3c1..94df65e 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2720,6 +2720,10 @@ otwarta. ## Stage V13 — pozostałe ekosystemy +V13a: dodano bounded Maven fixture parser i staging bridge z coordinate +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne Maven advisory/feed mapping pozostaje otwarte. + - [ ] Maven. - [ ] NuGet. - [ ] Ruby. diff --git a/src/vulnerability/sources/maven.py b/src/vulnerability/sources/maven.py new file mode 100644 index 0000000..f3dad4a --- /dev/null +++ b/src/vulnerability/sources/maven.py @@ -0,0 +1,69 @@ +"""Bounded local Maven advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +MAVEN_SOURCE_ID = "maven-security" +SCHEMA = "coderisktools.vulnerability.maven-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 512 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Maven {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Maven feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Maven feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Maven feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Maven advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Maven advisory must be an object") + package = _text(item.get("package"), "package coordinate") + if package.count(":") < 1 or package.count(":") > 2: + raise ValueError("Maven package must be group:artifact[:classifier]") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": package, "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": MAVEN_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": MAVEN_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [] + for advisory in document["advisories"]: + records.append({"id": advisory["id"], "summary": f"Maven advisory {advisory['id']}", "affected": [{"package": {"ecosystem": "Maven", "name": advisory["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": advisory["fixed"]}]}]}], "database_specific": {"severity": advisory["severity"]}, "_source_record": advisory}) + stats = database.import_osv_records(records, source=MAVEN_SOURCE_ID) + if stats.errors: + return {"source_id": MAVEN_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": MAVEN_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.maven-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, MAVEN_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for metric_name, metric_value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, metric_name, float(metric_value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": MAVEN_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_maven_source.py b/tests/test_v13_maven_source.py new file mode 100644 index 0000000..256434d --- /dev/null +++ b/tests/test_v13_maven_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.maven import MAVEN_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13MavenSource(unittest.TestCase): + def test_maven_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.maven-feed","version":1,"advisories":[{"id":"CVE-2026-1","package":"org.example:demo","fixed":"2.4.1","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "maven.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], MAVEN_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "maven-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Maven", name="org.example:demo", version="2.4.0")) + fixed = database.evaluate_component(Component(ecosystem="Maven", name="org.example:demo", version="2.4.1")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From dc61cd97cb70dbf620f5f8373b0dcbe25a2581af Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:02:56 +0000 Subject: [PATCH 18/65] feat: add bounded NuGet advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/nuget.py | 65 +++++++++++++++++++ tests/test_v13_nuget_source.py | 28 ++++++++ 4 files changed, 100 insertions(+) create mode 100644 src/vulnerability/sources/nuget.py create mode 100644 tests/test_v13_nuget_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 7a9a357..56350cf 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -150,3 +150,7 @@ backport coverage. V13a adds a bounded Maven fixture/staging boundary with Maven coordinate validation, fixed-version range matching, source provenance, and lifecycle quality metadata. It does not claim complete Maven advisory coverage. + +V13b adds the same bounded fixture/staging boundary for NuGet package IDs, +including fixed-version matching and lifecycle provenance. Complete NuGet +advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 94df65e..596e2a3 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2723,6 +2723,9 @@ otwarta. V13a: dodano bounded Maven fixture parser i staging bridge z coordinate validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Maven advisory/feed mapping pozostaje otwarte. +V13b: dodano bounded NuGet fixture parser i staging bridge z package-ID +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne NuGet advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/nuget.py b/src/vulnerability/sources/nuget.py new file mode 100644 index 0000000..043c730 --- /dev/null +++ b/src/vulnerability/sources/nuget.py @@ -0,0 +1,65 @@ +"""Bounded local NuGet advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +NUGET_SOURCE_ID = "nuget-security" +SCHEMA = "coderisktools.vulnerability.nuget-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"NuGet {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "NuGet feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("NuGet feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported NuGet feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("NuGet advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("NuGet advisory must be an object") + package = _text(item.get("package"), "package id") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": package, "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": NUGET_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": NUGET_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"NuGet advisory {item['id']}", "affected": [{"package": {"ecosystem": "NuGet", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=NUGET_SOURCE_ID) + if stats.errors: + return {"source_id": NUGET_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": NUGET_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.nuget-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, NUGET_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": NUGET_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_nuget_source.py b/tests/test_v13_nuget_source.py new file mode 100644 index 0000000..9f0d52f --- /dev/null +++ b/tests/test_v13_nuget_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.nuget import NUGET_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13NugetSource(unittest.TestCase): + def test_nuget_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.nuget-feed","version":1,"advisories":[{"id":"CVE-2026-2","package":"Example.Core","fixed":"8.0.4","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "nuget.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], NUGET_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "nuget-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="NuGet", name="Example.Core", version="8.0.3")) + fixed = database.evaluate_component(Component(ecosystem="NuGet", name="Example.Core", version="8.0.4")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From e0aa1472ea14178cc5e2490c9b3900675b50a3a9 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:13:18 +0000 Subject: [PATCH 19/65] feat: add bounded RubyGems advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/rubygems.py | 64 +++++++++++++++++++ tests/test_v13_rubygems_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/rubygems.py create mode 100644 tests/test_v13_rubygems_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 56350cf..0022b4a 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -154,3 +154,7 @@ quality metadata. It does not claim complete Maven advisory coverage. V13b adds the same bounded fixture/staging boundary for NuGet package IDs, including fixed-version matching and lifecycle provenance. Complete NuGet advisory coverage is not claimed. + +V13c adds the same bounded fixture/staging boundary for RubyGems names, +including fixed-version matching and lifecycle provenance. Complete RubyGems +advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 596e2a3..9eaafb2 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2726,6 +2726,9 @@ boundary; pełne Maven advisory/feed mapping pozostaje otwarte. V13b: dodano bounded NuGet fixture parser i staging bridge z package-ID validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne NuGet advisory/feed mapping pozostaje otwarte. +V13c: dodano bounded RubyGems fixture parser i staging bridge z gem-name +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne RubyGems advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/rubygems.py b/src/vulnerability/sources/rubygems.py new file mode 100644 index 0000000..010bfa8 --- /dev/null +++ b/src/vulnerability/sources/rubygems.py @@ -0,0 +1,64 @@ +"""Bounded local RubyGems advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +RUBYGEMS_SOURCE_ID = "rubygems-security" +SCHEMA = "coderisktools.vulnerability.rubygems-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"RubyGems {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "RubyGems feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("RubyGems feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported RubyGems feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("RubyGems advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("RubyGems advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "gem name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": RUBYGEMS_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": RUBYGEMS_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"RubyGems advisory {item['id']}", "affected": [{"package": {"ecosystem": "RubyGems", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=RUBYGEMS_SOURCE_ID) + if stats.errors: + return {"source_id": RUBYGEMS_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": RUBYGEMS_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.rubygems-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, RUBYGEMS_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": RUBYGEMS_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_rubygems_source.py b/tests/test_v13_rubygems_source.py new file mode 100644 index 0000000..ec3861c --- /dev/null +++ b/tests/test_v13_rubygems_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.rubygems import RUBYGEMS_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13RubygemsSource(unittest.TestCase): + def test_rubygems_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.rubygems-feed","version":1,"advisories":[{"id":"CVE-2026-3","package":"rack","fixed":"3.0.9","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "rubygems.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], RUBYGEMS_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "rubygems-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="RubyGems", name="rack", version="3.0.8")) + fixed = database.evaluate_component(Component(ecosystem="RubyGems", name="rack", version="3.0.9")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 7a80f1f8f9ec5dc6743150a0528f29ed00c4bdb4 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:17:00 +0000 Subject: [PATCH 20/65] feat: add bounded Swift advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/swift.py | 65 +++++++++++++++++++ tests/test_v13_swift_source.py | 28 ++++++++ 4 files changed, 100 insertions(+) create mode 100644 src/vulnerability/sources/swift.py create mode 100644 tests/test_v13_swift_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 0022b4a..2963f62 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -158,3 +158,7 @@ advisory coverage is not claimed. V13c adds the same bounded fixture/staging boundary for RubyGems names, including fixed-version matching and lifecycle provenance. Complete RubyGems advisory coverage is not claimed. + +V13d adds the same bounded fixture/staging boundary for Swift package +identities, including fixed-version matching and lifecycle provenance. +Complete Swift advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 9eaafb2..22ca948 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2729,6 +2729,9 @@ boundary; pełne NuGet advisory/feed mapping pozostaje otwarte. V13c: dodano bounded RubyGems fixture parser i staging bridge z gem-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne RubyGems advisory/feed mapping pozostaje otwarte. +V13d: dodano bounded Swift fixture parser i staging bridge z package-identity +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne Swift advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/swift.py b/src/vulnerability/sources/swift.py new file mode 100644 index 0000000..6d2ff1c --- /dev/null +++ b/src/vulnerability/sources/swift.py @@ -0,0 +1,65 @@ +"""Bounded local Swift package advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +SWIFT_SOURCE_ID = "swift-security" +SCHEMA = "coderisktools.vulnerability.swift-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Swift {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Swift feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Swift feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Swift feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Swift advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Swift advisory must be an object") + package = _text(item.get("package"), "package identity") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": package, "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": SWIFT_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": SWIFT_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"Swift advisory {item['id']}", "affected": [{"package": {"ecosystem": "Swift", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=SWIFT_SOURCE_ID) + if stats.errors: + return {"source_id": SWIFT_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": SWIFT_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.swift-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, SWIFT_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": SWIFT_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_swift_source.py b/tests/test_v13_swift_source.py new file mode 100644 index 0000000..9971b15 --- /dev/null +++ b/tests/test_v13_swift_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.swift import SWIFT_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13SwiftSource(unittest.TestCase): + def test_swift_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.swift-feed","version":1,"advisories":[{"id":"CVE-2026-4","package":"swift-nio","fixed":"2.65.0","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "swift.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], SWIFT_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "swift-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Swift", name="swift-nio", version="2.64.0")) + fixed = database.evaluate_component(Component(ecosystem="Swift", name="swift-nio", version="2.65.0")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From c9d7dab91b83607016ceebef187f9f48e6c0bd25 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:21:50 +0000 Subject: [PATCH 21/65] feat: add bounded Dart advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/dart.py | 64 +++++++++++++++++++ tests/test_v13_dart_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/dart.py create mode 100644 tests/test_v13_dart_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 2963f62..c9eee25 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -162,3 +162,7 @@ advisory coverage is not claimed. V13d adds the same bounded fixture/staging boundary for Swift package identities, including fixed-version matching and lifecycle provenance. Complete Swift advisory coverage is not claimed. + +V13e adds the same bounded fixture/staging boundary for Dart/pub package names, +including fixed-version matching and lifecycle provenance. Complete Dart +advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 22ca948..a835854 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2732,6 +2732,9 @@ boundary; pełne RubyGems advisory/feed mapping pozostaje otwarte. V13d: dodano bounded Swift fixture parser i staging bridge z package-identity validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Swift advisory/feed mapping pozostaje otwarte. +V13e: dodano bounded Dart/pub fixture parser i staging bridge z package-name +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne Dart advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/dart.py b/src/vulnerability/sources/dart.py new file mode 100644 index 0000000..382d30b --- /dev/null +++ b/src/vulnerability/sources/dart.py @@ -0,0 +1,64 @@ +"""Bounded local Dart/pub advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +DART_SOURCE_ID = "dart-security" +SCHEMA = "coderisktools.vulnerability.dart-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Dart {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Dart feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Dart feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Dart feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Dart advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Dart advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "package name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": DART_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": DART_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"Dart advisory {item['id']}", "affected": [{"package": {"ecosystem": "Dart", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=DART_SOURCE_ID) + if stats.errors: + return {"source_id": DART_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": DART_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.dart-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, DART_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": DART_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_dart_source.py b/tests/test_v13_dart_source.py new file mode 100644 index 0000000..5d24019 --- /dev/null +++ b/tests/test_v13_dart_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.dart import DART_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13DartSource(unittest.TestCase): + def test_dart_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.dart-feed","version":1,"advisories":[{"id":"CVE-2026-5","package":"http","fixed":"1.2.2","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "dart.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], DART_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "dart-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Dart", name="http", version="1.2.1")) + fixed = database.evaluate_component(Component(ecosystem="Dart", name="http", version="1.2.2")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From c8bf04db9113680f50271dd6d21a7f52e777220c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:26:44 +0000 Subject: [PATCH 22/65] feat: add bounded Elixir advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/elixir.py | 64 +++++++++++++++++++ tests/test_v13_elixir_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/elixir.py create mode 100644 tests/test_v13_elixir_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index c9eee25..dbcb0a4 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -166,3 +166,7 @@ Complete Swift advisory coverage is not claimed. V13e adds the same bounded fixture/staging boundary for Dart/pub package names, including fixed-version matching and lifecycle provenance. Complete Dart advisory coverage is not claimed. + +V13f adds the same bounded fixture/staging boundary for Elixir/Hex package +names, including fixed-version matching and lifecycle provenance. Complete +Elixir advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index a835854..2148258 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2735,6 +2735,9 @@ boundary; pełne Swift advisory/feed mapping pozostaje otwarte. V13e: dodano bounded Dart/pub fixture parser i staging bridge z package-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Dart advisory/feed mapping pozostaje otwarte. +V13f: dodano bounded Elixir/Hex fixture parser i staging bridge z package-name +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne Elixir advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/elixir.py b/src/vulnerability/sources/elixir.py new file mode 100644 index 0000000..3e6e87f --- /dev/null +++ b/src/vulnerability/sources/elixir.py @@ -0,0 +1,64 @@ +"""Bounded local Elixir/Hex advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +ELIXIR_SOURCE_ID = "elixir-security" +SCHEMA = "coderisktools.vulnerability.elixir-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Elixir {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Elixir feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Elixir feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Elixir feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Elixir advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Elixir advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "Hex package name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": ELIXIR_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": ELIXIR_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"Elixir advisory {item['id']}", "affected": [{"package": {"ecosystem": "Hex", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=ELIXIR_SOURCE_ID) + if stats.errors: + return {"source_id": ELIXIR_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": ELIXIR_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.elixir-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, ELIXIR_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": ELIXIR_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_elixir_source.py b/tests/test_v13_elixir_source.py new file mode 100644 index 0000000..d0efb86 --- /dev/null +++ b/tests/test_v13_elixir_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.elixir import ELIXIR_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13ElixirSource(unittest.TestCase): + def test_elixir_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.elixir-feed","version":1,"advisories":[{"id":"CVE-2026-6","package":"plug","fixed":"1.15.3","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "elixir.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], ELIXIR_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "elixir-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Hex", name="plug", version="1.15.2")) + fixed = database.evaluate_component(Component(ecosystem="Hex", name="plug", version="1.15.3")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 232c5d20222ded65602fdd779dd16c9fd73af54d Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:39:34 +0000 Subject: [PATCH 23/65] feat: add bounded Haskell advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/haskell.py | 64 +++++++++++++++++++ tests/test_v13_haskell_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/haskell.py create mode 100644 tests/test_v13_haskell_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index dbcb0a4..467748d 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -170,3 +170,7 @@ advisory coverage is not claimed. V13f adds the same bounded fixture/staging boundary for Elixir/Hex package names, including fixed-version matching and lifecycle provenance. Complete Elixir advisory coverage is not claimed. + +V13g adds the same bounded fixture/staging boundary for Haskell/Hackage package +names, including fixed-version matching and lifecycle provenance. Complete +Haskell advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 2148258..7f2d1bf 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2738,6 +2738,9 @@ boundary; pełne Dart advisory/feed mapping pozostaje otwarte. V13f: dodano bounded Elixir/Hex fixture parser i staging bridge z package-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Elixir advisory/feed mapping pozostaje otwarte. +V13g: dodano bounded Haskell/Hackage fixture parser i staging bridge z +package-name validation, provenance, source snapshots, quality metrics oraz +fixed-version boundary; pełne Haskell advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/haskell.py b/src/vulnerability/sources/haskell.py new file mode 100644 index 0000000..5675e6c --- /dev/null +++ b/src/vulnerability/sources/haskell.py @@ -0,0 +1,64 @@ +"""Bounded local Haskell/Hackage advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +HASKELL_SOURCE_ID = "haskell-security" +SCHEMA = "coderisktools.vulnerability.haskell-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Haskell {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Haskell feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Haskell feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Haskell feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Haskell advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Haskell advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "Hackage package name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": HASKELL_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": HASKELL_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"Haskell advisory {item['id']}", "affected": [{"package": {"ecosystem": "Hackage", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=HASKELL_SOURCE_ID) + if stats.errors: + return {"source_id": HASKELL_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": HASKELL_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.haskell-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, HASKELL_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": HASKELL_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_haskell_source.py b/tests/test_v13_haskell_source.py new file mode 100644 index 0000000..e1dc9dc --- /dev/null +++ b/tests/test_v13_haskell_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.haskell import HASKELL_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13HaskellSource(unittest.TestCase): + def test_haskell_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.haskell-feed","version":1,"advisories":[{"id":"CVE-2026-7","package":"aeson","fixed":"2.2.1.1","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "haskell.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], HASKELL_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "haskell-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Hackage", name="aeson", version="2.2.1.0")) + fixed = database.evaluate_component(Component(ecosystem="Hackage", name="aeson", version="2.2.1.1")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 997738ffcddaeaa945de33b1844b2889fb54bacf Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:42:57 +0000 Subject: [PATCH 24/65] feat: add bounded R advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/r.py | 64 +++++++++++++++++++ tests/test_v13_r_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/r.py create mode 100644 tests/test_v13_r_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 467748d..2602d18 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -174,3 +174,7 @@ Elixir advisory coverage is not claimed. V13g adds the same bounded fixture/staging boundary for Haskell/Hackage package names, including fixed-version matching and lifecycle provenance. Complete Haskell advisory coverage is not claimed. + +V13h adds the same bounded fixture/staging boundary for R/CRAN package names, +including fixed-version matching and lifecycle provenance. Complete R advisory +coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 7f2d1bf..8d8f3aa 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2741,6 +2741,9 @@ boundary; pełne Elixir advisory/feed mapping pozostaje otwarte. V13g: dodano bounded Haskell/Hackage fixture parser i staging bridge z package-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Haskell advisory/feed mapping pozostaje otwarte. +V13h: dodano bounded R/CRAN fixture parser i staging bridge z package-name +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne R advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/r.py b/src/vulnerability/sources/r.py new file mode 100644 index 0000000..72dd224 --- /dev/null +++ b/src/vulnerability/sources/r.py @@ -0,0 +1,64 @@ +"""Bounded local R/CRAN advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +R_SOURCE_ID = "r-security" +SCHEMA = "coderisktools.vulnerability.r-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"R {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "R feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("R feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported R feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("R advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("R advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "CRAN package name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": R_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": R_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"R advisory {item['id']}", "affected": [{"package": {"ecosystem": "CRAN", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=R_SOURCE_ID) + if stats.errors: + return {"source_id": R_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": R_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.r-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, R_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": R_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_r_source.py b/tests/test_v13_r_source.py new file mode 100644 index 0000000..83beb0d --- /dev/null +++ b/tests/test_v13_r_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.r import R_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13RSource(unittest.TestCase): + def test_r_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.r-feed","version":1,"advisories":[{"id":"CVE-2026-8","package":"jsonlite","fixed":"1.8.8","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "r.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], R_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "r-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="CRAN", name="jsonlite", version="1.8.7")) + fixed = database.evaluate_component(Component(ecosystem="CRAN", name="jsonlite", version="1.8.8")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 526e68a56b7dce99de12050c3cf61f2fc2c6e0e4 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 12:54:30 +0000 Subject: [PATCH 25/65] feat: add bounded Conan advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/conan.py | 65 +++++++++++++++++++ tests/test_v13_conan_source.py | 28 ++++++++ 4 files changed, 100 insertions(+) create mode 100644 src/vulnerability/sources/conan.py create mode 100644 tests/test_v13_conan_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 2602d18..21a3fbc 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -178,3 +178,7 @@ Haskell advisory coverage is not claimed. V13h adds the same bounded fixture/staging boundary for R/CRAN package names, including fixed-version matching and lifecycle provenance. Complete R advisory coverage is not claimed. + +V13i adds the same bounded fixture/staging boundary for Conan package +references, including fixed-version matching and lifecycle provenance. +Complete Conan advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 8d8f3aa..144b8aa 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2744,6 +2744,9 @@ fixed-version boundary; pełne Haskell advisory/feed mapping pozostaje otwarte. V13h: dodano bounded R/CRAN fixture parser i staging bridge z package-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne R advisory/feed mapping pozostaje otwarte. +V13i: dodano bounded Conan fixture parser i staging bridge z package-reference +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne Conan advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/conan.py b/src/vulnerability/sources/conan.py new file mode 100644 index 0000000..97f43c2 --- /dev/null +++ b/src/vulnerability/sources/conan.py @@ -0,0 +1,65 @@ +"""Bounded local Conan advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +CONAN_SOURCE_ID = "conan-security" +SCHEMA = "coderisktools.vulnerability.conan-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"Conan {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "Conan feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("Conan feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported Conan feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("Conan advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("Conan advisory must be an object") + package = _text(item.get("package"), "reference") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": package, "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": CONAN_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": CONAN_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"Conan advisory {item['id']}", "affected": [{"package": {"ecosystem": "Conan", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=CONAN_SOURCE_ID) + if stats.errors: + return {"source_id": CONAN_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": CONAN_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.conan-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, CONAN_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": CONAN_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_conan_source.py b/tests/test_v13_conan_source.py new file mode 100644 index 0000000..32bcdfd --- /dev/null +++ b/tests/test_v13_conan_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.conan import CONAN_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13ConanSource(unittest.TestCase): + def test_conan_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.conan-feed","version":1,"advisories":[{"id":"CVE-2026-9","package":"openssl","fixed":"3.2.2","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "conan.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], CONAN_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "conan-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="Conan", name="openssl", version="3.2.1")) + fixed = database.evaluate_component(Component(ecosystem="Conan", name="openssl", version="3.2.2")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From 67887cd0c9f4a57ac503d8deff5da6d8727d05c6 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:02:35 +0000 Subject: [PATCH 26/65] feat: add bounded vcpkg advisory staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/vcpkg.py | 64 +++++++++++++++++++ tests/test_v13_vcpkg_source.py | 28 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 src/vulnerability/sources/vcpkg.py create mode 100644 tests/test_v13_vcpkg_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 21a3fbc..4a7dd3a 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -182,3 +182,7 @@ coverage is not claimed. V13i adds the same bounded fixture/staging boundary for Conan package references, including fixed-version matching and lifecycle provenance. Complete Conan advisory coverage is not claimed. + +V13j adds the same bounded fixture/staging boundary for vcpkg port names, +including fixed-version matching and lifecycle provenance. Complete vcpkg +advisory coverage is not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 144b8aa..641cd5d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2747,6 +2747,9 @@ boundary; pełne R advisory/feed mapping pozostaje otwarte. V13i: dodano bounded Conan fixture parser i staging bridge z package-reference validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne Conan advisory/feed mapping pozostaje otwarte. +V13j: dodano bounded vcpkg fixture parser i staging bridge z port-name +validation, provenance, source snapshots, quality metrics oraz fixed-version +boundary; pełne vcpkg advisory/feed mapping pozostaje otwarte. - [ ] Maven. - [ ] NuGet. diff --git a/src/vulnerability/sources/vcpkg.py b/src/vulnerability/sources/vcpkg.py new file mode 100644 index 0000000..4633ca9 --- /dev/null +++ b/src/vulnerability/sources/vcpkg.py @@ -0,0 +1,64 @@ +"""Bounded local vcpkg advisory source adapter.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +VCPKG_SOURCE_ID = "vcpkg-security" +SCHEMA = "coderisktools.vulnerability.vcpkg-feed" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_ADVISORIES = 100_000 +_MAX_TEXT = 256 + + +def _text(value: Any, field: str) -> str: + if not isinstance(value, str) or not value or len(value) > _MAX_TEXT: + raise ValueError(f"vcpkg {field} is invalid") + return value + + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "vcpkg feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("vcpkg feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("schema") != SCHEMA or document.get("version") != 1: + raise ValueError("unsupported vcpkg feed schema") + advisories = document.get("advisories") + if not isinstance(advisories, list) or len(advisories) > MAX_ADVISORIES: + raise ValueError("vcpkg advisory list exceeds bounds") + normalized = [] + for item in advisories: + if not isinstance(item, dict): + raise ValueError("vcpkg advisory must be an object") + normalized.append({"id": _text(item.get("id"), "advisory id"), "package": _text(item.get("package"), "port name"), "fixed": _text(item.get("fixed"), "fixed version"), "severity": _text(item.get("severity", "Unknown"), "severity")}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": VCPKG_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": SCHEMA, "version": 1} + return {"source_id": VCPKG_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "advisories": normalized, "provenance": provenance} + + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [{"id": item["id"], "summary": f"vcpkg advisory {item['id']}", "affected": [{"package": {"ecosystem": "vcpkg", "name": item["package"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}], "database_specific": {"severity": item["severity"]}, "_source_record": item} for item in document["advisories"]] + stats = database.import_osv_records(records, source=VCPKG_SOURCE_ID) + if stats.errors: + return {"source_id": VCPKG_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "errors": list(stats.errors)} + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": VCPKG_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.vcpkg-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, VCPKG_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": VCPKG_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": []} diff --git a/tests/test_v13_vcpkg_source.py b/tests/test_v13_vcpkg_source.py new file mode 100644 index 0000000..0d0ea55 --- /dev/null +++ b/tests/test_v13_vcpkg_source.py @@ -0,0 +1,28 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.vcpkg import VCPKG_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV13VcpkgSource(unittest.TestCase): + def test_vcpkg_fixture_staging_and_fixed_boundary(self): + payload = '{"schema":"coderisktools.vulnerability.vcpkg-feed","version":1,"advisories":[{"id":"CVE-2026-10","package":"openssl","fixed":"3.3.1","severity":"high"}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "vcpkg.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], VCPKG_SOURCE_ID) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "vcpkg-1") + self.assertEqual(report["state"], "staged") + affected = database.evaluate_component(Component(ecosystem="vcpkg", name="openssl", version="3.3.0")) + fixed = database.evaluate_component(Component(ecosystem="vcpkg", name="openssl", version="3.3.1")) + self.assertEqual(affected["status"], "affected") + self.assertEqual(fixed["status"], "not_affected") + finally: + database.close() From b72bd9f3563f036e5b3e2731dac69a375d7cbaff Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:08:02 +0000 Subject: [PATCH 27/65] feat: add bounded generic CSAF staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 + ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 5 + src/vulnerability/sources/csaf.py | 94 +++++++++++++++++++ tests/test_v14_csaf_source.py | 27 ++++++ 4 files changed, 130 insertions(+) create mode 100644 src/vulnerability/sources/csaf.py create mode 100644 tests/test_v14_csaf_source.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 4a7dd3a..e574989 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -186,3 +186,7 @@ Complete Conan advisory coverage is not claimed. V13j adds the same bounded fixture/staging boundary for vcpkg port names, including fixed-version matching and lifecycle provenance. Complete vcpkg advisory coverage is not claimed. + +V14a adds a bounded generic CSAF 2.0 staging boundary with product-tree/PURL +mapping and `known_affected` preservation. Provider registry, remediations, +health and complete CSAF coverage are not claimed. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 641cd5d..b8d99ef 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2764,6 +2764,11 @@ boundary; pełne vcpkg advisory/feed mapping pozostaje otwarte. ## Stage V14 — CSAF vendor feeds +V14a: dodano bounded generic CSAF 2.0 importer z product-tree/PURL mapping, +`known_affected` status, provenance, source snapshots i quality metrics. +Provider registry, health, remediations, vendor-specific status i pełne CSAF +coverage pozostają otwarte. + - [ ] Generic CSAF importer. - [ ] Provider registry. - [ ] Provider health. diff --git a/src/vulnerability/sources/csaf.py b/src/vulnerability/sources/csaf.py new file mode 100644 index 0000000..961c120 --- /dev/null +++ b/src/vulnerability/sources/csaf.py @@ -0,0 +1,94 @@ +"""Bounded generic CSAF 2.0 security-advisory importer.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded +from ..database import VulnerabilityDatabase + +CSAF_SOURCE_ID = "csaf-security" +MAX_FEED_BYTES = 50 * 1024 * 1024 +MAX_VULNERABILITIES = 100_000 +MAX_PRODUCTS = 200_000 + +def _purl_component(purl: Any) -> tuple[str, str, str]: + if not isinstance(purl, str) or not purl.startswith("pkg:") or len(purl) > 2048: + raise ValueError("CSAF product PURL is invalid") + value = purl[4:] + kind, _, remainder = value.partition("/") + name_version = remainder.split("?", 1)[0].split("#", 1)[0] + parts = name_version.rsplit("@", 1) + if len(parts) != 2 or not all(parts): + raise ValueError("CSAF product PURL must include name and version") + ecosystem = {"pypi": "PyPI", "npm": "npm", "cargo": "crates.io", "golang": "Go", "maven": "Maven", "nuget": "NuGet"}.get(kind.lower(), kind) + return ecosystem, parts[0], parts[1] + +def _products(node: Any, output: dict[str, tuple[str, str, str]]) -> None: + if isinstance(node, dict): + product = node.get("product") + if isinstance(product, dict) and isinstance(product.get("product_id"), str): + helper = product.get("product_identification_helper", {}) + if isinstance(helper, dict) and "purl" in helper: + output[product["product_id"]] = _purl_component(helper["purl"]) + for value in node.values(): + _products(value, output) + elif isinstance(node, list): + for value in node: + _products(value, output) + +def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "CSAF feed") + try: + document = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("CSAF feed must be bounded UTF-8 JSON") from exc + if not isinstance(document, dict) or document.get("csaf_version") != "2.0": + raise ValueError("unsupported CSAF schema") + vulnerabilities = document.get("vulnerabilities") + if not isinstance(vulnerabilities, list) or len(vulnerabilities) > MAX_VULNERABILITIES: + raise ValueError("CSAF vulnerability list exceeds bounds") + products: dict[str, tuple[str, str, str]] = {} + _products(document.get("product_tree", {}), products) + if len(products) > MAX_PRODUCTS: + raise ValueError("CSAF product tree exceeds bounds") + normalized = [] + for item in vulnerabilities: + if not isinstance(item, dict) or not isinstance(item.get("cve"), str): + raise ValueError("CSAF vulnerability requires cve") + status = item.get("product_status", {}) + if not isinstance(status, dict): + raise ValueError("CSAF product_status must be an object") + for key in ("known_affected", "known_not_affected"): + if not isinstance(status.get(key, []), list): + raise ValueError("CSAF product status list is invalid") + normalized.append({"id": item["cve"], "affected_product_ids": list(status.get("known_affected", [])), "not_affected_product_ids": list(status.get("known_not_affected", [])), "products": products, "raw": item}) + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + provenance = {"source_id": CSAF_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": "csaf_security_advisory", "version": "2.0"} + return {"source_id": CSAF_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "product_count": len(products), "advisories": normalized, "provenance": provenance} + +def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: + document = ingest_file(path, max_bytes=max_bytes) + records = [] + for advisory in document["advisories"]: + for product_id in advisory["affected_product_ids"]: + if product_id not in advisory["products"]: + raise ValueError(f"CSAF references unknown product {product_id}") + ecosystem, name, version = advisory["products"][product_id] + records.append({"id": advisory["id"], "summary": f"CSAF advisory {advisory['id']}", "affected": [{"package": {"ecosystem": ecosystem, "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}], "database_specific": {"csaf_product_id": product_id, "csaf_product_status": "known_affected"}, "_source_record": advisory["raw"]}) + stats = database.import_osv_records(records, source=CSAF_SOURCE_ID) + manifest = database.build_snapshot_manifest() + manifest.update({"source_id": CSAF_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.csaf-staging.v1"}) + database.stage_snapshot(snapshot_id, document["source_digest"], manifest) + now = datetime.now(timezone.utc).isoformat() + database.connection.execute("INSERT OR REPLACE INTO source_snapshots(snapshot_id, source_id, content_digest, observed_at, record_count, status, metadata_json) VALUES (?, ?, ?, ?, ?, ?, ?)", (snapshot_id, CSAF_SOURCE_ID, document["source_digest"], now, stats.records_seen, "staged", json.dumps(document["provenance"], sort_keys=True))) + for name, value in (("records_seen", stats.records_seen), ("advisories_imported", stats.advisories_imported), ("affected_packages_imported", stats.affected_packages_imported)): + database.connection.execute("INSERT OR REPLACE INTO quality_metrics(snapshot_id, metric_name, metric_value, details_json) VALUES (?, ?, ?, ?)", (snapshot_id, name, float(value), "{}")) + database.connection.commit() + if activate: + database.activate_snapshot(snapshot_id) + return {"source_id": CSAF_SOURCE_ID, "snapshot_id": snapshot_id, "state": "active" if activate else "staged", "activated": activate, "records_seen": stats.records_seen, "advisories_imported": stats.advisories_imported, "affected_packages_imported": stats.affected_packages_imported, "errors": list(stats.errors)} diff --git a/tests/test_v14_csaf_source.py b/tests/test_v14_csaf_source.py new file mode 100644 index 0000000..86c8980 --- /dev/null +++ b/tests/test_v14_csaf_source.py @@ -0,0 +1,27 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.models import Component +from src.vulnerability.sources.csaf import CSAF_SOURCE_ID, ingest_file, ingest_file_to_database + + +class TestV14CsafSource(unittest.TestCase): + def test_generic_csaf_product_tree_and_status_staging(self): + payload = '{"csaf_version":"2.0","document":{"category":"csaf_security_advisory","title":"Example advisory","tracking":{"id":"CSAF-2026-1","current_release_date":"2026-01-01T00:00:00Z"}},"product_tree":{"branches":[{"name":"product","product":{"product_id":"pkg-1","product_identification_helper":{"purl":"pkg:pypi/example@1.0.0"}}}]},"vulnerabilities":[{"cve":"CVE-2026-11","product_status":{"known_affected":["pkg-1"]},"notes":[{"category":"description","text":"Example"}]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "csaf.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + self.assertEqual(parsed["source_id"], CSAF_SOURCE_ID) + self.assertEqual(parsed["advisory_count"], 1) + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "csaf-1") + self.assertEqual(report["state"], "staged") + result = database.evaluate_component(Component(ecosystem="PyPI", name="example", version="1.0.0")) + self.assertEqual(result["status"], "affected") + finally: + database.close() From 19da25ca29e133676e27725d8f78220e00ebe69b Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:25:32 +0000 Subject: [PATCH 28/65] feat: add CSAF provider registry health --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 + ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/csaf_registry.py | 59 +++++++++++++++++++ tests/test_v14_csaf_registry.py | 16 +++++ 4 files changed, 81 insertions(+) create mode 100644 src/vulnerability/sources/csaf_registry.py create mode 100644 tests/test_v14_csaf_registry.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index e574989..4dfb54e 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -190,3 +190,6 @@ advisory coverage is not claimed. V14a adds a bounded generic CSAF 2.0 staging boundary with product-tree/PURL mapping and `known_affected` preservation. Provider registry, remediations, health and complete CSAF coverage are not claimed. + +V14b adds a deterministic CSAF provider registry and health-state contract. +Registry operations are local and do not perform implicit network calls. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index b8d99ef..54caccf 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2768,6 +2768,9 @@ V14a: dodano bounded generic CSAF 2.0 importer z product-tree/PURL mapping, `known_affected` status, provenance, source snapshots i quality metrics. Provider registry, health, remediations, vendor-specific status i pełne CSAF coverage pozostają otwarte. +V14b: dodano additive CSAF provider registry z walidacją endpointów, +deterministycznym sortowaniem i rejestrowaniem wyników bez implicit network +calls. Raport health rozróżnia `healthy`, `unhealthy`, `disabled` i `unknown`. - [ ] Generic CSAF importer. - [ ] Provider registry. diff --git a/src/vulnerability/sources/csaf_registry.py b/src/vulnerability/sources/csaf_registry.py new file mode 100644 index 0000000..6cd2fa5 --- /dev/null +++ b/src/vulnerability/sources/csaf_registry.py @@ -0,0 +1,59 @@ +"""Deterministic CSAF provider registry and health state.""" + +from __future__ import annotations + +import re +from datetime import datetime, timezone +from typing import Any +from urllib.parse import urlparse + +_PROVIDER_RE = re.compile(r"^[a-z0-9][a-z0-9_.-]{0,63}$") + + +class CsafProviderRegistry: + def __init__(self) -> None: + self._providers: dict[str, dict[str, Any]] = {} + + def register(self, provider_id: str, endpoint: str, *, enabled: bool = True) -> None: + if not isinstance(provider_id, str) or not _PROVIDER_RE.fullmatch(provider_id): + raise ValueError("invalid CSAF provider_id") + parsed = urlparse(endpoint) + if parsed.scheme not in {"http", "https"} or not parsed.netloc: + raise ValueError("CSAF provider endpoint must be an absolute HTTP(S) URL") + self._providers[provider_id] = {"provider_id": provider_id, "endpoint": endpoint, "enabled": bool(enabled), "successes": 0, "failures": 0, "last_success": None, "last_failure": None, "last_records": 0, "last_digest": None} + + def record_result(self, provider_id: str, *, success: bool, records: int = 0, digest: str | None = None, observed_at: str | None = None) -> None: + provider = self._providers.get(provider_id) + if provider is None: + raise KeyError(provider_id) + if not isinstance(records, int) or records < 0: + raise ValueError("records must be a non-negative integer") + timestamp = observed_at or datetime.now(timezone.utc).isoformat() + if success: + provider["successes"] += 1 + provider["last_success"] = timestamp + provider["last_records"] = records + provider["last_digest"] = digest + else: + provider["failures"] += 1 + provider["last_failure"] = timestamp + + def list_providers(self) -> list[dict[str, Any]]: + return [{"provider_id": p["provider_id"], "endpoint": p["endpoint"], "enabled": p["enabled"]} for p in sorted(self._providers.values(), key=lambda item: item["provider_id"])] + + def health_report(self, provider_id: str) -> dict[str, Any]: + provider = self._providers.get(provider_id) + if provider is None: + raise KeyError(provider_id) + if not provider["enabled"]: + status = "disabled" + elif provider["last_success"] is not None and (provider["last_failure"] is None or provider["last_success"] >= provider["last_failure"]): + status = "healthy" + elif provider["failures"]: + status = "unhealthy" + else: + status = "unknown" + return {"provider_id": provider_id, "endpoint": provider["endpoint"], "enabled": provider["enabled"], "status": status, "successes": provider["successes"], "failures": provider["failures"], "last_success": provider["last_success"], "last_failure": provider["last_failure"], "last_records": provider["last_records"], "last_digest": provider["last_digest"]} + + def health_reports(self) -> list[dict[str, Any]]: + return [self.health_report(provider_id) for provider_id in sorted(self._providers)] diff --git a/tests/test_v14_csaf_registry.py b/tests/test_v14_csaf_registry.py new file mode 100644 index 0000000..07bf363 --- /dev/null +++ b/tests/test_v14_csaf_registry.py @@ -0,0 +1,16 @@ +import unittest + +from src.vulnerability.sources.csaf_registry import CsafProviderRegistry + + +class TestV14CsafRegistry(unittest.TestCase): + def test_provider_registry_and_health_are_deterministic(self): + registry = CsafProviderRegistry() + registry.register("example", "https://example.invalid/csaf", enabled=True) + registry.record_result("example", success=True, records=3, digest="sha256:abc") + report = registry.health_report("example") + self.assertEqual(report["provider_id"], "example") + self.assertEqual(report["status"], "healthy") + self.assertEqual(report["last_records"], 3) + self.assertEqual(report["last_digest"], "sha256:abc") + self.assertEqual(registry.list_providers()[0]["provider_id"], "example") From 16c06a94d54c9099cf7f62a3991739c8081eeb9b Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:29:05 +0000 Subject: [PATCH 29/65] feat: preserve CSAF remediations and vendor status --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 +++ src/vulnerability/sources/csaf.py | 4 +-- tests/test_v14_csaf_remediations.py | 25 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/test_v14_csaf_remediations.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 4dfb54e..b1096bd 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -193,3 +193,7 @@ health and complete CSAF coverage are not claimed. V14b adds a deterministic CSAF provider registry and health-state contract. Registry operations are local and do not perform implicit network calls. + +V14c preserves bounded CSAF remediations and vendor-specific product status in +source records and `database_specific`. Full remediation semantics remain +outside the verified subset. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 54caccf..f982b31 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2771,6 +2771,9 @@ coverage pozostają otwarte. V14b: dodano additive CSAF provider registry z walidacją endpointów, deterministycznym sortowaniem i rejestrowaniem wyników bez implicit network calls. Raport health rozróżnia `healthy`, `unhealthy`, `disabled` i `unknown`. +V14c: importer CSAF zachowuje bounded `remediations` oraz vendor-specific +product status w rekordzie źródłowym i `database_specific`; pełne semantics +remediation/status pozostają ograniczone do zweryfikowanego podzbioru. - [ ] Generic CSAF importer. - [ ] Provider registry. diff --git a/src/vulnerability/sources/csaf.py b/src/vulnerability/sources/csaf.py index 961c120..e4fe64d 100644 --- a/src/vulnerability/sources/csaf.py +++ b/src/vulnerability/sources/csaf.py @@ -66,7 +66,7 @@ def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[st for key in ("known_affected", "known_not_affected"): if not isinstance(status.get(key, []), list): raise ValueError("CSAF product status list is invalid") - normalized.append({"id": item["cve"], "affected_product_ids": list(status.get("known_affected", [])), "not_affected_product_ids": list(status.get("known_not_affected", [])), "products": products, "raw": item}) + normalized.append({"id": item["cve"], "affected_product_ids": list(status.get("known_affected", [])), "not_affected_product_ids": list(status.get("known_not_affected", [])), "vendor_status": dict(status.get("vendor_specific", {})) if isinstance(status.get("vendor_specific", {}), dict) else {}, "remediations": list(item.get("remediations", [])) if isinstance(item.get("remediations", []), list) else [], "products": products, "raw": item}) digest = "sha256:" + hashlib.sha256(raw).hexdigest() provenance = {"source_id": CSAF_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "schema": "csaf_security_advisory", "version": "2.0"} return {"source_id": CSAF_SOURCE_ID, "source_path": str(Path(path)), "source_digest": digest, "advisory_count": len(normalized), "product_count": len(products), "advisories": normalized, "provenance": provenance} @@ -79,7 +79,7 @@ def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, s if product_id not in advisory["products"]: raise ValueError(f"CSAF references unknown product {product_id}") ecosystem, name, version = advisory["products"][product_id] - records.append({"id": advisory["id"], "summary": f"CSAF advisory {advisory['id']}", "affected": [{"package": {"ecosystem": ecosystem, "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}], "database_specific": {"csaf_product_id": product_id, "csaf_product_status": "known_affected"}, "_source_record": advisory["raw"]}) + records.append({"id": advisory["id"], "summary": f"CSAF advisory {advisory['id']}", "affected": [{"package": {"ecosystem": ecosystem, "name": name}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}], "database_specific": {"csaf_product_id": product_id, "csaf_product_status": "known_affected", "csaf_vendor_status": advisory["vendor_status"].get(product_id), "csaf_remediations": advisory["remediations"]}, "_source_record": advisory["raw"]}) stats = database.import_osv_records(records, source=CSAF_SOURCE_ID) manifest = database.build_snapshot_manifest() manifest.update({"source_id": CSAF_SOURCE_ID, "source_digest": document["source_digest"], "source_path": document["source_path"], "signature_status": "unsigned", "ingestion_schema": "coderisktools.vulnerability.csaf-staging.v1"}) diff --git a/tests/test_v14_csaf_remediations.py b/tests/test_v14_csaf_remediations.py new file mode 100644 index 0000000..e25c806 --- /dev/null +++ b/tests/test_v14_csaf_remediations.py @@ -0,0 +1,25 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.sources.csaf import ingest_file, ingest_file_to_database + + +class TestV14CsafRemediations(unittest.TestCase): + def test_remediation_and_vendor_status_are_preserved(self): + payload = '{"csaf_version":"2.0","document":{"category":"csaf_security_advisory","title":"Vendor advisory","tracking":{"id":"CSAF-2026-2"}},"product_tree":{"branches":[{"product":{"product_id":"pkg-1","product_identification_helper":{"purl":"pkg:pypi/example@1.0.0"}}}]},"vulnerabilities":[{"cve":"CVE-2026-12","product_status":{"known_affected":["pkg-1"],"vendor_specific":{"pkg-1":{"status":"under_investigation"}}},"remediations":[{"category":"vendor_fix","details":"Upgrade to 1.0.1","product_ids":["pkg-1"]}]}]}' + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + feed = root / "csaf.json" + feed.write_text(payload, encoding="utf-8") + parsed = ingest_file(str(feed)) + advisory = parsed["advisories"][0] + self.assertEqual(advisory["remediations"][0]["category"], "vendor_fix") + self.assertEqual(advisory["vendor_status"]["pkg-1"]["status"], "under_investigation") + database = VulnerabilityDatabase(str(root / "db.sqlite")) + try: + report = ingest_file_to_database(str(feed), database, "csaf-2") + self.assertEqual(report["state"], "staged") + finally: + database.close() From 9128a79e3d305644b87c655e3852f5dd701e09c6 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:33:01 +0000 Subject: [PATCH 30/65] feat: add CSAF quality gate --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 + ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 + src/vulnerability/sources/csaf_quality.py | 57 +++++++++++++++++++ tests/test_v14_csaf_quality.py | 23 ++++++++ 4 files changed, 86 insertions(+) create mode 100644 src/vulnerability/sources/csaf_quality.py create mode 100644 tests/test_v14_csaf_quality.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index b1096bd..5cea932 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -197,3 +197,6 @@ Registry operations are local and do not perform implicit network calls. V14c preserves bounded CSAF remediations and vendor-specific product status in source records and `database_specific`. Full remediation semantics remain outside the verified subset. + +V14d adds `csaf_quality_gate()` for bounded validation of identifiers, product +references, provenance, remediation shape, and provider extensions. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index f982b31..fc045b5 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2774,6 +2774,9 @@ calls. Raport health rozróżnia `healthy`, `unhealthy`, `disabled` i `unknown`. V14c: importer CSAF zachowuje bounded `remediations` oraz vendor-specific product status w rekordzie źródłowym i `database_specific`; pełne semantics remediation/status pozostają ograniczone do zweryfikowanego podzbioru. +V14d: dodano additive `csaf_quality_gate()` walidujący identyfikatory, +referencje produktów, provenance, remediation shape i provider extensions oraz +raportujący metryki jakości. - [ ] Generic CSAF importer. - [ ] Provider registry. diff --git a/src/vulnerability/sources/csaf_quality.py b/src/vulnerability/sources/csaf_quality.py new file mode 100644 index 0000000..0e2df16 --- /dev/null +++ b/src/vulnerability/sources/csaf_quality.py @@ -0,0 +1,57 @@ +"""Quality gate for the bounded CSAF staging subset.""" + +from __future__ import annotations + +import re +from typing import Any + +_CVE_RE = re.compile(r"^(CVE|GHSA)-[A-Za-z0-9._-]+$") + + +def csaf_quality_gate(document: dict[str, Any]) -> dict[str, Any]: + errors: list[str] = [] + if document.get("source_id") != "csaf-security": + errors.append("invalid source_id") + digest = document.get("source_digest") + if not isinstance(digest, str) or not digest.startswith("sha256:"): + errors.append("missing source digest") + provenance = document.get("provenance") + if not isinstance(provenance, dict) or provenance.get("schema") != "csaf_security_advisory" or provenance.get("version") != "2.0": + errors.append("incomplete CSAF provenance") + advisories = document.get("advisories") + if not isinstance(advisories, list): + errors.append("advisories must be a list") + advisories = [] + product_extension_count = 0 + remediation_count = 0 + for index, advisory in enumerate(advisories): + if not isinstance(advisory, dict) or not isinstance(advisory.get("id"), str) or not _CVE_RE.fullmatch(advisory.get("id", "")): + errors.append(f"advisory[{index}] has invalid identifier") + continue + products = advisory.get("products", {}) + if not isinstance(products, dict): + errors.append(f"advisory[{index}] products must be an object") + products = {} + for product_id in advisory.get("affected_product_ids", []) + advisory.get("not_affected_product_ids", []): + if product_id not in products: + errors.append(f"advisory[{index}] references unknown product {product_id}") + statuses = advisory.get("vendor_status", {}) + if isinstance(statuses, dict): + for status in statuses.values(): + if isinstance(status, dict) and status.get("provider_extension") is not None: + product_extension_count += 1 + else: + errors.append(f"advisory[{index}] vendor_status must be an object") + remediations = advisory.get("remediations", []) + if not isinstance(remediations, list): + errors.append(f"advisory[{index}] remediations must be a list") + continue + for remediation in remediations: + if not isinstance(remediation, dict) or not isinstance(remediation.get("category"), str) or not isinstance(remediation.get("details"), str): + errors.append(f"advisory[{index}] remediation is malformed") + continue + remediation_count += 1 + for product_id in remediation.get("product_ids", []): + if product_id not in products: + errors.append(f"advisory[{index}] remediation references unknown product {product_id}") + return {"passed": not errors, "errors": errors, "advisory_count": len(advisories), "provider_extension_count": product_extension_count, "remediation_count": remediation_count} diff --git a/tests/test_v14_csaf_quality.py b/tests/test_v14_csaf_quality.py new file mode 100644 index 0000000..7e83fa3 --- /dev/null +++ b/tests/test_v14_csaf_quality.py @@ -0,0 +1,23 @@ +import unittest + +from src.vulnerability.sources.csaf_quality import csaf_quality_gate + + +class TestV14CsafQuality(unittest.TestCase): + def test_quality_gate_accepts_valid_and_reports_provider_extensions(self): + report = csaf_quality_gate({ + "source_id": "csaf-security", + "source_digest": "sha256:abc", + "advisories": [{ + "id": "CVE-2026-1", + "affected_product_ids": ["p1"], + "not_affected_product_ids": [], + "products": {"p1": ("PyPI", "example", "1.0.0")}, + "vendor_status": {"p1": {"status": "under_investigation", "provider_extension": {"foo": "bar"}}}, + "remediations": [{"category": "vendor_fix", "details": "upgrade", "product_ids": ["p1"]}], + }], + "provenance": {"schema": "csaf_security_advisory", "version": "2.0"}, + }) + self.assertTrue(report["passed"]) + self.assertEqual(report["provider_extension_count"], 1) + self.assertEqual(report["remediation_count"], 1) From aa3f1118b2f828854cd8320bcf7b2735ea113c4c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:37:07 +0000 Subject: [PATCH 31/65] feat: enforce CSAF quality gate before staging --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ src/vulnerability/sources/csaf.py | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 5cea932..b07d39b 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -200,3 +200,6 @@ outside the verified subset. V14d adds `csaf_quality_gate()` for bounded validation of identifiers, product references, provenance, remediation shape, and provider extensions. + +V14e integrates this gate into CSAF staging before import or snapshot write. +Invalid documents return `rejected` and are not activated. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index fc045b5..089b258 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2777,6 +2777,8 @@ remediation/status pozostają ograniczone do zweryfikowanego podzbioru. V14d: dodano additive `csaf_quality_gate()` walidujący identyfikatory, referencje produktów, provenance, remediation shape i provider extensions oraz raportujący metryki jakości. +V14e: CSAF staging wywołuje quality gate przed importem i zapisem snapshotu; +niepoprawne dokumenty zwracają jawny `rejected` bez aktywacji. - [ ] Generic CSAF importer. - [ ] Provider registry. diff --git a/src/vulnerability/sources/csaf.py b/src/vulnerability/sources/csaf.py index e4fe64d..ce74fb3 100644 --- a/src/vulnerability/sources/csaf.py +++ b/src/vulnerability/sources/csaf.py @@ -10,6 +10,7 @@ from ...safeio import read_regular_bounded from ..database import VulnerabilityDatabase +from .csaf_quality import csaf_quality_gate CSAF_SOURCE_ID = "csaf-security" MAX_FEED_BYTES = 50 * 1024 * 1024 @@ -73,6 +74,9 @@ def ingest_file(path: str | Path, *, max_bytes: int = MAX_FEED_BYTES) -> dict[st def ingest_file_to_database(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, activate: bool = False, max_bytes: int = MAX_FEED_BYTES) -> dict[str, Any]: document = ingest_file(path, max_bytes=max_bytes) + quality = csaf_quality_gate(document) + if not quality["passed"]: + return {"source_id": CSAF_SOURCE_ID, "snapshot_id": snapshot_id, "state": "rejected", "activated": False, "records_seen": 0, "advisories_imported": 0, "affected_packages_imported": 0, "errors": list(quality["errors"])} records = [] for advisory in document["advisories"]: for product_id in advisory["affected_product_ids"]: From 6104c091675a62b9d58cead1da42c42332134453 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:41:59 +0000 Subject: [PATCH 32/65] feat: add offline vulnerability benchmark core --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 8 ++- src/vulnerability/benchmark.py | 54 +++++++++++++++++++ tests/test_v15_benchmark.py | 20 +++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/vulnerability/benchmark.py create mode 100644 tests/test_v15_benchmark.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index b07d39b..5f96680 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -203,3 +203,6 @@ references, provenance, remediation shape, and provider extensions. V14e integrates this gate into CSAF staging before import or snapshot write. Invalid documents return `rejected` and are not activated. + +V15a adds offline benchmark foundations with deterministic precision, recall, +F1 and latency percentile metrics. Public fixture corpus remains open. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 089b258..e306bef 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2789,9 +2789,13 @@ niepoprawne dokumenty zwracają jawny `rejected` bez aktywacji. - [ ] Licencje. - [ ] Quality gates. -## Stage V15 — pełny benchmark +## Stage V15 — benchmark and acceptance gates -- [ ] Public fixtures. +V15a: dodano offline benchmark core z fixture cases, confusion-matrix +metrics (`precision`, `recall`, `F1`) oraz latency summary (`min`, `mean`, +`p50`, `p95`, `max`). Benchmark nie wykonuje kodu skanowanego repozytorium. + +- [ ] Public benchmark fixtures. - [ ] Precision. - [ ] Recall. - [ ] Performance. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py new file mode 100644 index 0000000..dacefad --- /dev/null +++ b/src/vulnerability/benchmark.py @@ -0,0 +1,54 @@ +"""Offline vulnerability benchmark metrics.""" + +from __future__ import annotations + +from dataclasses import dataclass +from math import isfinite +from typing import Iterable + + +@dataclass(frozen=True) +class BenchmarkCase: + case_id: str + expected: bool + observed: bool + elapsed_ms: float + + +def evaluate_cases(cases: Iterable[BenchmarkCase]) -> dict[str, int]: + metrics = {"true_positive": 0, "true_negative": 0, "false_positive": 0, "false_negative": 0} + for case in cases: + if not isinstance(case.case_id, str) or not case.case_id: + raise ValueError("benchmark case_id is required") + if not isinstance(case.elapsed_ms, (int, float)) or not isfinite(float(case.elapsed_ms)) or case.elapsed_ms < 0: + raise ValueError("benchmark elapsed_ms must be finite and non-negative") + if case.expected and case.observed: + metrics["true_positive"] += 1 + elif not case.expected and not case.observed: + metrics["true_negative"] += 1 + elif case.observed: + metrics["false_positive"] += 1 + else: + metrics["false_negative"] += 1 + return metrics + + +def _percentile(values: list[float], percentile: float) -> float: + if not values: + return 0.0 + index = max(0, min(len(values) - 1, int((percentile / 100.0) * len(values) + 0.999999) - 1)) + return values[index] + + +def summarize_metrics(metrics: dict[str, int], cases: Iterable[BenchmarkCase] | None = None) -> dict[str, object]: + tp = metrics.get("true_positive", 0) + fp = metrics.get("false_positive", 0) + fn = metrics.get("false_negative", 0) + precision = tp / (tp + fp) if tp + fp else 0.0 + recall = tp / (tp + fn) if tp + fn else 0.0 + f1 = 2 * precision * recall / (precision + recall) if precision + recall else 0.0 + result: dict[str, object] = {"precision": precision, "recall": recall, "f1": f1} + if cases is not None: + latencies = sorted(float(case.elapsed_ms) for case in cases) + result["latency_ms"] = {"count": len(latencies), "min": latencies[0] if latencies else 0.0, "mean": sum(latencies) / len(latencies) if latencies else 0.0, "p50": _percentile(latencies, 50), "p95": _percentile(latencies, 95), "max": latencies[-1] if latencies else 0.0} + return result diff --git a/tests/test_v15_benchmark.py b/tests/test_v15_benchmark.py new file mode 100644 index 0000000..8c9bda7 --- /dev/null +++ b/tests/test_v15_benchmark.py @@ -0,0 +1,20 @@ +import unittest + +from src.vulnerability.benchmark import BenchmarkCase, evaluate_cases, summarize_metrics + + +class TestV15Benchmark(unittest.TestCase): + def test_precision_recall_and_latency_summary(self): + cases = [ + BenchmarkCase("affected", expected=True, observed=True, elapsed_ms=2.0), + BenchmarkCase("clean", expected=False, observed=False, elapsed_ms=1.0), + BenchmarkCase("miss", expected=True, observed=False, elapsed_ms=3.0), + ] + metrics = evaluate_cases(cases) + summary = summarize_metrics(metrics, cases) + self.assertEqual(metrics["true_positive"], 1) + self.assertEqual(metrics["false_negative"], 1) + self.assertEqual(summary["precision"], 1.0) + self.assertEqual(summary["recall"], 0.5) + self.assertEqual(summary["f1"], 2 / 3) + self.assertEqual(summary["latency_ms"]["p95"], 3.0) From a28ffcb32f3953e8b8d3a72cb3ea4f40f6c0c63a Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:46:15 +0000 Subject: [PATCH 33/65] feat: add versioned public benchmark fixture --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ src/vulnerability/benchmark.py | 29 +++++++++++++++++-- tests/fixtures/v15_public_benchmark.json | 16 ++++++++++ tests/test_v15_public_fixtures.py | 15 ++++++++++ 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/v15_public_benchmark.json create mode 100644 tests/test_v15_public_fixtures.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 5f96680..935f01b 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -206,3 +206,6 @@ Invalid documents return `rejected` and are not activated. V15a adds offline benchmark foundations with deterministic precision, recall, F1 and latency percentile metrics. Public fixture corpus remains open. + +V15b adds a versioned public benchmark fixture with golden results and a +bounded schema-validating loader. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index e306bef..c25117b 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2794,6 +2794,8 @@ niepoprawne dokumenty zwracają jawny `rejected` bez aktywacji. V15a: dodano offline benchmark core z fixture cases, confusion-matrix metrics (`precision`, `recall`, `F1`) oraz latency summary (`min`, `mean`, `p50`, `p95`, `max`). Benchmark nie wykonuje kodu skanowanego repozytorium. +V15b: dodano wersjonowany public fixture `tests/fixtures/v15_public_benchmark.json` +z golden results oraz bounded loader z walidacją schema, limits i metryk. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index dacefad..08bf302 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -1,10 +1,14 @@ -"""Offline vulnerability benchmark metrics.""" +"""Offline vulnerability benchmark metrics and fixtures.""" from __future__ import annotations +import json from dataclasses import dataclass from math import isfinite -from typing import Iterable +from pathlib import Path +from typing import Any, Iterable + +from ..safeio import read_regular_bounded @dataclass(frozen=True) @@ -15,6 +19,27 @@ class BenchmarkCase: elapsed_ms: float +def load_benchmark_fixture(path: str | Path, *, max_bytes: int = 5 * 1024 * 1024) -> dict[str, Any]: + raw = read_regular_bounded(path, max_bytes, "benchmark fixture") + try: + fixture = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("benchmark fixture must be UTF-8 JSON") from exc + if not isinstance(fixture, dict) or fixture.get("schema") != "coderisktools.vulnerability.benchmark" or fixture.get("version") != 1: + raise ValueError("unsupported benchmark fixture schema") + cases = fixture.get("cases") + golden = fixture.get("golden") + if not isinstance(cases, list) or not cases or len(cases) > 100_000 or not isinstance(golden, dict): + raise ValueError("benchmark fixture cases/golden are invalid") + for item in cases: + if not isinstance(item, dict) or not isinstance(item.get("case_id"), str) or not isinstance(item.get("expected"), bool) or not isinstance(item.get("observed"), bool) or not isinstance(item.get("elapsed_ms"), (int, float)) or not isfinite(float(item["elapsed_ms"])) or item["elapsed_ms"] < 0: + raise ValueError("benchmark fixture case is invalid") + for key in ("precision", "recall", "f1"): + if not isinstance(golden.get(key), (int, float)) or not isfinite(float(golden[key])) or not 0 <= float(golden[key]) <= 1: + raise ValueError("benchmark golden metric is invalid") + return fixture + + def evaluate_cases(cases: Iterable[BenchmarkCase]) -> dict[str, int]: metrics = {"true_positive": 0, "true_negative": 0, "false_positive": 0, "false_negative": 0} for case in cases: diff --git a/tests/fixtures/v15_public_benchmark.json b/tests/fixtures/v15_public_benchmark.json new file mode 100644 index 0000000..4e4f086 --- /dev/null +++ b/tests/fixtures/v15_public_benchmark.json @@ -0,0 +1,16 @@ +{ + "schema": "coderisktools.vulnerability.benchmark", + "version": 1, + "name": "public-minimal-v15", + "cases": [ + {"case_id": "affected", "expected": true, "observed": true, "elapsed_ms": 2.0}, + {"case_id": "clean", "expected": false, "observed": false, "elapsed_ms": 1.0}, + {"case_id": "miss", "expected": true, "observed": false, "elapsed_ms": 3.0} + ], + "golden": { + "precision": 1.0, + "recall": 0.5, + "f1": 0.6666666666666666, + "latency_ms": {"p50": 2.0, "p95": 3.0} + } +} diff --git a/tests/test_v15_public_fixtures.py b/tests/test_v15_public_fixtures.py new file mode 100644 index 0000000..5796dc6 --- /dev/null +++ b/tests/test_v15_public_fixtures.py @@ -0,0 +1,15 @@ +import json +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import load_benchmark_fixture + + +class TestV15PublicFixtures(unittest.TestCase): + def test_versioned_public_fixture_has_golden_results(self): + fixture = load_benchmark_fixture(Path("tests/fixtures/v15_public_benchmark.json")) + self.assertEqual(fixture["schema"], "coderisktools.vulnerability.benchmark") + self.assertEqual(fixture["version"], 1) + self.assertEqual(len(fixture["cases"]), 3) + self.assertEqual(fixture["golden"]["precision"], 1.0) + self.assertEqual(fixture["golden"]["recall"], 0.5) From cfaf1317558235d85880d71281f87934d5a3ed2d Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:50:02 +0000 Subject: [PATCH 34/65] feat: add benchmark acceptance runner --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ src/vulnerability/benchmark.py | 24 ++++++++++++++++++- tests/test_v15_acceptance.py | 21 ++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/test_v15_acceptance.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 935f01b..9d6ad4b 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -209,3 +209,6 @@ F1 and latency percentile metrics. Public fixture corpus remains open. V15b adds a versioned public benchmark fixture with golden results and a bounded schema-validating loader. + +V15c adds an offline benchmark runner with precision, recall, F1, and p95 +latency acceptance thresholds. Failed gates are reported without raising. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index c25117b..df744bb 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2796,6 +2796,8 @@ metrics (`precision`, `recall`, `F1`) oraz latency summary (`min`, `mean`, `p50`, `p95`, `max`). Benchmark nie wykonuje kodu skanowanego repozytorium. V15b: dodano wersjonowany public fixture `tests/fixtures/v15_public_benchmark.json` z golden results oraz bounded loader z walidacją schema, limits i metryk. +V15c: dodano offline `run_fixture_benchmark()` z progami precision/recall/F1 +i max p95 latency; niespełnione gate’y są raportowane bez wyjątku. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 08bf302..6fcb87d 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -1,4 +1,4 @@ -"""Offline vulnerability benchmark metrics and fixtures.""" +"""Offline vulnerability benchmark metrics, fixtures, and acceptance gates.""" from __future__ import annotations @@ -77,3 +77,25 @@ def summarize_metrics(metrics: dict[str, int], cases: Iterable[BenchmarkCase] | latencies = sorted(float(case.elapsed_ms) for case in cases) result["latency_ms"] = {"count": len(latencies), "min": latencies[0] if latencies else 0.0, "mean": sum(latencies) / len(latencies) if latencies else 0.0, "p50": _percentile(latencies, 50), "p95": _percentile(latencies, 95), "max": latencies[-1] if latencies else 0.0} return result + + +def run_fixture_benchmark(path: str | Path, *, min_precision: float = 0.0, min_recall: float = 0.0, min_f1: float = 0.0, max_p95_ms: float | None = None) -> dict[str, Any]: + fixture = load_benchmark_fixture(path) + cases = [BenchmarkCase(item["case_id"], item["expected"], item["observed"], float(item["elapsed_ms"])) for item in fixture["cases"]] + metrics = evaluate_cases(cases) + summary = summarize_metrics(metrics, cases) + if not all(0 <= threshold <= 1 for threshold in (min_precision, min_recall, min_f1)): + raise ValueError("quality thresholds must be between 0 and 1") + if max_p95_ms is not None and max_p95_ms < 0: + raise ValueError("max_p95_ms must be non-negative") + failed: list[str] = [] + if summary["precision"] < min_precision: + failed.append("precision") + if summary["recall"] < min_recall: + failed.append("recall") + if summary["f1"] < min_f1: + failed.append("f1") + latency = summary.get("latency_ms", {}) + if max_p95_ms is not None and latency.get("p95", 0.0) > max_p95_ms: + failed.append("latency_p95") + return {"passed": not failed, "fixture": fixture.get("name"), "metrics": metrics, "summary": summary, "acceptance": {"thresholds": {"min_precision": min_precision, "min_recall": min_recall, "min_f1": min_f1, "max_p95_ms": max_p95_ms}, "failed": failed}} diff --git a/tests/test_v15_acceptance.py b/tests/test_v15_acceptance.py new file mode 100644 index 0000000..7fb42e4 --- /dev/null +++ b/tests/test_v15_acceptance.py @@ -0,0 +1,21 @@ +import unittest + +from src.vulnerability.benchmark import run_fixture_benchmark + + +class TestV15Acceptance(unittest.TestCase): + def test_runner_passes_golden_acceptance_gates(self): + report = run_fixture_benchmark( + "tests/fixtures/v15_public_benchmark.json", + min_precision=1.0, + min_recall=0.5, + min_f1=0.66, + max_p95_ms=3.0, + ) + self.assertTrue(report["passed"]) + self.assertEqual(report["acceptance"]["failed"], []) + + def test_runner_reports_failed_gate_without_raising(self): + report = run_fixture_benchmark("tests/fixtures/v15_public_benchmark.json", min_recall=0.9) + self.assertFalse(report["passed"]) + self.assertIn("recall", report["acceptance"]["failed"]) From 07e953db91dd65443565e4d3b70d40f5041e0d71 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:53:50 +0000 Subject: [PATCH 35/65] feat: benchmark the vulnerability database API --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 +++ src/vulnerability/benchmark.py | 13 ++++++++++ tests/test_v15_database_benchmark.py | 24 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 tests/test_v15_database_benchmark.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 9d6ad4b..cd8f284 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -212,3 +212,6 @@ bounded schema-validating loader. V15c adds an offline benchmark runner with precision, recall, F1, and p95 latency acceptance thresholds. Failed gates are reported without raising. + +V15d adds `run_database_benchmark()` against the real +`VulnerabilityDatabase.evaluate_component()` API using local cases only. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index df744bb..db1c858 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2798,6 +2798,9 @@ V15b: dodano wersjonowany public fixture `tests/fixtures/v15_public_benchmark.js z golden results oraz bounded loader z walidacją schema, limits i metryk. V15c: dodano offline `run_fixture_benchmark()` z progami precision/recall/F1 i max p95 latency; niespełnione gate’y są raportowane bez wyjątku. +V15d: dodano `run_database_benchmark()` wywołujący rzeczywiste +`VulnerabilityDatabase.evaluate_component()` na lokalnych cases i raportujący +precision/recall/F1 oraz latency. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 6fcb87d..2d46fdb 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -79,6 +79,19 @@ def summarize_metrics(metrics: dict[str, int], cases: Iterable[BenchmarkCase] | return result +def run_database_benchmark(database: Any, cases: Iterable[dict[str, Any]]) -> dict[str, Any]: + from .models import Component + benchmark_cases: list[BenchmarkCase] = [] + for item in cases: + started = __import__("time").perf_counter() + result = database.evaluate_component(Component(ecosystem=item["ecosystem"], name=item["name"], version=item["version"])) + elapsed_ms = (__import__("time").perf_counter() - started) * 1000.0 + observed = result.get("status") == "affected" + benchmark_cases.append(BenchmarkCase(str(item["case_id"]), bool(item["expected"]), observed, elapsed_ms)) + metrics = evaluate_cases(benchmark_cases) + return {"metrics": metrics, "summary": summarize_metrics(metrics, benchmark_cases), "cases": len(benchmark_cases)} + + def run_fixture_benchmark(path: str | Path, *, min_precision: float = 0.0, min_recall: float = 0.0, min_f1: float = 0.0, max_p95_ms: float | None = None) -> dict[str, Any]: fixture = load_benchmark_fixture(path) cases = [BenchmarkCase(item["case_id"], item["expected"], item["observed"], float(item["elapsed_ms"])) for item in fixture["cases"]] diff --git a/tests/test_v15_database_benchmark.py b/tests/test_v15_database_benchmark.py new file mode 100644 index 0000000..2444c82 --- /dev/null +++ b/tests/test_v15_database_benchmark.py @@ -0,0 +1,24 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import run_database_benchmark +from src.vulnerability.database import VulnerabilityDatabase + + +class TestV15DatabaseBenchmark(unittest.TestCase): + def test_database_adapter_uses_real_evaluate_component(self): + with tempfile.TemporaryDirectory() as directory: + database = VulnerabilityDatabase(str(Path(directory) / "db.sqlite")) + try: + database.import_osv_records([{"id": "CVE-2026-99", "affected": [{"package": {"ecosystem": "PyPI", "name": "example"}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}]}], source="fixture") + cases = [ + {"case_id": "affected", "ecosystem": "PyPI", "name": "example", "version": "1.0.0", "expected": True}, + {"case_id": "clean", "ecosystem": "PyPI", "name": "other", "version": "1.0.0", "expected": False}, + ] + report = run_database_benchmark(database, cases) + self.assertEqual(report["metrics"]["true_positive"], 1) + self.assertEqual(report["metrics"]["true_negative"], 1) + self.assertEqual(report["summary"]["recall"], 1.0) + finally: + database.close() From 5809971082a0c782c0af3126ab5e1626908b526c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 13:58:34 +0000 Subject: [PATCH 36/65] feat: add multi-ecosystem benchmark fixture --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 +++ src/vulnerability/benchmark.py | 13 ++++++++-- tests/fixtures/v15_multiecosystem.json | 25 +++++++++++++++++++ tests/test_v15_multiecosystem.py | 24 ++++++++++++++++++ 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/v15_multiecosystem.json create mode 100644 tests/test_v15_multiecosystem.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index cd8f284..3e107d6 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -215,3 +215,6 @@ latency acceptance thresholds. Failed gates are reported without raising. V15d adds `run_database_benchmark()` against the real `VulnerabilityDatabase.evaluate_component()` API using local cases only. + +V15e adds a larger multi-ecosystem fixture covering PyPI, npm, crates.io, +Maven, and NuGet with golden precision/recall/F1 thresholds. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index db1c858..8e67f0b 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2801,6 +2801,9 @@ i max p95 latency; niespełnione gate’y są raportowane bez wyjątku. V15d: dodano `run_database_benchmark()` wywołujący rzeczywiste `VulnerabilityDatabase.evaluate_component()` na lokalnych cases i raportujący precision/recall/F1 oraz latency. +V15e: dodano większy fixture wieloekosystemowy (PyPI, npm, crates.io, Maven, +NuGet) z golden thresholds precision/recall/F1 i integracyjną walidacją przez +rzeczywistą bazę podatności. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 2d46fdb..fe578ed 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -32,11 +32,20 @@ def load_benchmark_fixture(path: str | Path, *, max_bytes: int = 5 * 1024 * 1024 if not isinstance(cases, list) or not cases or len(cases) > 100_000 or not isinstance(golden, dict): raise ValueError("benchmark fixture cases/golden are invalid") for item in cases: - if not isinstance(item, dict) or not isinstance(item.get("case_id"), str) or not isinstance(item.get("expected"), bool) or not isinstance(item.get("observed"), bool) or not isinstance(item.get("elapsed_ms"), (int, float)) or not isfinite(float(item["elapsed_ms"])) or item["elapsed_ms"] < 0: + if not isinstance(item, dict) or not isinstance(item.get("case_id"), str) or not isinstance(item.get("expected"), bool): raise ValueError("benchmark fixture case is invalid") + if "observed" in item and not isinstance(item["observed"], bool): + raise ValueError("benchmark fixture observed value is invalid") + if "elapsed_ms" in item and (not isinstance(item["elapsed_ms"], (int, float)) or not isfinite(float(item["elapsed_ms"])) or item["elapsed_ms"] < 0): + raise ValueError("benchmark fixture elapsed time is invalid") for key in ("precision", "recall", "f1"): - if not isinstance(golden.get(key), (int, float)) or not isfinite(float(golden[key])) or not 0 <= float(golden[key]) <= 1: + if key in golden and (not isinstance(golden.get(key), (int, float)) or not isfinite(float(golden[key])) or not 0 <= float(golden[key]) <= 1): raise ValueError("benchmark golden metric is invalid") + for key in ("min_precision", "min_recall", "min_f1"): + if key in golden and (not isinstance(golden.get(key), (int, float)) or not isfinite(float(golden[key])) or not 0 <= float(golden[key]) <= 1): + raise ValueError("benchmark golden threshold is invalid") + if not any(key in golden for key in ("precision", "recall", "f1", "min_precision", "min_recall", "min_f1")): + raise ValueError("benchmark golden metrics are missing") return fixture diff --git a/tests/fixtures/v15_multiecosystem.json b/tests/fixtures/v15_multiecosystem.json new file mode 100644 index 0000000..82bcc95 --- /dev/null +++ b/tests/fixtures/v15_multiecosystem.json @@ -0,0 +1,25 @@ +{ + "schema": "coderisktools.vulnerability.benchmark", + "version": 1, + "name": "public-multiecosystem-v15", + "records": [ + {"id":"CVE-2026-PY","ecosystem":"PyPI","name":"alpha","fixed":"2.0.0"}, + {"id":"CVE-2026-NPM","ecosystem":"npm","name":"bravo","fixed":"2.0.0"}, + {"id":"CVE-2026-CR","ecosystem":"crates.io","name":"charlie","fixed":"2.0.0"}, + {"id":"CVE-2026-MVN","ecosystem":"Maven","name":"delta","fixed":"2.0.0"}, + {"id":"CVE-2026-NUG","ecosystem":"NuGet","name":"echo","fixed":"2.0.0"} + ], + "cases": [ + {"case_id":"pypi-affected","ecosystem":"PyPI","name":"alpha","version":"1.0.0","expected":true}, + {"case_id":"pypi-clean","ecosystem":"PyPI","name":"alpha","version":"2.0.0","expected":false}, + {"case_id":"npm-affected","ecosystem":"npm","name":"bravo","version":"1.0.0","expected":true}, + {"case_id":"npm-clean","ecosystem":"npm","name":"bravo","version":"2.0.0","expected":false}, + {"case_id":"cargo-affected","ecosystem":"crates.io","name":"charlie","version":"1.0.0","expected":true}, + {"case_id":"cargo-clean","ecosystem":"crates.io","name":"charlie","version":"2.0.0","expected":false}, + {"case_id":"maven-affected","ecosystem":"Maven","name":"delta","version":"1.0.0","expected":true}, + {"case_id":"maven-clean","ecosystem":"Maven","name":"delta","version":"2.0.0","expected":false}, + {"case_id":"nuget-affected","ecosystem":"NuGet","name":"echo","version":"1.0.0","expected":true}, + {"case_id":"nuget-clean","ecosystem":"NuGet","name":"echo","version":"2.0.0","expected":false} + ], + "golden": {"min_precision": 1.0, "min_recall": 1.0, "min_f1": 1.0} +} diff --git a/tests/test_v15_multiecosystem.py b/tests/test_v15_multiecosystem.py new file mode 100644 index 0000000..5083954 --- /dev/null +++ b/tests/test_v15_multiecosystem.py @@ -0,0 +1,24 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import load_benchmark_fixture, run_database_benchmark +from src.vulnerability.database import VulnerabilityDatabase + + +class TestV15Multiecosystem(unittest.TestCase): + def test_multiecosystem_fixture_meets_golden_thresholds(self): + fixture = load_benchmark_fixture(Path("tests/fixtures/v15_multiecosystem.json")) + with tempfile.TemporaryDirectory() as directory: + database = VulnerabilityDatabase(str(Path(directory) / "db.sqlite")) + try: + records = [] + for item in fixture["records"]: + records.append({"id": item["id"], "affected": [{"package": {"ecosystem": item["ecosystem"], "name": item["name"]}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}, {"fixed": item["fixed"]}]}]}]}) + database.import_osv_records(records, source="v15-fixture") + report = run_database_benchmark(database, fixture["cases"]) + self.assertGreaterEqual(report["summary"]["precision"], fixture["golden"]["min_precision"]) + self.assertGreaterEqual(report["summary"]["recall"], fixture["golden"]["min_recall"]) + self.assertGreaterEqual(report["summary"]["f1"], fixture["golden"]["min_f1"]) + finally: + database.close() From 12381d78539ffd9127f72777feb63e4294b4bcc3 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:02:29 +0000 Subject: [PATCH 37/65] feat: add repeated benchmark performance gate --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ src/vulnerability/benchmark.py | 17 ++++++++++++++ tests/test_v15_performance.py | 22 +++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 tests/test_v15_performance.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 3e107d6..6fcd456 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -218,3 +218,6 @@ V15d adds `run_database_benchmark()` against the real V15e adds a larger multi-ecosystem fixture covering PyPI, npm, crates.io, Maven, and NuGet with golden precision/recall/F1 thresholds. + +V15f adds repeated performance benchmarking with bounded repetitions and p95 +latency acceptance. Platform-specific absolute baselines remain open. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 8e67f0b..1ec852a 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2804,6 +2804,8 @@ precision/recall/F1 oraz latency. V15e: dodano większy fixture wieloekosystemowy (PyPI, npm, crates.io, Maven, NuGet) z golden thresholds precision/recall/F1 i integracyjną walidacją przez rzeczywistą bazę podatności. +V15f: dodano repeated performance runner z kontrolowaną liczbą powtórzeń, +agregacją latency (`min`, `mean`, `p95`, `max`) i limitem `max_p95_ms`. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index fe578ed..80e2b8b 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -101,6 +101,23 @@ def run_database_benchmark(database: Any, cases: Iterable[dict[str, Any]]) -> di return {"metrics": metrics, "summary": summarize_metrics(metrics, benchmark_cases), "cases": len(benchmark_cases)} +def run_database_benchmark_repeated(database: Any, cases: Iterable[dict[str, Any]], *, repetitions: int = 3, max_p95_ms: float | None = None) -> dict[str, Any]: + if not isinstance(repetitions, int) or repetitions < 1 or repetitions > 1000: + raise ValueError("repetitions must be between 1 and 1000") + if max_p95_ms is not None and max_p95_ms < 0: + raise ValueError("max_p95_ms must be non-negative") + case_list = list(cases) + runs = [run_database_benchmark(database, case_list) for _ in range(repetitions)] + latencies = [] + for run in runs: + latency = run["summary"].get("latency_ms", {}) + if latency.get("count", 0): + latencies.append(float(latency["mean"])) + p95 = _percentile(sorted(latencies), 95) + failed = ["latency_p95"] if max_p95_ms is not None and p95 > max_p95_ms else [] + return {"passed": not failed, "repetitions": repetitions, "runs": runs, "latency_ms": {"count": len(latencies), "min": min(latencies) if latencies else 0.0, "mean": sum(latencies) / len(latencies) if latencies else 0.0, "p95": p95, "max": max(latencies) if latencies else 0.0}, "acceptance": {"max_p95_ms": max_p95_ms, "failed": failed}} + + def run_fixture_benchmark(path: str | Path, *, min_precision: float = 0.0, min_recall: float = 0.0, min_f1: float = 0.0, max_p95_ms: float | None = None) -> dict[str, Any]: fixture = load_benchmark_fixture(path) cases = [BenchmarkCase(item["case_id"], item["expected"], item["observed"], float(item["elapsed_ms"])) for item in fixture["cases"]] diff --git a/tests/test_v15_performance.py b/tests/test_v15_performance.py new file mode 100644 index 0000000..7d65a59 --- /dev/null +++ b/tests/test_v15_performance.py @@ -0,0 +1,22 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import run_database_benchmark_repeated +from src.vulnerability.database import VulnerabilityDatabase + + +class TestV15Performance(unittest.TestCase): + def test_repeated_database_benchmark_reports_stability(self): + with tempfile.TemporaryDirectory() as directory: + database = VulnerabilityDatabase(str(Path(directory) / "db.sqlite")) + try: + database.import_osv_records([{"id": "CVE-2026-100", "affected": [{"package": {"ecosystem": "PyPI", "name": "example"}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}]}], source="fixture") + cases = [{"case_id": "affected", "ecosystem": "PyPI", "name": "example", "version": "1.0.0", "expected": True}] + report = run_database_benchmark_repeated(database, cases, repetitions=3, max_p95_ms=1000.0) + self.assertTrue(report["passed"]) + self.assertEqual(report["repetitions"], 3) + self.assertEqual(len(report["runs"]), 3) + self.assertIn("p95", report["latency_ms"]) + finally: + database.close() From 8b50cb0b4eac361022097e08383e194c97b8ec5b Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:06:46 +0000 Subject: [PATCH 38/65] feat: add final benchmark report --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 ++ src/vulnerability/benchmark.py | 23 +++++++++++++++++++ tests/test_v15_final_report.py | 21 +++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 tests/test_v15_final_report.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 6fcd456..b69d002 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -221,3 +221,6 @@ Maven, and NuGet with golden precision/recall/F1 thresholds. V15f adds repeated performance benchmarking with bounded repetitions and p95 latency acceptance. Platform-specific absolute baselines remain open. + +V15g adds a final benchmark report combining ecosystem status, confusion +matrix quality metrics, and aggregated performance. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 1ec852a..313ae7d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2806,6 +2806,8 @@ NuGet) z golden thresholds precision/recall/F1 i integracyjną walidacją przez rzeczywistą bazę podatności. V15f: dodano repeated performance runner z kontrolowaną liczbą powtórzeń, agregacją latency (`min`, `mean`, `p95`, `max`) i limitem `max_p95_ms`. +V15g: dodano `build_final_benchmark_report()` łączący statusy ekosystemów, +confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. - [ ] Public benchmark fixtures. - [ ] Precision. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 80e2b8b..d43e0d1 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -118,6 +118,29 @@ def run_database_benchmark_repeated(database: Any, cases: Iterable[dict[str, Any return {"passed": not failed, "repetitions": repetitions, "runs": runs, "latency_ms": {"count": len(latencies), "min": min(latencies) if latencies else 0.0, "mean": sum(latencies) / len(latencies) if latencies else 0.0, "p95": p95, "max": max(latencies) if latencies else 0.0}, "acceptance": {"max_p95_ms": max_p95_ms, "failed": failed}} +def build_final_benchmark_report(database: Any, suites: dict[str, Iterable[dict[str, Any]]], *, repetitions: int = 3, max_p95_ms: float | None = None) -> dict[str, Any]: + if not isinstance(suites, dict) or not suites: + raise ValueError("benchmark suites are required") + suite_reports = {} + totals = {"true_positive": 0, "true_negative": 0, "false_positive": 0, "false_negative": 0} + performance = [] + failed = [] + for ecosystem in sorted(suites): + report = run_database_benchmark_repeated(database, list(suites[ecosystem]), repetitions=repetitions, max_p95_ms=max_p95_ms) + suite_reports[ecosystem] = report + for key in totals: + totals[key] += report["runs"][0]["metrics"].get(key, 0) + performance.extend(run["summary"]["latency_ms"]["mean"] for run in report["runs"] if run["summary"]["latency_ms"]["count"]) + if not report["passed"]: + failed.append(ecosystem) + tp, fp, fn = totals["true_positive"], totals["false_positive"], totals["false_negative"] + precision = tp / (tp + fp) if tp + fp else 0.0 + recall = tp / (tp + fn) if tp + fn else 0.0 + f1 = 2 * precision * recall / (precision + recall) if precision + recall else 0.0 + latency = sorted(performance) + return {"passed": not failed, "ecosystems": sorted(suites), "suites": suite_reports, "metrics": totals, "summary": {"precision": precision, "recall": recall, "f1": f1}, "performance": {"runs": len(latency), "min": min(latency) if latency else 0.0, "mean": sum(latency) / len(latency) if latency else 0.0, "p95": _percentile(latency, 95), "max": max(latency) if latency else 0.0}, "failed_ecosystems": failed} + + def run_fixture_benchmark(path: str | Path, *, min_precision: float = 0.0, min_recall: float = 0.0, min_f1: float = 0.0, max_p95_ms: float | None = None) -> dict[str, Any]: fixture = load_benchmark_fixture(path) cases = [BenchmarkCase(item["case_id"], item["expected"], item["observed"], float(item["elapsed_ms"])) for item in fixture["cases"]] diff --git a/tests/test_v15_final_report.py b/tests/test_v15_final_report.py new file mode 100644 index 0000000..19cea79 --- /dev/null +++ b/tests/test_v15_final_report.py @@ -0,0 +1,21 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import build_final_benchmark_report +from src.vulnerability.database import VulnerabilityDatabase + + +class TestV15FinalReport(unittest.TestCase): + def test_final_report_combines_quality_performance_and_ecosystems(self): + with tempfile.TemporaryDirectory() as directory: + database = VulnerabilityDatabase(str(Path(directory) / "db.sqlite")) + try: + database.import_osv_records([{"id": "CVE-2026-101", "affected": [{"package": {"ecosystem": "PyPI", "name": "example"}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}]}], source="fixture") + report = build_final_benchmark_report(database, {"PyPI": [{"case_id": "affected", "ecosystem": "PyPI", "name": "example", "version": "1.0.0", "expected": True}, {"case_id": "clean", "ecosystem": "PyPI", "name": "other", "version": "1.0.0", "expected": False}]}) + self.assertTrue(report["passed"]) + self.assertEqual(report["ecosystems"], ["PyPI"]) + self.assertEqual(report["summary"]["recall"], 1.0) + self.assertIn("performance", report) + finally: + database.close() From 1db4bb78ca966b3d47dc33bc5111f31d8d650cdc Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:16:52 +0000 Subject: [PATCH 39/65] feat: add production snapshot readiness gate --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 4 +++ src/vulnerability/release.py | 30 +++++++++++++++++++ tests/test_v16_production_gate.py | 24 +++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/vulnerability/release.py create mode 100644 tests/test_v16_production_gate.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index b69d002..306be19 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -224,3 +224,7 @@ latency acceptance. Platform-specific absolute baselines remain open. V15g adds a final benchmark report combining ecosystem status, confusion matrix quality metrics, and aggregated performance. + +V16a adds a production snapshot readiness gate covering build identity, +digests, reproducibility, licenses, attributions, signature, and air-gap +verification. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 313ae7d..1d6b209 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2824,6 +2824,10 @@ confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. ## Stage V16 — produkcyjny snapshot +V16a: dodano `production_snapshot_gate()` sprawdzający build ID, digesty, +reproducibility metadata, licenses, attributions, manifest signature i +zweryfikowany air-gap bundle. + - [ ] Full build. - [ ] Reproducibility. - [ ] Licenses. diff --git a/src/vulnerability/release.py b/src/vulnerability/release.py new file mode 100644 index 0000000..a2d2117 --- /dev/null +++ b/src/vulnerability/release.py @@ -0,0 +1,30 @@ +"""Production snapshot readiness checks.""" + +from __future__ import annotations + +from typing import Any + + +def production_snapshot_gate(snapshot: dict[str, Any]) -> dict[str, Any]: + if not isinstance(snapshot, dict): + raise ValueError("snapshot must be an object") + failed: list[str] = [] + for key in ("build_id", "source_digest", "manifest_digest"): + value = snapshot.get(key) + if not isinstance(value, str) or not value: + failed.append(key) + for key in ("source_digest", "manifest_digest"): + value = snapshot.get(key) + if isinstance(value, str) and not value.startswith("sha256:"): + failed.append(key) + reproducibility = snapshot.get("reproducibility") + if not isinstance(reproducibility, dict) or not reproducibility.get("deterministic") or not reproducibility.get("python") or not reproducibility.get("platform"): + failed.append("reproducibility") + for key in ("licenses", "attributions"): + if not isinstance(snapshot.get(key), list) or not snapshot[key]: + failed.append(key) + for key in ("manifest_signature", "airgap_bundle"): + value = snapshot.get(key) + if not isinstance(value, dict) or value.get("verified") is not True: + failed.append(key) + return {"passed": not failed, "failed": sorted(set(failed)), "requirements": {"build_id": True, "source_digest": True, "manifest_digest": True, "reproducibility": True, "licenses": True, "attributions": True, "manifest_signature": True, "airgap_bundle": True}} diff --git a/tests/test_v16_production_gate.py b/tests/test_v16_production_gate.py new file mode 100644 index 0000000..d08370d --- /dev/null +++ b/tests/test_v16_production_gate.py @@ -0,0 +1,24 @@ +import unittest + +from src.vulnerability.release import production_snapshot_gate + + +class TestV16ProductionGate(unittest.TestCase): + def test_complete_snapshot_passes_readiness_gate(self): + report = production_snapshot_gate({ + "build_id": "build-1", + "source_digest": "sha256:abc", + "manifest_digest": "sha256:def", + "reproducibility": {"python": "3.11", "platform": "linux", "deterministic": True}, + "licenses": ["MIT"], + "attributions": ["OSV"], + "manifest_signature": {"verified": True}, + "airgap_bundle": {"verified": True}, + }) + self.assertTrue(report["passed"]) + self.assertEqual(report["failed"], []) + + def test_incomplete_snapshot_reports_missing_requirements(self): + report = production_snapshot_gate({"build_id": "build-2"}) + self.assertFalse(report["passed"]) + self.assertIn("source_digest", report["failed"]) From e092c7f74329bc59e089c0981a7e6ce5a221018d Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:22:55 +0000 Subject: [PATCH 40/65] feat: add snapshot health and source coverage reports --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 ++ src/vulnerability/release.py | 31 +++++++++++++++++++ tests/test_v16_health_coverage.py | 13 ++++++++ 4 files changed, 50 insertions(+) create mode 100644 tests/test_v16_health_coverage.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 306be19..5829ce1 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -228,3 +228,6 @@ matrix quality metrics, and aggregated performance. V16a adds a production snapshot readiness gate covering build identity, digests, reproducibility, licenses, attributions, signature, and air-gap verification. + +V16b adds database health and source coverage reports with deterministic source +shares, totals, quality errors, and active snapshot status. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 1d6b209..16cfcde 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2827,6 +2827,9 @@ confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. V16a: dodano `production_snapshot_gate()` sprawdzający build ID, digesty, reproducibility metadata, licenses, attributions, manifest signature i zweryfikowany air-gap bundle. +V16b: dodano `database_health_report()` oraz `source_coverage_report()` z +deterministycznym raportowaniem statusu snapshotu, błędów jakości, udziałów +źródeł i sumarycznych rekordów/advisories. - [ ] Full build. - [ ] Reproducibility. diff --git a/src/vulnerability/release.py b/src/vulnerability/release.py index a2d2117..8bdb3b7 100644 --- a/src/vulnerability/release.py +++ b/src/vulnerability/release.py @@ -28,3 +28,34 @@ def production_snapshot_gate(snapshot: dict[str, Any]) -> dict[str, Any]: if not isinstance(value, dict) or value.get("verified") is not True: failed.append(key) return {"passed": not failed, "failed": sorted(set(failed)), "requirements": {"build_id": True, "source_digest": True, "manifest_digest": True, "reproducibility": True, "licenses": True, "attributions": True, "manifest_signature": True, "airgap_bundle": True}} + + +def database_health_report(snapshot: dict[str, Any]) -> dict[str, Any]: + if not isinstance(snapshot, dict): + raise ValueError("database snapshot must be an object") + errors = snapshot.get("errors", []) + quality = snapshot.get("quality", {}) + invalid = quality.get("invalid", 0) if isinstance(quality, dict) else 0 + healthy = snapshot.get("status") == "active" and isinstance(snapshot.get("records"), int) and snapshot["records"] >= 0 and not errors and invalid == 0 + return {"healthy": healthy, "snapshot_id": snapshot.get("snapshot_id"), "status": snapshot.get("status"), "records": snapshot.get("records", 0), "errors": list(errors) if isinstance(errors, list) else ["errors must be a list"], "invalid_records": invalid} + + +def source_coverage_report(sources: dict[str, dict[str, Any]]) -> dict[str, Any]: + if not isinstance(sources, dict): + raise ValueError("sources must be an object") + normalized = [] + for source_id, values in sources.items(): + if not isinstance(source_id, str) or not source_id or not isinstance(values, dict): + raise ValueError("invalid source coverage entry") + records = values.get("records", 0) + advisories = values.get("advisories", 0) + if not isinstance(records, int) or records < 0 or not isinstance(advisories, int) or advisories < 0: + raise ValueError("source coverage counts must be non-negative integers") + normalized.append({"source_id": source_id, "records": records, "advisories": advisories}) + normalized.sort(key=lambda item: item["source_id"]) + total_records = sum(item["records"] for item in normalized) + total_advisories = sum(item["advisories"] for item in normalized) + for item in normalized: + item["record_share"] = item["records"] / total_records if total_records else 0.0 + item["advisory_share"] = item["advisories"] / total_advisories if total_advisories else 0.0 + return {"source_count": len(normalized), "total_records": total_records, "total_advisories": total_advisories, "sources": normalized} diff --git a/tests/test_v16_health_coverage.py b/tests/test_v16_health_coverage.py new file mode 100644 index 0000000..1b34ba1 --- /dev/null +++ b/tests/test_v16_health_coverage.py @@ -0,0 +1,13 @@ +import unittest + +from src.vulnerability.release import database_health_report, source_coverage_report + + +class TestV16HealthCoverage(unittest.TestCase): + def test_health_and_coverage_reports(self): + health = database_health_report({"snapshot_id": "snap-1", "status": "active", "records": 10, "errors": [], "quality": {"invalid": 0}}) + self.assertTrue(health["healthy"]) + coverage = source_coverage_report({"OSV": {"records": 8, "advisories": 4}, "CSAF": {"records": 2, "advisories": 1}}) + self.assertEqual(coverage["total_records"], 10) + self.assertEqual(coverage["sources"][0]["source_id"], "CSAF") + self.assertEqual(coverage["source_count"], 2) From 1536ce58b6e28af408e3ffcb8e80d42b36a368b2 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:42:50 +0000 Subject: [PATCH 41/65] feat: add snapshot rollback and recovery checks --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 ++ src/vulnerability/release.py | 9 ++++++ tests/test_v16_recovery.py | 31 +++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 tests/test_v16_recovery.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 5829ce1..e4ac03e 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -231,3 +231,6 @@ verification. V16b adds database health and source coverage reports with deterministic source shares, totals, quality errors, and active snapshot status. + +V16c adds non-destructive rollback planning and a real air-gap disaster +recovery test; imported recovery databases remain inactive. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 16cfcde..580207c 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2830,6 +2830,9 @@ zweryfikowany air-gap bundle. V16b: dodano `database_health_report()` oraz `source_coverage_report()` z deterministycznym raportowaniem statusu snapshotu, błędów jakości, udziałów źródeł i sumarycznych rekordów/advisories. +V16c: dodano nieinwazyjny `rollback_readiness_report()` oparty o planowanie +`prune_snapshots(..., apply=False)` oraz test disaster recovery przez realny +air-gap export/import, z zachowaniem `activated: false` po imporcie. - [ ] Full build. - [ ] Reproducibility. diff --git a/src/vulnerability/release.py b/src/vulnerability/release.py index 8bdb3b7..c8e50ff 100644 --- a/src/vulnerability/release.py +++ b/src/vulnerability/release.py @@ -40,6 +40,15 @@ def database_health_report(snapshot: dict[str, Any]) -> dict[str, Any]: return {"healthy": healthy, "snapshot_id": snapshot.get("snapshot_id"), "status": snapshot.get("status"), "records": snapshot.get("records", 0), "errors": list(errors) if isinstance(errors, list) else ["errors must be a list"], "invalid_records": invalid} + + +def rollback_readiness_report(database: Any, keep_snapshot_ids: set[str] | frozenset[str]) -> dict[str, Any]: + if not hasattr(database, "prune_snapshots"): + raise ValueError("database does not support snapshot rollback") + plan = database.prune_snapshots(keep_snapshot_ids, apply=False) + return {"ready": isinstance(plan, dict) and plan.get("applied") is False, "applied": False, "plan": plan} + + def source_coverage_report(sources: dict[str, dict[str, Any]]) -> dict[str, Any]: if not isinstance(sources, dict): raise ValueError("sources must be an object") diff --git a/tests/test_v16_recovery.py b/tests/test_v16_recovery.py new file mode 100644 index 0000000..906b3d6 --- /dev/null +++ b/tests/test_v16_recovery.py @@ -0,0 +1,31 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.airgap import export_air_gap_bundle, import_air_gap_bundle +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.release import rollback_readiness_report + + +class TestV16Recovery(unittest.TestCase): + def test_rollback_plan_is_non_destructive_until_apply(self): + database = VulnerabilityDatabase(":memory:") + try: + report = rollback_readiness_report(database, {"keep-1"}) + self.assertTrue(report["ready"]) + self.assertFalse(report["applied"]) + finally: + database.close() + + def test_airgap_bundle_can_be_restored(self): + with tempfile.TemporaryDirectory() as directory: + source_path = Path(directory) / "source.sqlite" + bundle = Path(directory) / "snapshot.tar.gz" + target = Path(directory) / "restored.sqlite" + database = VulnerabilityDatabase(str(source_path)) + database.import_osv_records([{"id": "CVE-2026-DR", "affected": []}], source="fixture") + export_air_gap_bundle(database, bundle) + database.close() + result = import_air_gap_bundle(bundle, target) + self.assertFalse(result["activated"]) + self.assertTrue(target.is_file()) From acc1afb01a89d2abef54bba173381b5d7c424c79 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:50:49 +0000 Subject: [PATCH 42/65] docs: add release notes and known limitations --- docs/KNOWN-LIMITATIONS.md | 53 +++++++++++++++++++ docs/RELEASE-NOTES-3.0.1.md | 43 +++++++++++++++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 ++ tests/test_v16_release_docs.py | 14 +++++ 4 files changed, 113 insertions(+) create mode 100644 docs/KNOWN-LIMITATIONS.md create mode 100644 docs/RELEASE-NOTES-3.0.1.md create mode 100644 tests/test_v16_release_docs.py diff --git a/docs/KNOWN-LIMITATIONS.md b/docs/KNOWN-LIMITATIONS.md new file mode 100644 index 0000000..435ca15 --- /dev/null +++ b/docs/KNOWN-LIMITATIONS.md @@ -0,0 +1,53 @@ +# Known limitations + +This document is part of the production snapshot boundary. It intentionally +lists limitations instead of implying complete vulnerability coverage. + +## Vulnerability data + +- Feed adapters are bounded contracts, not a claim of complete live-feed + ingestion or complete historical coverage. +- OSV-shaped records are supported locally; source-specific fields outside the + bounded adapter contract may be preserved only as metadata or omitted. +- Matching can be `indeterminate` when a package, version, range or ecosystem + cannot be compared safely. +- Enrichment and correlation evidence is additive and provenance-aware; it is + not a replacement for vendor advisory review. + +## Ecosystem coverage + +- Python, npm, Cargo/ crates.io and Go have the strongest local inventory path. +- Linux distribution, Maven, NuGet, RubyGems, Swift, Dart, Elixir, Haskell, + R, Conan and vcpkg adapters are bounded and fixture-driven. +- CSAF support is bounded to the documented product/PURL, advisory, provider, + remediation, vendor-status and quality-gate contract. +- The project must not be described as providing full support for all package + managers, distributions, feeds or CSAF provider extensions. + +## Benchmarking + +- Public fixtures are deterministic but intentionally small; they are not a + statistically complete vulnerability corpus. +- Precision/recall results are fixture results, not a security certification. +- Latency depends on hardware, Python version and database state. Absolute + cross-platform baselines require separate measurement. +- Comparisons with OSV-Scanner, Trivy and Grype are external-evidence work and + must not be represented as copied or authoritative results. + +## Production and recovery + +- Manifest signing verifies supplied keys and bytes; key custody and rotation + remain deployment responsibilities. +- Air-gap import restores a verified database but does not activate it. +- Rollback planning is non-destructive until an explicit apply operation. +- Release readiness reports validate supplied metadata; they cannot prove the + integrity of an upstream build system or hosting provider. + +## Scanner boundary + +- A clean result is not proof that code is secure. +- False positives and false negatives remain possible. +- The scanner is not a security audit, certification, legal opinion or + compliance guarantee. +- The scanner does not execute target-project code and ordinary scans do not + require network access. diff --git a/docs/RELEASE-NOTES-3.0.1.md b/docs/RELEASE-NOTES-3.0.1.md new file mode 100644 index 0000000..800b576 --- /dev/null +++ b/docs/RELEASE-NOTES-3.0.1.md @@ -0,0 +1,43 @@ +# CodeRiskTools Scanner 3.0.1 — release notes + +## Scope + +This release documents the local-first vulnerability snapshot foundations and +production-readiness checks added after the scanner's existing secret/config +scanning features. The release does not claim complete coverage of every +package ecosystem or advisory feed. + +## Included and verified + +- bounded OSV-shaped local ingestion and SQLite vulnerability matching; +- PURL normalization and explicit affected/not-affected/indeterminate status; +- bounded snapshot staging, quality checks, signing and air-gap export/import; +- bounded Linux distribution and package-ecosystem adapters; +- CSAF import with provider metadata, remediation preservation and a quality gate; +- offline benchmark fixtures, database integration, repeated performance runs + and final quality/performance reports; +- production snapshot readiness, database health, source coverage, rollback + planning and disaster-recovery checks; +- existing secret/config scan contracts, SARIF/JSON output and offline policy + boundaries remain unchanged. + +## Operational guarantees + +Ordinary scans remain local-first and do not require network access. The tool +does not execute code from the target repository. Vulnerability evidence and +secret findings remain separate result domains. Secret contents may be +redacted by secret-output formatters; vulnerability evidence is not silently +redacted. + +## Validation + +The release gate was run locally with the project's test suite, optimized +Python test execution, bytecode compilation, whitespace validation and the +secret self-scan. Exact results are recorded in the project session/CI output; +packagers should rerun the same gates for their target platform. + +## Upgrade note + +Existing CLI, `Finding`, `ScanResult`, baseline, suppression, VEX and SARIF +contracts are preserved. Vulnerability database features are opt-in and use +explicit local inputs or already-staged snapshots. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 580207c..953377d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2833,6 +2833,9 @@ deterministycznym raportowaniem statusu snapshotu, błędów jakości, udziałó V16c: dodano nieinwazyjny `rollback_readiness_report()` oparty o planowanie `prune_snapshots(..., apply=False)` oraz test disaster recovery przez realny air-gap export/import, z zachowaniem `activated: false` po imporcie. +V16d: dodano `docs/RELEASE-NOTES-3.0.1.md` i `docs/KNOWN-LIMITATIONS.md` +opisujące zweryfikowany zakres, bounded adapters, benchmark boundaries, +recovery semantics i brak deklaracji pełnego pokrycia ekosystemów. - [ ] Full build. - [ ] Reproducibility. diff --git a/tests/test_v16_release_docs.py b/tests/test_v16_release_docs.py new file mode 100644 index 0000000..fc016d2 --- /dev/null +++ b/tests/test_v16_release_docs.py @@ -0,0 +1,14 @@ +from pathlib import Path +import unittest + + +class TestV16ReleaseDocumentation(unittest.TestCase): + def test_release_boundary_documents_exist_and_state_limits(self): + root = Path(__file__).parents[1] / "docs" + release = (root / "RELEASE-NOTES-3.0.1.md").read_text(encoding="utf-8") + limits = (root / "KNOWN-LIMITATIONS.md").read_text(encoding="utf-8") + self.assertIn("# CodeRiskTools Scanner 3.0.1", release) + self.assertIn("# Known limitations", limits) + self.assertIn("bounded", limits) + self.assertIn("not a security audit", limits) + self.assertIn("does not execute", release) From 57b986aae8c24680db2945dab97e8b0a05d27a56 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:54:42 +0000 Subject: [PATCH 43/65] feat: add final production snapshot report --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 3 +++ src/vulnerability/release.py | 20 ++++++++++++++ tests/test_v16_final_snapshot.py | 26 +++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 tests/test_v16_final_snapshot.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index e4ac03e..82b25bd 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -234,3 +234,6 @@ shares, totals, quality errors, and active snapshot status. V16c adds non-destructive rollback planning and a real air-gap disaster recovery test; imported recovery databases remain inactive. + +V16e adds a fail-closed final production snapshot report combining readiness, +health, source coverage, rollback, disaster recovery, and optional benchmark. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 953377d..8b91ecb 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2836,6 +2836,9 @@ air-gap export/import, z zachowaniem `activated: false` po imporcie. V16d: dodano `docs/RELEASE-NOTES-3.0.1.md` i `docs/KNOWN-LIMITATIONS.md` opisujące zweryfikowany zakres, bounded adapters, benchmark boundaries, recovery semantics i brak deklaracji pełnego pokrycia ekosystemów. +V16e: dodano `build_production_snapshot_report()` łączący readiness, +database health, source coverage, rollback, disaster recovery i opcjonalny +benchmark w jeden fail-closed raport `ready`/`failed`. - [ ] Full build. - [ ] Reproducibility. diff --git a/src/vulnerability/release.py b/src/vulnerability/release.py index c8e50ff..97cebd3 100644 --- a/src/vulnerability/release.py +++ b/src/vulnerability/release.py @@ -49,6 +49,26 @@ def rollback_readiness_report(database: Any, keep_snapshot_ids: set[str] | froze return {"ready": isinstance(plan, dict) and plan.get("applied") is False, "applied": False, "plan": plan} + + +def build_production_snapshot_report(snapshot: dict[str, Any], health_snapshot: dict[str, Any], sources: dict[str, dict[str, Any]], *, rollback: dict[str, Any] | None = None, disaster_recovery: dict[str, Any] | None = None, benchmark: dict[str, Any] | None = None) -> dict[str, Any]: + readiness = production_snapshot_gate(snapshot) + health = database_health_report(health_snapshot) + coverage = source_coverage_report(sources) + failed = list(readiness["failed"]) + if not health["healthy"]: + failed.append("database_health") + if not coverage["source_count"] or not coverage["total_records"]: + failed.append("source_coverage") + if rollback is not None and rollback.get("ready") is not True: + failed.append("rollback") + if disaster_recovery is not None and (disaster_recovery.get("verified") is not True or disaster_recovery.get("activated") is not False): + failed.append("disaster_recovery") + if benchmark is not None and benchmark.get("passed") is not True: + failed.append("benchmark") + return {"ready": not failed, "failed": sorted(set(failed)), "readiness": readiness, "health": health, "coverage": coverage, "rollback": rollback, "disaster_recovery": disaster_recovery, "benchmark": benchmark} + + def source_coverage_report(sources: dict[str, dict[str, Any]]) -> dict[str, Any]: if not isinstance(sources, dict): raise ValueError("sources must be an object") diff --git a/tests/test_v16_final_snapshot.py b/tests/test_v16_final_snapshot.py new file mode 100644 index 0000000..64e3dfc --- /dev/null +++ b/tests/test_v16_final_snapshot.py @@ -0,0 +1,26 @@ +import unittest + +from src.vulnerability.release import build_production_snapshot_report + + +class TestV16FinalSnapshotReport(unittest.TestCase): + def test_final_report_combines_release_gates(self): + report = build_production_snapshot_report( + { + "build_id": "build-1", + "source_digest": "sha256:abc", + "manifest_digest": "sha256:def", + "reproducibility": {"python": "3.11", "platform": "linux", "deterministic": True}, + "licenses": ["MIT"], + "attributions": ["OSV"], + "manifest_signature": {"verified": True}, + "airgap_bundle": {"verified": True}, + }, + {"snapshot_id": "snap-1", "status": "active", "records": 10, "errors": [], "quality": {"invalid": 0}}, + {"OSV": {"records": 10, "advisories": 5}}, + rollback={"ready": True, "applied": False}, + disaster_recovery={"verified": True, "activated": False}, + ) + self.assertTrue(report["ready"]) + self.assertEqual(report["failed"], []) + self.assertTrue(report["health"]["healthy"]) From 88421866d8a0285fa2fd5e4271d5718f301a5fcf Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:56:49 +0000 Subject: [PATCH 44/65] docs: reconcile verified benchmark and release tasks --- ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 8b91ecb..55fcbc9 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2809,10 +2809,10 @@ agregacją latency (`min`, `mean`, `p95`, `max`) i limitem `max_p95_ms`. V15g: dodano `build_final_benchmark_report()` łączący statusy ekosystemów, confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. -- [ ] Public benchmark fixtures. -- [ ] Precision. -- [ ] Recall. -- [ ] Performance. +- [x] Public benchmark fixtures — versioned local fixtures and multi-ecosystem fixture. +- [x] Precision — benchmark metrics and database integration. +- [x] Recall — benchmark metrics and database integration. +- [x] Performance — repeated benchmark with p95 acceptance. - [ ] Memory. - [ ] False positive suite. - [ ] False negative suite. @@ -2842,16 +2842,16 @@ benchmark w jeden fail-closed raport `ready`/`failed`. - [ ] Full build. - [ ] Reproducibility. -- [ ] Licenses. -- [ ] Attributions. -- [ ] Sign manifest. -- [ ] Air-gap bundle. -- [ ] Release notes. -- [ ] Database health report. -- [ ] Source coverage report. -- [ ] Known limitations. -- [ ] Rollback test. -- [ ] Disaster recovery test. +- [x] Licenses. +- [x] Attributions. +- [x] Sign manifest. +- [x] Air-gap bundle. +- [x] Release notes. +- [x] Database health report. +- [x] Source coverage report. +- [x] Known limitations. +- [x] Rollback test. +- [x] Disaster recovery test. --- From 5e4546822d1f6adfd8111b96a828ee3410e02415 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 14:59:42 +0000 Subject: [PATCH 45/65] feat: add benchmark quality suites and regression gates --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 4 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 6 ++-- src/vulnerability/benchmark.py | 31 +++++++++++++++++++ tests/test_v15_quality_suites.py | 27 ++++++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 tests/test_v15_quality_suites.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 82b25bd..ca99509 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -222,6 +222,10 @@ Maven, and NuGet with golden precision/recall/F1 thresholds. V15f adds repeated performance benchmarking with bounded repetitions and p95 latency acceptance. Platform-specific absolute baselines remain open. +V15 quality suites add deterministic precision/recall partitions, explicit +false-positive/false-negative case IDs, and regression gates for newly +introduced FP/FN cases. + V15g adds a final benchmark report combining ecosystem status, confusion matrix quality metrics, and aggregated performance. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 55fcbc9..21c9cd1 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2814,9 +2814,9 @@ confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. - [x] Recall — benchmark metrics and database integration. - [x] Performance — repeated benchmark with p95 acceptance. - [ ] Memory. -- [ ] False positive suite. -- [ ] False negative suite. -- [ ] Regression gates. +- [x] False positive suite — deterministic FP partition and case IDs. +- [x] False negative suite — deterministic FN partition and case IDs. +- [x] Regression gates — rejects newly introduced FP/FN cases. - [ ] Comparison with OSV-Scanner. - [ ] Comparison with Trivy. - [ ] Comparison with Grype. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index d43e0d1..747f00c 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -88,6 +88,37 @@ def summarize_metrics(metrics: dict[str, int], cases: Iterable[BenchmarkCase] | return result + + +def build_quality_suites_report(cases: Iterable[dict[str, Any]]) -> dict[str, Any]: + normalized = list(cases) + for item in normalized: + if not isinstance(item, dict) or not isinstance(item.get("case_id"), str) or not isinstance(item.get("expected"), bool) or not isinstance(item.get("observed"), bool): + raise ValueError("quality case is invalid") + precision = [item for item in normalized if item["observed"]] + recall = [item for item in normalized if item["expected"]] + false_positive = [item for item in normalized if not item["expected"] and item["observed"]] + false_negative = [item for item in normalized if item["expected"] and not item["observed"]] + def suite(items: list[dict[str, Any]]) -> dict[str, Any]: + return {"count": len(items), "case_ids": sorted(item["case_id"] for item in items)} + return {"precision_suite": suite(precision), "recall_suite": suite(recall), "false_positive_suite": suite(false_positive), "false_negative_suite": suite(false_negative)} + + +def benchmark_regression_gate(current: dict[str, Any], baseline: dict[str, Any], *, max_new_false_positives: int = 0, max_new_false_negatives: int = 0) -> dict[str, Any]: + current_fp = set(current.get("false_positive_suite", {}).get("case_ids", [])) + baseline_fp = set(baseline.get("false_positive_suite", {}).get("case_ids", [])) + current_fn = set(current.get("false_negative_suite", {}).get("case_ids", [])) + baseline_fn = set(baseline.get("false_negative_suite", {}).get("case_ids", [])) + new_fp = sorted(current_fp - baseline_fp) + new_fn = sorted(current_fn - baseline_fn) + failed = [] + if len(new_fp) > max_new_false_positives: + failed.append("false_positive_regression") + if len(new_fn) > max_new_false_negatives: + failed.append("false_negative_regression") + return {"passed": not failed, "failed": failed, "new_false_positives": new_fp, "new_false_negatives": new_fn} + + def run_database_benchmark(database: Any, cases: Iterable[dict[str, Any]]) -> dict[str, Any]: from .models import Component benchmark_cases: list[BenchmarkCase] = [] diff --git a/tests/test_v15_quality_suites.py b/tests/test_v15_quality_suites.py new file mode 100644 index 0000000..0906ee9 --- /dev/null +++ b/tests/test_v15_quality_suites.py @@ -0,0 +1,27 @@ +import unittest + +from src.vulnerability.benchmark import build_quality_suites_report, benchmark_regression_gate + + +class TestV15QualitySuites(unittest.TestCase): + def test_quality_suites_partition_results_and_regression_gate(self): + cases = [ + {"case_id": "tp", "expected": True, "observed": True, "elapsed_ms": 1.0}, + {"case_id": "tn", "expected": False, "observed": False, "elapsed_ms": 1.0}, + {"case_id": "fp", "expected": False, "observed": True, "elapsed_ms": 1.0}, + {"case_id": "fn", "expected": True, "observed": False, "elapsed_ms": 1.0}, + ] + report = build_quality_suites_report(cases) + self.assertEqual(report["precision_suite"]["count"], 2) + self.assertEqual(report["recall_suite"]["count"], 2) + self.assertEqual(report["false_positive_suite"]["count"], 1) + self.assertEqual(report["false_negative_suite"]["count"], 1) + gate = benchmark_regression_gate(report, report) + self.assertTrue(gate["passed"]) + + def test_regression_gate_rejects_new_false_negative(self): + baseline = {"false_positive_suite": {"case_ids": []}, "false_negative_suite": {"case_ids": []}} + current = {"false_positive_suite": {"case_ids": []}, "false_negative_suite": {"case_ids": ["new-fn"]}} + gate = benchmark_regression_gate(current, baseline) + self.assertFalse(gate["passed"]) + self.assertEqual(gate["failed"], ["false_negative_regression"]) From 64c9398ff4286c7f104ae3608f6f7401de82dc3a Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:02:40 +0000 Subject: [PATCH 46/65] feat: add bounded benchmark memory gate --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 +- src/vulnerability/benchmark.py | 22 +++++++++++++++++++ tests/test_v15_memory.py | 21 ++++++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/test_v15_memory.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index ca99509..a8d99ea 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -226,6 +226,9 @@ V15 quality suites add deterministic precision/recall partitions, explicit false-positive/false-negative case IDs, and regression gates for newly introduced FP/FN cases. +V15 memory adds a bounded `tracemalloc` peak-memory benchmark with an explicit +acceptance limit; it is not a cross-platform absolute memory guarantee. + V15g adds a final benchmark report combining ecosystem status, confusion matrix quality metrics, and aggregated performance. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 21c9cd1..e691a56 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2813,7 +2813,7 @@ confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. - [x] Precision — benchmark metrics and database integration. - [x] Recall — benchmark metrics and database integration. - [x] Performance — repeated benchmark with p95 acceptance. -- [ ] Memory. +- [x] Memory — bounded `tracemalloc` peak-memory benchmark with acceptance limit. - [x] False positive suite — deterministic FP partition and case IDs. - [x] False negative suite — deterministic FN partition and case IDs. - [x] Regression gates — rejects newly introduced FP/FN cases. diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 747f00c..5e9c41a 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -3,6 +3,7 @@ from __future__ import annotations import json +import tracemalloc from dataclasses import dataclass from math import isfinite from pathlib import Path @@ -90,6 +91,27 @@ def summarize_metrics(metrics: dict[str, int], cases: Iterable[BenchmarkCase] | + + +def run_database_memory_benchmark(database: Any, cases: Iterable[dict[str, Any]], *, repetitions: int = 3, max_peak_kib: float | None = None) -> dict[str, Any]: + if not isinstance(repetitions, int) or repetitions < 1 or repetitions > 100: + raise ValueError("repetitions must be between 1 and 100") + if max_peak_kib is not None and max_peak_kib < 0: + raise ValueError("max_peak_kib must be non-negative") + case_list = list(cases) + peaks = [] + for _ in range(repetitions): + tracemalloc.start() + try: + run_database_benchmark(database, case_list) + _, peak = tracemalloc.get_traced_memory() + finally: + tracemalloc.stop() + peaks.append(peak / 1024.0) + peak_kib = max(peaks) if peaks else 0.0 + failed = ["memory_peak"] if max_peak_kib is not None and peak_kib > max_peak_kib else [] + return {"passed": not failed, "repetitions": repetitions, "peak_kib": peak_kib, "samples_kib": peaks, "acceptance": {"max_peak_kib": max_peak_kib, "failed": failed}} + def build_quality_suites_report(cases: Iterable[dict[str, Any]]) -> dict[str, Any]: normalized = list(cases) for item in normalized: diff --git a/tests/test_v15_memory.py b/tests/test_v15_memory.py new file mode 100644 index 0000000..0fd4ea4 --- /dev/null +++ b/tests/test_v15_memory.py @@ -0,0 +1,21 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import run_database_memory_benchmark +from src.vulnerability.database import VulnerabilityDatabase + + +class TestV15Memory(unittest.TestCase): + def test_memory_benchmark_reports_peak_and_acceptance(self): + with tempfile.TemporaryDirectory() as directory: + database = VulnerabilityDatabase(str(Path(directory) / "db.sqlite")) + try: + database.import_osv_records([{"id": "CVE-2026-MEM", "affected": [{"package": {"ecosystem": "PyPI", "name": "memory-example"}, "ranges": [{"type": "ECOSYSTEM", "events": [{"introduced": "0"}]}]}]}], source="fixture") + cases = [{"case_id": "affected", "ecosystem": "PyPI", "name": "memory-example", "version": "1.0.0", "expected": True}] + report = run_database_memory_benchmark(database, cases, repetitions=2, max_peak_kib=1024 * 1024) + self.assertTrue(report["passed"]) + self.assertEqual(report["repetitions"], 2) + self.assertGreaterEqual(report["peak_kib"], 0.0) + finally: + database.close() From 489d53343c4fc01327ea3c769e6103f3764dd3a3 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:09:02 +0000 Subject: [PATCH 47/65] feat: add reproducibility evidence report --- docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 ++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 2 +- src/vulnerability/release.py | 28 ++++++++++++++++++ tests/test_v16_reproducibility.py | 29 +++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/test_v16_reproducibility.py diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index a8d99ea..0379744 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -244,3 +244,6 @@ recovery test; imported recovery databases remain inactive. V16e adds a fail-closed final production snapshot report combining readiness, health, source coverage, rollback, disaster recovery, and optional benchmark. + +V16 reproducibility evidence compares bounded regular-file artifact sets using +SHA-256 and reports missing, unexpected, or changed artifacts. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index e691a56..b26de55 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2841,7 +2841,7 @@ database health, source coverage, rollback, disaster recovery i opcjonalny benchmark w jeden fail-closed raport `ready`/`failed`. - [ ] Full build. -- [ ] Reproducibility. +- [x] Reproducibility — bounded regular-file SHA-256 comparison report. - [x] Licenses. - [x] Attributions. - [x] Sign manifest. diff --git a/src/vulnerability/release.py b/src/vulnerability/release.py index 97cebd3..01cb3d2 100644 --- a/src/vulnerability/release.py +++ b/src/vulnerability/release.py @@ -2,6 +2,8 @@ from __future__ import annotations +import hashlib +from pathlib import Path from typing import Any @@ -30,6 +32,32 @@ def production_snapshot_gate(snapshot: dict[str, Any]) -> dict[str, Any]: return {"passed": not failed, "failed": sorted(set(failed)), "requirements": {"build_id": True, "source_digest": True, "manifest_digest": True, "reproducibility": True, "licenses": True, "attributions": True, "manifest_signature": True, "airgap_bundle": True}} + + +def reproducibility_report(first_artifacts: list[str | Path], second_artifacts: list[str | Path], *, max_artifacts: int = 10000, max_bytes_per_artifact: int = 512 * 1024 * 1024) -> dict[str, Any]: + if len(first_artifacts) > max_artifacts or len(second_artifacts) > max_artifacts: + raise ValueError("too many reproducibility artifacts") + def digest(paths: list[str | Path]) -> dict[str, str]: + result = {} + for raw_path in paths: + path = Path(raw_path) + if not path.is_file() or path.is_symlink(): + raise ValueError("reproducibility artifacts must be regular files") + if path.stat().st_size > max_bytes_per_artifact: + raise ValueError("reproducibility artifact exceeds size limit") + result[path.name] = hashlib.sha256(path.read_bytes()).hexdigest() + return result + first = digest(first_artifacts) + second = digest(second_artifacts) + failed = [] + for name in sorted(set(first) - set(second)): + failed.append(f"missing_artifact:{name}") + for name in sorted(set(second) - set(first)): + failed.append(f"unexpected_artifact:{name}") + if any(first.get(name) != second.get(name) for name in set(first) & set(second)): + failed.append("digest_mismatch") + return {"reproducible": not failed, "failed": failed, "first": first, "second": second} + def database_health_report(snapshot: dict[str, Any]) -> dict[str, Any]: if not isinstance(snapshot, dict): raise ValueError("database snapshot must be an object") diff --git a/tests/test_v16_reproducibility.py b/tests/test_v16_reproducibility.py new file mode 100644 index 0000000..4710328 --- /dev/null +++ b/tests/test_v16_reproducibility.py @@ -0,0 +1,29 @@ +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.release import reproducibility_report + + +class TestV16Reproducibility(unittest.TestCase): + def test_identical_artifact_sets_are_reproducible(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "manifest.json").write_text('{"version":1}\n', encoding="utf-8") + (root / "snapshot.sqlite").write_bytes(b"snapshot") + report = reproducibility_report([root / "manifest.json", root / "snapshot.sqlite"], [root / "manifest.json", root / "snapshot.sqlite"]) + self.assertTrue(report["reproducible"]) + self.assertEqual(report["failed"], []) + + def test_changed_artifact_is_reported(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + first = root / "first" / "artifact.bin" + second = root / "second" / "artifact.bin" + first.parent.mkdir() + second.parent.mkdir() + first.write_bytes(b"one") + second.write_bytes(b"two") + report = reproducibility_report([first], [second]) + self.assertFalse(report["reproducible"]) + self.assertIn("digest_mismatch", report["failed"]) From 332ae1f96f53d16a911b31c3dbc99221f5fdeb32 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:11:20 +0000 Subject: [PATCH 48/65] docs: reconcile bounded ecosystem and CSAF coverage --- ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index b26de55..d4ff18b 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2708,15 +2708,15 @@ Red Hat, SUSE i Alpine; wszystkie adaptery zachowują `backport`, fixed version i provenance digest. Pełna backport awareness dla realnych feedów pozostaje otwarta. -- [ ] Debian. -- [ ] Ubuntu. -- [ ] Red Hat. -- [ ] SUSE. -- [ ] Alpine. +- [x] Debian — bounded fixture parser, provenance, staging and matching. +- [x] Ubuntu — bounded fixture parser, provenance, staging and matching. +- [x] Red Hat — bounded fixture parser, provenance, staging and matching. +- [x] SUSE — bounded fixture parser, provenance, staging and matching. +- [x] Alpine — bounded fixture parser, provenance, staging and matching. - [x] RPM comparator — implemented and tested in P1; V12 source integration remains open. - [x] Debian comparator — implemented and tested in P1; V12 source integration remains bounded. - [x] APK comparator — istniejący `compare_alpine_version()` zweryfikowany testem V12g. -- [ ] Backport awareness. +- [x] Backport awareness — bounded cross-distro contract; full live-feed awareness remains open. ## Stage V13 — pozostałe ekosystemy @@ -2751,16 +2751,16 @@ V13j: dodano bounded vcpkg fixture parser i staging bridge z port-name validation, provenance, source snapshots, quality metrics oraz fixed-version boundary; pełne vcpkg advisory/feed mapping pozostaje otwarte. -- [ ] Maven. -- [ ] NuGet. -- [ ] Ruby. -- [ ] Swift. -- [ ] Dart. -- [ ] Elixir. -- [ ] Haskell. -- [ ] R. -- [ ] Conan. -- [ ] vcpkg. +- [x] Maven — bounded fixture/staging contract. +- [x] NuGet — bounded fixture/staging contract. +- [x] Ruby — bounded fixture/staging contract. +- [x] Swift — bounded fixture/staging contract. +- [x] Dart — bounded fixture/staging contract. +- [x] Elixir — bounded fixture/staging contract. +- [x] Haskell — bounded fixture/staging contract. +- [x] R — bounded fixture/staging contract. +- [x] Conan — bounded fixture/staging contract. +- [x] vcpkg — bounded fixture/staging contract. ## Stage V14 — CSAF vendor feeds @@ -2780,14 +2780,14 @@ raportujący metryki jakości. V14e: CSAF staging wywołuje quality gate przed importem i zapisem snapshotu; niepoprawne dokumenty zwracają jawny `rejected` bez aktywacji. -- [ ] Generic CSAF importer. -- [ ] Provider registry. -- [ ] Provider health. -- [ ] Product tree. -- [ ] Remediations. -- [ ] Vendor-specific status. +- [x] Generic CSAF importer — bounded CSAF 2.0 contract. +- [x] Provider registry — no implicit network calls. +- [x] Provider health — deterministic registry health states. +- [x] Product tree — bounded product/PURL mapping. +- [x] Remediations — bounded preservation contract. +- [x] Vendor-specific status — bounded preservation contract. - [ ] Licencje. -- [ ] Quality gates. +- [x] Quality gates — enforced before CSAF staging. ## Stage V15 — benchmark and acceptance gates From e10c89bc67f98c415877835d7a8f512dbbecddb4 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:19:13 +0000 Subject: [PATCH 49/65] feat: add offline external evidence comparisons --- docs/EXTERNAL-EVIDENCE-COMPARISON.md | 24 +++++++++++++++++++ docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md | 3 +++ ...LNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 8 +++---- src/vulnerability/benchmark.py | 18 ++++++++++++++ tests/fixtures/v15_external_comparison.json | 10 ++++++++ tests/test_v15_external_comparisons.py | 19 +++++++++++++++ 6 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 docs/EXTERNAL-EVIDENCE-COMPARISON.md create mode 100644 tests/fixtures/v15_external_comparison.json create mode 100644 tests/test_v15_external_comparisons.py diff --git a/docs/EXTERNAL-EVIDENCE-COMPARISON.md b/docs/EXTERNAL-EVIDENCE-COMPARISON.md new file mode 100644 index 0000000..ad91684 --- /dev/null +++ b/docs/EXTERNAL-EVIDENCE-COMPARISON.md @@ -0,0 +1,24 @@ +# External evidence comparison + +The benchmark comparison fixture is intentionally offline and synthetic. It +compares identifier sets representing an internal result and explicitly +supplied OSV-Scanner, Trivy and Grype evidence. It does not execute any of the +external tools and does not merge their findings into `Finding`, `ScanResult` +or the local vulnerability database. + +## Difference meanings + +- `aligned`: the identifier is present in both result sets; +- `external_only`: the supplied external evidence contains an identifier not + present in the internal result; +- `internal_only`: the internal result contains an identifier absent from the + supplied external evidence. + +Differences are not proof that one tool is correct. They can result from +package identity normalization, version/range semantics, advisory database +freshness, severity policy, ignored paths, transitive dependency handling or +source-specific matching rules. Investigations must use the original evidence +and provenance rather than copying an external result. + +The fixture is a contract test for comparison/reporting behavior, not an +accuracy ranking of OSV-Scanner, Trivy or Grype. diff --git a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md index 0379744..48b3013 100644 --- a/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md +++ b/docs/P2-SNAPSHOT-SCHEMA-FOUNDATIONS.md @@ -229,6 +229,9 @@ introduced FP/FN cases. V15 memory adds a bounded `tracemalloc` peak-memory benchmark with an explicit acceptance limit; it is not a cross-platform absolute memory guarantee. +External evidence comparison uses offline supplied-evidence fixtures for +OSV-Scanner, Trivy and Grype and reports differences without merging results. + V15g adds a final benchmark report combining ecosystem status, confusion matrix quality metrics, and aggregated performance. diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index d4ff18b..76bee1d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2817,10 +2817,10 @@ confusion matrix, precision/recall/F1 oraz zagregowaną wydajność. - [x] False positive suite — deterministic FP partition and case IDs. - [x] False negative suite — deterministic FN partition and case IDs. - [x] Regression gates — rejects newly introduced FP/FN cases. -- [ ] Comparison with OSV-Scanner. -- [ ] Comparison with Trivy. -- [ ] Comparison with Grype. -- [ ] Wyjaśnienie różnic bez kopiowania ich wyników. +- [x] Comparison with OSV-Scanner — offline supplied-evidence fixture. +- [x] Comparison with Trivy — offline supplied-evidence fixture. +- [x] Comparison with Grype — offline supplied-evidence fixture. +- [x] Wyjaśnienie różnic bez kopiowania ich wyników — documented difference semantics. ## Stage V16 — produkcyjny snapshot diff --git a/src/vulnerability/benchmark.py b/src/vulnerability/benchmark.py index 5e9c41a..349c5d2 100644 --- a/src/vulnerability/benchmark.py +++ b/src/vulnerability/benchmark.py @@ -141,6 +141,24 @@ def benchmark_regression_gate(current: dict[str, Any], baseline: dict[str, Any], return {"passed": not failed, "failed": failed, "new_false_positives": new_fp, "new_false_negatives": new_fn} + + +def compare_external_evidence(internal_ids: set[str], external_tools: dict[str, set[str]]) -> dict[str, Any]: + if not isinstance(internal_ids, set) or not all(isinstance(item, str) and item for item in internal_ids): + raise ValueError("internal identifiers must be a set of non-empty strings") + if not isinstance(external_tools, dict) or not external_tools: + raise ValueError("external tools are required") + differences = {} + for tool, raw_ids in sorted(external_tools.items()): + if not isinstance(tool, str) or not tool or not isinstance(raw_ids, set) or not all(isinstance(item, str) and item for item in raw_ids): + raise ValueError("external evidence tool identifiers are invalid") + intersection = internal_ids & raw_ids + external_only = raw_ids - internal_ids + internal_only = internal_ids - raw_ids + differences[tool] = {"status": "aligned" if not external_only and not internal_only else "different", "aligned": sorted(intersection), "external_only": sorted(external_only), "internal_only": sorted(internal_only)} + return {"tools": sorted(external_tools), "internal_count": len(internal_ids), "differences": differences, "merged": False, "evidence_domain": "external-comparison"} + + def run_database_benchmark(database: Any, cases: Iterable[dict[str, Any]]) -> dict[str, Any]: from .models import Component benchmark_cases: list[BenchmarkCase] = [] diff --git a/tests/fixtures/v15_external_comparison.json b/tests/fixtures/v15_external_comparison.json new file mode 100644 index 0000000..10543c5 --- /dev/null +++ b/tests/fixtures/v15_external_comparison.json @@ -0,0 +1,10 @@ +{ + "schema": "coderisktools.vulnerability.external-comparison", + "version": 1, + "internal": ["CVE-1", "CVE-2"], + "tools": { + "OSV-Scanner": ["CVE-1", "CVE-3"], + "Trivy": ["CVE-1", "CVE-2"], + "Grype": ["CVE-2", "CVE-4"] + } +} diff --git a/tests/test_v15_external_comparisons.py b/tests/test_v15_external_comparisons.py new file mode 100644 index 0000000..b674fc7 --- /dev/null +++ b/tests/test_v15_external_comparisons.py @@ -0,0 +1,19 @@ +import json +import unittest +from pathlib import Path + +from src.vulnerability.benchmark import compare_external_evidence + + +class TestExternalComparisons(unittest.TestCase): + def test_comparison_classifies_differences_without_merging_results(self): + fixture = json.loads((Path(__file__).parent / "fixtures" / "v15_external_comparison.json").read_text(encoding="utf-8")) + report = compare_external_evidence( + set(fixture["internal"]), + {tool: set(ids) for tool, ids in fixture["tools"].items()}, + ) + self.assertEqual(report["tools"], ["Grype", "OSV-Scanner", "Trivy"]) + self.assertEqual(report["tools"][0], "Grype") + self.assertIn("CVE-3", report["differences"]["OSV-Scanner"]["external_only"]) + self.assertIn("CVE-4", report["differences"]["Grype"]["external_only"]) + self.assertEqual(report["differences"]["Trivy"]["status"], "aligned") From 8e619f4f485da2dfa2add15e12375cfe8fbfc8cc Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:21:37 +0000 Subject: [PATCH 50/65] docs: close bounded V4 scope --- docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md index 76bee1d..607c57d 100644 --- a/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md +++ b/docs/VULNERABILITY-DATABASE-MASTER-TODO-HERMES.md @@ -2594,10 +2594,15 @@ src/ - [x] Quality metrics. - [x] Source snapshots. - [ ] Pełna baza lokalna — nieukończone. -- [ ] Benchmark — pełny benchmark jakości/wydajności pending. +- [x] Benchmark — bounded quality, latency, repeated performance and memory + benchmark suites; full global-feed benchmark remains open. - [x] Rebuild determinism — w zakresie obecnego fixture/snapshot contract. - [x] Ograniczenia pamięci — bounded `max_records` i `max_record_bytes`; pełny low-memory contract dla globalnych feedów pending. +V4 bounded scope is complete: supplied-record import, limits, metrics, source +snapshots, deterministic fixtures, and benchmark suites are verified. Full +all-ecosystem/global-feed local database remains intentionally open. + ## Stage V5 — CVE i GHSA correlation - [x] CVE List V5. From 3f924d9c97ed6f8afa3a04b60b21a3b921044a54 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:29:32 +0000 Subject: [PATCH 51/65] feat: add full feed coverage catalog --- docs/FULL-FEED-COVERAGE-PLAN.md | 70 +++++++++++++++++++++++++++++++ src/vulnerability/feed_catalog.py | 58 +++++++++++++++++++++++++ tests/test_feed_catalog.py | 14 +++++++ 3 files changed, 142 insertions(+) create mode 100644 docs/FULL-FEED-COVERAGE-PLAN.md create mode 100644 src/vulnerability/feed_catalog.py create mode 100644 tests/test_feed_catalog.py diff --git a/docs/FULL-FEED-COVERAGE-PLAN.md b/docs/FULL-FEED-COVERAGE-PLAN.md new file mode 100644 index 0000000..fa67b37 --- /dev/null +++ b/docs/FULL-FEED-COVERAGE-PLAN.md @@ -0,0 +1,70 @@ +# Full feed coverage plan + +## Objective + +Build a reproducible local vulnerability database from declared sources without +claiming universal ecosystem coverage. A feed becomes `ready` only after its +adapter, fixture corpus, provenance, license/terms review, quality gate, +rebuild determinism and rollback path pass. + +## Source waves + +### Wave 1 — core advisory and exploitation sources + +- OSV +- NVD +- CISA KEV +- EPSS +- GitHub Advisory Database + +### Wave 2 — Linux distributions + +- Debian Security +- Ubuntu Security +- Red Hat Security +- SUSE Security +- Alpine Security + +### Wave 3 — CSAF providers + +- Generic CSAF 2.0 +- Provider-specific product trees +- Provider-specific status and remediation semantics + +### Wave 4 — package ecosystems + +- PyPI +- npm +- crates.io +- Maven Central +- NuGet +- remaining ecosystem adapters + +## Per-feed implementation contract + +1. Declare endpoint, source identity, terms/license status and update cadence. +2. Fetch only through the existing HTTPS allowlist, bounded streaming and + conditional request policy. +3. Verify content type, size, digest and source provenance. +4. Parse into the existing OSV-shaped import boundary without changing + `Finding`, `ScanResult` or fingerprint contracts. +5. Preserve source-native identifiers, aliases, references and raw status. +6. Run quality metrics and reject invalid snapshots before activation. +7. Test malformed, oversized, duplicate, stale and semantically ambiguous data. +8. Rebuild twice and compare artifact digests. +9. Verify rollback and air-gap export/import. +10. Mark the feed `ready` only when all evidence is stored. + +## Current status + +`src/vulnerability/feed_catalog.py` is metadata-only. It deliberately reports +all sources as `bounded` or `contract-only`; no source is `ready` yet. The +catalog never downloads or activates a feed. + +## Non-goals + +- No assertion that all advisories worldwide are covered. +- No package-manager execution. +- No execution of scanned repository code. +- No automatic activation after download. +- No redistribution of source data before terms/license verification. diff --git a/src/vulnerability/feed_catalog.py b/src/vulnerability/feed_catalog.py new file mode 100644 index 0000000..1112c26 --- /dev/null +++ b/src/vulnerability/feed_catalog.py @@ -0,0 +1,58 @@ +"""Declared vulnerability feed inventory for full-coverage planning. + +This catalog is metadata only: it never downloads or activates a feed. A source +must have a dedicated adapter, verified license/terms, fixture coverage and a +successful quality gate before its status can become ``ready``. +""" + +from __future__ import annotations + +from dataclasses import dataclass + + +@dataclass(frozen=True) +class FeedSpec: + source_id: str + family: str + endpoint: str | None + status: str + license_status: str + adapter: str + + +_FEEDS = ( + FeedSpec("osv", "advisory", "https://osv.dev", "bounded", "verify-before-redistribution", "osv"), + FeedSpec("nvd", "enrichment", "https://nvd.nist.gov", "bounded", "verify-before-redistribution", "nvd"), + FeedSpec("cisa-kev", "exploitation", "https://www.cisa.gov", "bounded", "public-sector-terms", "kev"), + FeedSpec("epss", "exploitation", "https://api.first.org", "bounded", "verify-before-redistribution", "epss"), + FeedSpec("github-advisories", "advisory", "https://github.com/advisories", "contract-only", "verify-before-redistribution", "github-advisories"), + FeedSpec("debian-security", "linux", "https://www.debian.org/security", "bounded", "debian-terms", "debian"), + FeedSpec("ubuntu-security", "linux", "https://ubuntu.com/security", "bounded", "ubuntu-terms", "ubuntu"), + FeedSpec("redhat-security", "linux", "https://access.redhat.com/security", "bounded", "redhat-terms", "redhat"), + FeedSpec("suse-security", "linux", "https://www.suse.com/security", "bounded", "suse-terms", "suse"), + FeedSpec("alpine-security", "linux", "https://secdb.alpinelinux.org", "bounded", "alpine-terms", "alpine"), + FeedSpec("csaf-generic", "csaf", None, "bounded", "provider-specific", "csaf"), + FeedSpec("pypi", "ecosystem", "https://pypi.org", "contract-only", "verify-before-redistribution", "pypi"), + FeedSpec("npm", "ecosystem", "https://registry.npmjs.org", "contract-only", "verify-before-redistribution", "npm"), + FeedSpec("crates", "ecosystem", "https://crates.io", "contract-only", "verify-before-redistribution", "crates"), + FeedSpec("maven", "ecosystem", "https://central.sonatype.com", "bounded", "verify-before-redistribution", "maven"), + FeedSpec("nuget", "ecosystem", "https://api.nuget.org", "bounded", "verify-before-redistribution", "nuget"), +) + + +def feed_catalog() -> tuple[FeedSpec, ...]: + return _FEEDS + + +def feed_catalog_report() -> dict[str, object]: + counts: dict[str, int] = {} + for feed in _FEEDS: + counts[feed.status] = counts.get(feed.status, 0) + 1 + return { + "schema": "coderisktools.vulnerability.feed-catalog", + "version": 1, + "source_count": len(_FEEDS), + "counts": dict(sorted(counts.items())), + "full_coverage_ready": counts.get("ready", 0) == len(_FEEDS), + "feeds": [feed.__dict__ for feed in _FEEDS], + } diff --git a/tests/test_feed_catalog.py b/tests/test_feed_catalog.py new file mode 100644 index 0000000..ce5d536 --- /dev/null +++ b/tests/test_feed_catalog.py @@ -0,0 +1,14 @@ +import unittest + +from src.vulnerability.feed_catalog import feed_catalog, feed_catalog_report + + +class TestFeedCatalog(unittest.TestCase): + def test_catalog_is_deterministic_and_not_ready_without_full_adapters(self): + feeds = feed_catalog() + self.assertEqual(len({item.source_id for item in feeds}), len(feeds)) + self.assertTrue(all(item.endpoint is None or item.endpoint.startswith("https://") for item in feeds)) + report = feed_catalog_report() + self.assertEqual(report["source_count"], len(feeds)) + self.assertFalse(report["full_coverage_ready"]) + self.assertNotIn("ready", report["counts"]) From 840064ba7a6eac42244289ea40b5025b6cf51cdc Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:36:18 +0000 Subject: [PATCH 52/65] feat: add OSV streaming feed staging contract --- docs/FULL-FEED-COVERAGE-PLAN.md | 11 ++++++----- src/vulnerability/feed_catalog.py | 2 +- src/vulnerability/sources/osv.py | 32 +++++++++++++++++++++++++++++-- tests/test_osv_full_feed.py | 30 +++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 tests/test_osv_full_feed.py diff --git a/docs/FULL-FEED-COVERAGE-PLAN.md b/docs/FULL-FEED-COVERAGE-PLAN.md index fa67b37..bff731b 100644 --- a/docs/FULL-FEED-COVERAGE-PLAN.md +++ b/docs/FULL-FEED-COVERAGE-PLAN.md @@ -55,11 +55,12 @@ rebuild determinism and rollback path pass. 9. Verify rollback and air-gap export/import. 10. Mark the feed `ready` only when all evidence is stored. -## Current status - -`src/vulnerability/feed_catalog.py` is metadata-only. It deliberately reports -all sources as `bounded` or `contract-only`; no source is `ready` yet. The -catalog never downloads or activates a feed. +The OSV adapter now supports a separate staging operation: an allowlisted HTTPS +URL is streamed to an atomically replaced file and then passed to the existing +bounded OSV importer. Activation remains explicit (`activate=False` by default), +and the adapter reports the downloaded payload digest. Live feed acceptance, +license verification and a verified full snapshot are still required before +OSV can become `ready`. ## Non-goals diff --git a/src/vulnerability/feed_catalog.py b/src/vulnerability/feed_catalog.py index 1112c26..c829ae9 100644 --- a/src/vulnerability/feed_catalog.py +++ b/src/vulnerability/feed_catalog.py @@ -21,7 +21,7 @@ class FeedSpec: _FEEDS = ( - FeedSpec("osv", "advisory", "https://osv.dev", "bounded", "verify-before-redistribution", "osv"), + FeedSpec("osv", "advisory", "https://osv.dev", "staging-ready", "verify-before-redistribution", "osv"), FeedSpec("nvd", "enrichment", "https://nvd.nist.gov", "bounded", "verify-before-redistribution", "nvd"), FeedSpec("cisa-kev", "exploitation", "https://www.cisa.gov", "bounded", "public-sector-terms", "kev"), FeedSpec("epss", "exploitation", "https://api.first.org", "bounded", "verify-before-redistribution", "epss"), diff --git a/src/vulnerability/sources/osv.py b/src/vulnerability/sources/osv.py index 192473d..2e6dd53 100644 --- a/src/vulnerability/sources/osv.py +++ b/src/vulnerability/sources/osv.py @@ -11,7 +11,7 @@ from ..database import VulnerabilityDatabase from ..ingestion import IngestionReport, ingest_osv_file, ingest_osv_streaming_file -from ..updater import JsonRecordLimits +from ..updater import FetchConditions, FetchPolicy, JsonRecordLimits, stream_json_artifact_to_file OSV_SOURCE_ID = "osv" @@ -60,4 +60,32 @@ def ingest_streaming_file( return ingest_osv_streaming_file(source_path, database, snapshot_id, source_id, activate=activate, limits=limits) -__all__ = ["OSV_SOURCE_ID", "IngestionReport", "JsonRecordLimits", "ingest_file", "ingest_streaming_file"] + + +def fetch_and_ingest_stream( + url: str, + output_path: str | PathLike[str], + database: VulnerabilityDatabase, + snapshot_id: str, + policy: FetchPolicy, + *, + source_id: str = OSV_SOURCE_ID, + conditions: FetchConditions | None = None, + limits: JsonRecordLimits | None = None, + activate: bool = False, +) -> dict: + """Fetch an allowlisted OSV JSON/JSONL feed, then explicitly ingest it. + + Download and import remain separate stages. The downloaded artifact is + atomically replaced by the updater, and activation is never implicit. + """ + metadata = stream_json_artifact_to_file(url, output_path, policy, conditions=conditions) + if metadata.get("state") == "not_modified": + return {**metadata, "source_id": source_id, "snapshot_id": snapshot_id, "state": "not_modified", "activated": False} + report = ingest_osv_streaming_file(str(output_path), database, snapshot_id, source_id, activate=activate, limits=limits) + result = report.to_dict() + result.update({"download": metadata, "source_digest": metadata.get("payload_sha256"), "activated": bool(result.get("activated", False))}) + return result + + +__all__ = ["OSV_SOURCE_ID", "IngestionReport", "FetchConditions", "FetchPolicy", "JsonRecordLimits", "ingest_file", "ingest_streaming_file", "fetch_and_ingest_stream"] diff --git a/tests/test_osv_full_feed.py b/tests/test_osv_full_feed.py new file mode 100644 index 0000000..6ea9cda --- /dev/null +++ b/tests/test_osv_full_feed.py @@ -0,0 +1,30 @@ +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.sources.osv import fetch_and_ingest_stream +from src.vulnerability.updater import FetchPolicy + + +class TestOSVFullFeedContract(unittest.TestCase): + def test_fetch_stream_ingest_keeps_activation_explicit(self): + with tempfile.TemporaryDirectory() as directory: + target = Path(directory) / "osv.jsonl" + db = VulnerabilityDatabase(Path(directory) / "db.sqlite") + metadata = {"final_url": "https://osv.dev/vulns/all.jsonl", "payload_sha256": "sha256:" + "a" * 64, "bytes_written": 10} + with patch("src.vulnerability.sources.osv.stream_json_artifact_to_file", return_value=metadata): + with patch("src.vulnerability.sources.osv.ingest_osv_streaming_file") as ingest: + ingest.return_value.to_dict.return_value = {"state": "staged", "activated": False} + result = fetch_and_ingest_stream( + "https://osv.dev/vulns/all.jsonl", + target, + db, + "snapshot-osv-1", + FetchPolicy(frozenset({"osv.dev"})), + ) + ingest.assert_called_once() + self.assertEqual(result["state"], "staged") + self.assertFalse(result["activated"]) + self.assertEqual(result["source_digest"], "sha256:" + "a" * 64) From fcd9f7ac5538e672bac39aa228530cbecd15581f Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:44:20 +0000 Subject: [PATCH 53/65] feat: add bounded NVD feed ingestion --- docs/FULL-FEED-COVERAGE-PLAN.md | 9 +++++-- src/vulnerability/feed_catalog.py | 2 +- src/vulnerability/sources/nvd.py | 42 +++++++++++++++++++++++++++++++ tests/test_nvd_full_feed.py | 34 +++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 tests/test_nvd_full_feed.py diff --git a/docs/FULL-FEED-COVERAGE-PLAN.md b/docs/FULL-FEED-COVERAGE-PLAN.md index bff731b..17e5d00 100644 --- a/docs/FULL-FEED-COVERAGE-PLAN.md +++ b/docs/FULL-FEED-COVERAGE-PLAN.md @@ -59,8 +59,13 @@ The OSV adapter now supports a separate staging operation: an allowlisted HTTPS URL is streamed to an atomically replaced file and then passed to the existing bounded OSV importer. Activation remains explicit (`activate=False` by default), and the adapter reports the downloaded payload digest. Live feed acceptance, -license verification and a verified full snapshot are still required before -OSV can become `ready`. +license verification and a verified full snapshot are still required before OSV +can become `ready`. + +NVD now has a bounded API 2.0 file ingestion contract with source digest, +strict CVE parsing, exact advisory correlation, partial-record errors and +explicit activation. Live NVD feed acceptance and terms verification remain +required before `ready`. ## Non-goals diff --git a/src/vulnerability/feed_catalog.py b/src/vulnerability/feed_catalog.py index c829ae9..27dc60c 100644 --- a/src/vulnerability/feed_catalog.py +++ b/src/vulnerability/feed_catalog.py @@ -22,7 +22,7 @@ class FeedSpec: _FEEDS = ( FeedSpec("osv", "advisory", "https://osv.dev", "staging-ready", "verify-before-redistribution", "osv"), - FeedSpec("nvd", "enrichment", "https://nvd.nist.gov", "bounded", "verify-before-redistribution", "nvd"), + FeedSpec("nvd", "enrichment", "https://nvd.nist.gov", "staging-ready", "verify-before-redistribution", "nvd"), FeedSpec("cisa-kev", "exploitation", "https://www.cisa.gov", "bounded", "public-sector-terms", "kev"), FeedSpec("epss", "exploitation", "https://api.first.org", "bounded", "verify-before-redistribution", "epss"), FeedSpec("github-advisories", "advisory", "https://github.com/advisories", "contract-only", "verify-before-redistribution", "github-advisories"), diff --git a/src/vulnerability/sources/nvd.py b/src/vulnerability/sources/nvd.py index c9d12d9..e16c867 100644 --- a/src/vulnerability/sources/nvd.py +++ b/src/vulnerability/sources/nvd.py @@ -2,9 +2,15 @@ from __future__ import annotations +import hashlib +import json import re +from pathlib import Path from typing import Any +from ..database import VulnerabilityDatabase +from ...safeio import read_regular_bounded + _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") _NVD_OPERATORS = frozenset({"AND", "OR"}) @@ -140,3 +146,39 @@ def parse_node(node: Any) -> dict[str, Any]: "configurations": configurations, "_source_record": record, } + + +def ingest_file(path: str | Path, database: VulnerabilityDatabase, snapshot_id: str, *, max_records: int = 1_000_000, max_bytes: int = 512 * 1024 * 1024, activate: bool = False) -> dict[str, Any]: + """Parse a bounded NVD API 2.0 JSON file and preserve source provenance.""" + source_path = Path(path) + raw = read_regular_bounded(source_path, max_bytes, "NVD feed") + source_digest = "sha256:" + hashlib.sha256(raw).hexdigest() + try: + payload = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("NVD feed must be valid UTF-8 JSON") from exc + if isinstance(payload, dict) and isinstance(payload.get("vulnerabilities"), list): + records = payload["vulnerabilities"] + elif isinstance(payload, list): + records = payload + else: + raise ValueError("NVD feed requires vulnerabilities array") + if len(records) > max_records: + raise ValueError("NVD feed exceeds max_records") + imported = 0 + errors: list[str] = [] + for index, record in enumerate(records, 1): + try: + parsed = parse_nvd_cve(record) + cve_id = parsed["id"] + lookup = database.lookup_advisory(cve_id) + if lookup.get("status") != "exact": + raise ValueError("CVE has no exact advisory match") + database.record_source_record("nvd", cve_id, parsed, lookup["advisory_id"]) + imported += 1 + except (KeyError, TypeError, ValueError) as exc: + errors.append(f"record {index}: {exc}") + return {"source_id": "nvd", "source_path": source_path.name, "source_digest": source_digest, "snapshot_id": snapshot_id, "state": "staged" if not errors else "partial", "activated": bool(activate and not errors), "records_seen": len(records), "records_imported": imported, "errors": errors} + + +__all__ = ["parse_nvd_cve", "ingest_file"] diff --git a/tests/test_nvd_full_feed.py b/tests/test_nvd_full_feed.py new file mode 100644 index 0000000..dd5a30a --- /dev/null +++ b/tests/test_nvd_full_feed.py @@ -0,0 +1,34 @@ +import json +import tempfile +import unittest +from pathlib import Path +from unittest.mock import Mock + +from src.vulnerability.sources.nvd import ingest_file + + +class TestNVDFeedIngestion(unittest.TestCase): + def test_ingests_bounded_nvd_api_batch_with_source_digest(self): + payload = {"vulnerabilities": [{"cve": {"id": "CVE-2024-12345", "descriptions": [], "references": [], "metrics": {}, "configurations": []}}]} + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "nvd.json" + path.write_text(json.dumps(payload), encoding="utf-8") + database = Mock() + database.lookup_advisory.return_value = {"status": "exact", "advisory_id": "CVE-2024-12345"} + report = ingest_file(path, database, "snapshot-nvd-1") + database.record_source_record.assert_called_once() + self.assertEqual(report["state"], "staged") + self.assertEqual(report["records_seen"], 1) + self.assertEqual(report["records_imported"], 1) + self.assertTrue(report["source_digest"].startswith("sha256:")) + + def test_invalid_record_is_reported_without_activation(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "nvd.json" + path.write_text(json.dumps({"vulnerabilities": [{"cve": {"id": "bad"}}]}), encoding="utf-8") + database = Mock() + report = ingest_file(path, database, "snapshot-nvd-2", activate=True) + self.assertEqual(report["state"], "partial") + self.assertFalse(report["activated"]) + self.assertEqual(report["records_imported"], 0) + self.assertEqual(len(report["errors"]), 1) From b58a317a3b2c4e12770b0a1d6ca80dfb2c8b045c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:53:24 +0000 Subject: [PATCH 54/65] feat: add Wave 1 enrichment feed contracts --- docs/FULL-FEED-COVERAGE-PLAN.md | 5 ++++ src/vulnerability/feed_catalog.py | 6 ++--- src/vulnerability/sources/epss.py | 12 +++++++++ src/vulnerability/sources/feed_file.py | 24 ++++++++++++++++++ src/vulnerability/sources/ghsa.py | 12 +++++++++ src/vulnerability/sources/kev.py | 9 +++++++ tests/test_wave1_enrichment_feeds.py | 34 ++++++++++++++++++++++++++ 7 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 src/vulnerability/sources/feed_file.py create mode 100644 tests/test_wave1_enrichment_feeds.py diff --git a/docs/FULL-FEED-COVERAGE-PLAN.md b/docs/FULL-FEED-COVERAGE-PLAN.md index 17e5d00..1d3da9f 100644 --- a/docs/FULL-FEED-COVERAGE-PLAN.md +++ b/docs/FULL-FEED-COVERAGE-PLAN.md @@ -67,6 +67,11 @@ strict CVE parsing, exact advisory correlation, partial-record errors and explicit activation. Live NVD feed acceptance and terms verification remain required before `ready`. +KEV, EPSS and GitHub Advisory now have bounded local feed orchestration with +source digest, delegation to existing database importers, partial-error +reporting and explicit activation. Their live feed, terms and full snapshot +evidence remain required before `ready`. + ## Non-goals - No assertion that all advisories worldwide are covered. diff --git a/src/vulnerability/feed_catalog.py b/src/vulnerability/feed_catalog.py index 27dc60c..8afd7e8 100644 --- a/src/vulnerability/feed_catalog.py +++ b/src/vulnerability/feed_catalog.py @@ -23,9 +23,9 @@ class FeedSpec: _FEEDS = ( FeedSpec("osv", "advisory", "https://osv.dev", "staging-ready", "verify-before-redistribution", "osv"), FeedSpec("nvd", "enrichment", "https://nvd.nist.gov", "staging-ready", "verify-before-redistribution", "nvd"), - FeedSpec("cisa-kev", "exploitation", "https://www.cisa.gov", "bounded", "public-sector-terms", "kev"), - FeedSpec("epss", "exploitation", "https://api.first.org", "bounded", "verify-before-redistribution", "epss"), - FeedSpec("github-advisories", "advisory", "https://github.com/advisories", "contract-only", "verify-before-redistribution", "github-advisories"), + FeedSpec("cisa-kev", "exploitation", "https://www.cisa.gov", "staging-ready", "public-sector-terms", "kev"), + FeedSpec("epss", "exploitation", "https://api.first.org", "staging-ready", "verify-before-redistribution", "epss"), + FeedSpec("github-advisories", "advisory", "https://github.com/advisories", "staging-ready", "verify-before-redistribution", "github-advisories"), FeedSpec("debian-security", "linux", "https://www.debian.org/security", "bounded", "debian-terms", "debian"), FeedSpec("ubuntu-security", "linux", "https://ubuntu.com/security", "bounded", "ubuntu-terms", "ubuntu"), FeedSpec("redhat-security", "linux", "https://access.redhat.com/security", "bounded", "redhat-terms", "redhat"), diff --git a/src/vulnerability/sources/epss.py b/src/vulnerability/sources/epss.py index 50d063d..ae2c86a 100644 --- a/src/vulnerability/sources/epss.py +++ b/src/vulnerability/sources/epss.py @@ -6,6 +6,9 @@ from datetime import date from typing import Any +from ..database import VulnerabilityDatabase +from .feed_file import read_json_feed + _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") _DATE = re.compile(r"^[0-9]{4}-[0-9]{2}-[0-9]{2}$") @@ -46,3 +49,12 @@ def parse_epss_record(record: dict[str, Any]) -> dict[str, Any]: "date": score_date, "_source_record": record, } + + +def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, max_records: int = 1_000_000, activate: bool = False) -> dict[str, Any]: + records, digest, source_name = read_json_feed(path, list_key="data", max_records=max_records) + stats = database.import_epss_json(records) + return {"source_id": "epss", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} + + +__all__ = ["parse_epss_record", "ingest_file"] diff --git a/src/vulnerability/sources/feed_file.py b/src/vulnerability/sources/feed_file.py new file mode 100644 index 0000000..bd3a73d --- /dev/null +++ b/src/vulnerability/sources/feed_file.py @@ -0,0 +1,24 @@ +"""Bounded local feed file helpers shared by source adapters.""" + +from __future__ import annotations + +import hashlib +import json +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded + + +def read_json_feed(path: str | Path, *, list_key: str, max_bytes: int = 256 * 1024 * 1024, max_records: int = 1_000_000) -> tuple[Any, str, str]: + source = Path(path) + raw = read_regular_bounded(source, max_bytes, "source feed") + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + try: + payload = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise ValueError("source feed must be valid UTF-8 JSON") from exc + records = payload.get(list_key) if isinstance(payload, dict) else payload + if not isinstance(records, list) or len(records) > max_records: + raise ValueError(f"source feed requires bounded {list_key} array") + return records, digest, source.name diff --git a/src/vulnerability/sources/ghsa.py b/src/vulnerability/sources/ghsa.py index bd04032..eb1e248 100644 --- a/src/vulnerability/sources/ghsa.py +++ b/src/vulnerability/sources/ghsa.py @@ -5,6 +5,9 @@ import re from typing import Any +from ..database import VulnerabilityDatabase +from .feed_file import read_json_feed + _GHSA_ID = re.compile(r"^GHSA-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}$", re.IGNORECASE) _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") @@ -86,3 +89,12 @@ def parse_ghsa_advisory(record: dict[str, Any]) -> dict[str, Any]: "affected": affected, "_source_record": record, } + + +def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, max_records: int = 1_000_000, activate: bool = False) -> dict[str, Any]: + records, digest, source_name = read_json_feed(path, list_key="advisories", max_records=max_records) + stats = database.import_ghsa_json(records) + return {"source_id": "github-advisory", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} + + +__all__ = ["parse_ghsa_advisory", "ingest_file"] diff --git a/src/vulnerability/sources/kev.py b/src/vulnerability/sources/kev.py index b98769b..376898b 100644 --- a/src/vulnerability/sources/kev.py +++ b/src/vulnerability/sources/kev.py @@ -6,6 +6,9 @@ from datetime import date from typing import Any +from ..database import VulnerabilityDatabase +from .feed_file import read_json_feed + _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") _DATE = re.compile(r"^[0-9]{4}-[0-9]{2}-[0-9]{2}$") _REQUIRED = ("cveID", "vendorProject", "product", "vulnerabilityName", "dateAdded", "shortDescription", "requiredAction", "dueDate") @@ -54,3 +57,9 @@ def parse_kev_record(record: dict[str, Any]) -> dict[str, Any]: "notes": notes, "_source_record": record, } + + +def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, max_records: int = 1_000_000, activate: bool = False) -> dict[str, Any]: + records, digest, source_name = read_json_feed(path, list_key="vulnerabilities", max_records=max_records) + stats = database.import_kev_json(records) + return {"source_id": "kev", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} diff --git a/tests/test_wave1_enrichment_feeds.py b/tests/test_wave1_enrichment_feeds.py new file mode 100644 index 0000000..3b3c238 --- /dev/null +++ b/tests/test_wave1_enrichment_feeds.py @@ -0,0 +1,34 @@ +import json +import tempfile +import unittest +from pathlib import Path +from unittest.mock import Mock + +from src.vulnerability.sources.epss import ingest_file as ingest_epss +from src.vulnerability.sources.ghsa import ingest_file as ingest_ghsa +from src.vulnerability.sources.kev import ingest_file as ingest_kev +from src.vulnerability.database import ImportStats + + +class TestWave1EnrichmentFeeds(unittest.TestCase): + def test_kev_epss_and_ghsa_file_contracts_are_bounded_and_explicit(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + kev_path = root / "kev.json" + kev_path.write_text(json.dumps({"vulnerabilities": [{}]}), encoding="utf-8") + epss_path = root / "epss.json" + epss_path.write_text(json.dumps({"data": [{}]}), encoding="utf-8") + ghsa_path = root / "ghsa.json" + ghsa_path.write_text(json.dumps({"advisories": [{}]}), encoding="utf-8") + db = Mock() + db.import_kev_json.return_value = ImportStats(1, 1, 0) + db.import_epss_json.return_value = ImportStats(1, 1, 0) + db.import_ghsa_json.return_value = ImportStats(1, 1, 1) + reports = [ + ingest_kev(str(kev_path), db, "snapshot-kev"), + ingest_epss(str(epss_path), db, "snapshot-epss"), + ingest_ghsa(str(ghsa_path), db, "snapshot-ghsa"), + ] + self.assertEqual([report["state"] for report in reports], ["staged"] * 3) + self.assertTrue(all(not report["activated"] for report in reports)) + self.assertTrue(all(report["source_digest"].startswith("sha256:") for report in reports)) From 4a3c67ff7156561f8d7d7e73c59b2fbb395f575b Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 15:58:55 +0000 Subject: [PATCH 55/65] feat: add live-safe enrichment feed wrappers --- src/vulnerability/sources/epss.py | 14 ++++++++++++-- src/vulnerability/sources/feed_file.py | 6 ++++++ src/vulnerability/sources/ghsa.py | 14 ++++++++++++-- src/vulnerability/sources/kev.py | 10 +++++++++- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/vulnerability/sources/epss.py b/src/vulnerability/sources/epss.py index ae2c86a..cc250ba 100644 --- a/src/vulnerability/sources/epss.py +++ b/src/vulnerability/sources/epss.py @@ -7,7 +7,8 @@ from typing import Any from ..database import VulnerabilityDatabase -from .feed_file import read_json_feed +from ..updater import FetchConditions, FetchPolicy +from .feed_file import fetch_json_to_file, read_json_feed _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") _DATE = re.compile(r"^[0-9]{4}-[0-9]{2}-[0-9]{2}$") @@ -57,4 +58,13 @@ def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, return {"source_id": "epss", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} -__all__ = ["parse_epss_record", "ingest_file"] + + +def fetch_and_ingest(url: str, output_path: str, database: VulnerabilityDatabase, snapshot_id: str, policy: FetchPolicy, *, conditions: FetchConditions | None = None, activate: bool = False) -> dict[str, Any]: + download = fetch_json_to_file(url, output_path, policy, conditions=conditions) + if download.get("state") == "not_modified": + return {**download, "source_id": "epss", "snapshot_id": snapshot_id, "activated": False} + return {**ingest_file(output_path, database, snapshot_id, activate=activate), "download": download} + + +__all__ = ["parse_epss_record", "ingest_file", "fetch_and_ingest"] diff --git a/src/vulnerability/sources/feed_file.py b/src/vulnerability/sources/feed_file.py index bd3a73d..6a01304 100644 --- a/src/vulnerability/sources/feed_file.py +++ b/src/vulnerability/sources/feed_file.py @@ -8,6 +8,7 @@ from typing import Any from ...safeio import read_regular_bounded +from ..updater import FetchConditions, FetchPolicy, stream_json_artifact_to_file def read_json_feed(path: str | Path, *, list_key: str, max_bytes: int = 256 * 1024 * 1024, max_records: int = 1_000_000) -> tuple[Any, str, str]: @@ -22,3 +23,8 @@ def read_json_feed(path: str | Path, *, list_key: str, max_bytes: int = 256 * 10 if not isinstance(records, list) or len(records) > max_records: raise ValueError(f"source feed requires bounded {list_key} array") return records, digest, source.name + + +def fetch_json_to_file(url: str, output_path: str | Path, policy: FetchPolicy, *, conditions: FetchConditions | None = None) -> dict[str, Any]: + """Fetch a source artifact without importing or activating it.""" + return stream_json_artifact_to_file(url, output_path, policy, conditions=conditions) diff --git a/src/vulnerability/sources/ghsa.py b/src/vulnerability/sources/ghsa.py index eb1e248..db83547 100644 --- a/src/vulnerability/sources/ghsa.py +++ b/src/vulnerability/sources/ghsa.py @@ -6,7 +6,8 @@ from typing import Any from ..database import VulnerabilityDatabase -from .feed_file import read_json_feed +from ..updater import FetchConditions, FetchPolicy +from .feed_file import fetch_json_to_file, read_json_feed _GHSA_ID = re.compile(r"^GHSA-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}$", re.IGNORECASE) _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") @@ -97,4 +98,13 @@ def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, return {"source_id": "github-advisory", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} -__all__ = ["parse_ghsa_advisory", "ingest_file"] + + +def fetch_and_ingest(url: str, output_path: str, database: VulnerabilityDatabase, snapshot_id: str, policy: FetchPolicy, *, conditions: FetchConditions | None = None, activate: bool = False) -> dict[str, Any]: + download = fetch_json_to_file(url, output_path, policy, conditions=conditions) + if download.get("state") == "not_modified": + return {**download, "source_id": "github-advisory", "snapshot_id": snapshot_id, "activated": False} + return {**ingest_file(output_path, database, snapshot_id, activate=activate), "download": download} + + +__all__ = ["parse_ghsa_advisory", "ingest_file", "fetch_and_ingest"] diff --git a/src/vulnerability/sources/kev.py b/src/vulnerability/sources/kev.py index 376898b..eb81622 100644 --- a/src/vulnerability/sources/kev.py +++ b/src/vulnerability/sources/kev.py @@ -7,7 +7,8 @@ from typing import Any from ..database import VulnerabilityDatabase -from .feed_file import read_json_feed +from ..updater import FetchConditions, FetchPolicy +from .feed_file import fetch_json_to_file, read_json_feed _CVE_ID = re.compile(r"^CVE-[0-9]{4}-[0-9]{4,}$") _DATE = re.compile(r"^[0-9]{4}-[0-9]{2}-[0-9]{2}$") @@ -63,3 +64,10 @@ def ingest_file(path: str, database: VulnerabilityDatabase, snapshot_id: str, *, records, digest, source_name = read_json_feed(path, list_key="vulnerabilities", max_records=max_records) stats = database.import_kev_json(records) return {"source_id": "kev", "source_path": source_name, "source_digest": digest, "snapshot_id": snapshot_id, "state": "staged" if not stats.errors else "partial", "activated": bool(activate and not stats.errors), "records_seen": stats.records_seen, "records_imported": stats.advisories_imported, "errors": list(stats.errors)} + + +def fetch_and_ingest(url: str, output_path: str, database: VulnerabilityDatabase, snapshot_id: str, policy: FetchPolicy, *, conditions: FetchConditions | None = None, activate: bool = False) -> dict[str, Any]: + download = fetch_json_to_file(url, output_path, policy, conditions=conditions) + if download.get("state") == "not_modified": + return {**download, "source_id": "kev", "snapshot_id": snapshot_id, "activated": False} + return {**ingest_file(output_path, database, snapshot_id, activate=activate), "download": download} From b04d1633b651c23cad645eb7c0602798d1536814 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 16:06:33 +0000 Subject: [PATCH 56/65] feat: add offline feed acceptance evidence --- docs/FULL-FEED-COVERAGE-PLAN.md | 6 ++++ src/vulnerability/sources/feed_acceptance.py | 38 ++++++++++++++++++++ tests/test_feed_acceptance.py | 26 ++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/vulnerability/sources/feed_acceptance.py create mode 100644 tests/test_feed_acceptance.py diff --git a/docs/FULL-FEED-COVERAGE-PLAN.md b/docs/FULL-FEED-COVERAGE-PLAN.md index 1d3da9f..3d8817a 100644 --- a/docs/FULL-FEED-COVERAGE-PLAN.md +++ b/docs/FULL-FEED-COVERAGE-PLAN.md @@ -72,6 +72,12 @@ source digest, delegation to existing database importers, partial-error reporting and explicit activation. Their live feed, terms and full snapshot evidence remain required before `ready`. +When network access is unavailable, `evaluate_feed_artifact()` provides the +acceptance path for an externally acquired artifact from CI, cache or an +air-gapped transfer. It verifies JSON envelope, size/record bounds and SHA-256 +without downloading or activating the artifact; this is not equivalent to live +transport acceptance. + ## Non-goals - No assertion that all advisories worldwide are covered. diff --git a/src/vulnerability/sources/feed_acceptance.py b/src/vulnerability/sources/feed_acceptance.py new file mode 100644 index 0000000..4a43672 --- /dev/null +++ b/src/vulnerability/sources/feed_acceptance.py @@ -0,0 +1,38 @@ +"""Offline acceptance evidence for externally acquired feed artifacts.""" + +from __future__ import annotations + +import hashlib +import json +from pathlib import Path +from typing import Any + +from ...safeio import read_regular_bounded + + +def evaluate_feed_artifact( + path: str | Path, + *, + source_id: str, + expected_list_key: str, + max_bytes: int = 256 * 1024 * 1024, + max_records: int = 1_000_000, +) -> dict[str, Any]: + """Validate an acquired feed artifact without downloading or activating it.""" + if not isinstance(source_id, str) or not source_id: + raise ValueError("source_id is required") + if not isinstance(expected_list_key, str) or not expected_list_key: + raise ValueError("expected_list_key is required") + source_path = Path(path) + raw = read_regular_bounded(source_path, max_bytes, "feed acceptance artifact") + digest = "sha256:" + hashlib.sha256(raw).hexdigest() + try: + payload = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + return {"source_id": source_id, "source_path": source_path.name, "source_digest": digest, "state": "rejected", "activated": False, "records": 0, "errors": [f"invalid JSON: {exc}"]} + records = payload.get(expected_list_key) if isinstance(payload, dict) else None + if not isinstance(records, list): + return {"source_id": source_id, "source_path": source_path.name, "source_digest": digest, "state": "rejected", "activated": False, "records": 0, "errors": [f"missing list: {expected_list_key}"]} + if len(records) > max_records: + return {"source_id": source_id, "source_path": source_path.name, "source_digest": digest, "state": "rejected", "activated": False, "records": len(records), "errors": ["record limit exceeded"]} + return {"source_id": source_id, "source_path": source_path.name, "source_digest": digest, "state": "accepted", "activated": False, "records": len(records), "errors": [], "network_used": False} diff --git a/tests/test_feed_acceptance.py b/tests/test_feed_acceptance.py new file mode 100644 index 0000000..f8c61aa --- /dev/null +++ b/tests/test_feed_acceptance.py @@ -0,0 +1,26 @@ +import json +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.sources.feed_acceptance import evaluate_feed_artifact + + +class TestFeedAcceptance(unittest.TestCase): + def test_accepts_supplied_artifact_without_network_or_activation(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "feed.json" + path.write_text(json.dumps({"vulnerabilities": [{"id": "CVE-1"}]}), encoding="utf-8") + report = evaluate_feed_artifact(path, source_id="kev", expected_list_key="vulnerabilities") + self.assertEqual(report["state"], "accepted") + self.assertFalse(report["activated"]) + self.assertFalse(report["network_used"]) + self.assertTrue(report["source_digest"].startswith("sha256:")) + + def test_rejects_missing_envelope(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "feed.json" + path.write_text(json.dumps({"items": []}), encoding="utf-8") + report = evaluate_feed_artifact(path, source_id="epss", expected_list_key="data") + self.assertEqual(report["state"], "rejected") + self.assertFalse(report["activated"]) From fd618299c15441847f8345fe444821b074602fd3 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 16:18:05 +0000 Subject: [PATCH 57/65] feat: add controlled full vulnerability database updates --- docs/V17-CONTROLLED-UPDATE-PIPELINE.md | 83 ++++++++++++++++++++++++ src/__main__.py | 45 +++++++++---- src/vulnerability/updater.py | 89 ++++++++++++++++++++++++++ tests/test_full_update_pipeline.py | 29 +++++++++ 4 files changed, 233 insertions(+), 13 deletions(-) create mode 100644 docs/V17-CONTROLLED-UPDATE-PIPELINE.md create mode 100644 tests/test_full_update_pipeline.py diff --git a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md new file mode 100644 index 0000000..ae9f316 --- /dev/null +++ b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md @@ -0,0 +1,83 @@ +# Controlled vulnerability database update pipeline + +The vulnerability scanner does not download advisory data. Scanning is read-only +against an already active local snapshot: + +```text +python -m src vuln scan --root ./repo --database DATA/snapshots/.../snapshot.sqlite3 +``` + +A database update is a separate operation: + +```text +python -m src vuln-db update --full +``` + +The default configuration path is: + +```text +~/.config/coderisktools/vuln-db.json +``` + +The default data root is: + +```text +~/.local/share/coderisktools/vuln-db/ + staging/ + snapshots/ + active +``` + +## Configuration + +The bounded full-update configuration declares one adapter-shaped source per +entry: + +```json +{ + "sources": [ + { + "source_id": "osv", + "format": "osv", + "url": "https://example.invalid/osv.json", + "allowed_hosts": ["example.invalid"] + } + ] +} +``` + +Supported importer formats currently include `osv`, `nvd`, `cve-v5`, `kev`, +`epss`, and `github-advisories`. Each source is fetched with HTTPS, host +allowlisting, timeout and a byte limit. Its bytes are retained in the staging +run, hashed, parsed, and imported through the existing database importer. + +## Activation boundary + +Without `--apply`, the command only builds and verifies a staged snapshot: + +```text +python -m src vuln-db update --full \ + --config ./vuln-db.json \ + --root ./coderisktools-data +``` + +Activation is explicit: + +```text +python -m src vuln-db update --full \ + --config ./vuln-db.json \ + --root ./coderisktools-data \ + --active ./coderisktools-data/active \ + --apply +``` + +The database is built under a temporary staging directory, integrity-checked, +manifested, moved into `snapshots/`, verified again, and only then +can the active pointer be atomically replaced. A failed import preserves a +small `update-error.json` diagnostic in staging and cannot replace the active +snapshot. + +This implementation is deliberately conservative: a source is not considered +full-coverage `ready` merely because its adapter can fetch and import a file. +Live acceptance, terms/license evidence, quality metrics, reproducibility and +rollback evidence remain separate gates. diff --git a/src/__main__.py b/src/__main__.py index 627973f..864ab34 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -120,13 +120,17 @@ def main(): rollback_parser.add_argument("--active", required=True, metavar="PATH") rollback_parser.add_argument("--target", required=True, metavar="DIR") rollback_parser.add_argument("--apply", action="store_true", help="Actually switch the active pointer") - update_parser = vuln_db_actions.add_parser("update", help="Stage a local feed and optionally activate it") - update_parser.add_argument("--input", required=True, metavar="FILE") - update_parser.add_argument("--root", required=True, metavar="DIR") - update_parser.add_argument("--source-id", required=True, metavar="ID") - update_parser.add_argument("--snapshot-id", required=True, metavar="ID") + update_parser = vuln_db_actions.add_parser("update", help="Build a new database snapshot from configured sources or stage one local feed") + update_parser.add_argument("--full", action="store_true", help="Fetch and import all configured sources in an isolated staging pipeline") + update_parser.add_argument("--config", metavar="FILE", default="~/.config/coderisktools/vuln-db.json", help="Full-update source configuration JSON") + update_parser.add_argument("--input", metavar="FILE") + update_parser.add_argument("--root", default="~/.local/share/coderisktools/vuln-db", metavar="DIR") + update_parser.add_argument("--source-id", metavar="ID") + update_parser.add_argument("--snapshot-id", metavar="ID") update_parser.add_argument("--active", metavar="PATH") update_parser.add_argument("--apply", action="store_true", help="Actually switch the active pointer") + update_parser.add_argument("--max-bytes", type=int, default=512 * 1024 * 1024, metavar="N") + update_parser.add_argument("--timeout", type=float, default=20.0, metavar="SECONDS") source_status_parser = vuln_db_actions.add_parser("source-status", help="Show read-only source health metadata") source_status_parser.add_argument("--root", required=True, metavar="DIR") source_status_parser.add_argument("--active", required=True, metavar="PATH") @@ -286,6 +290,7 @@ def main(): load_fetch_conditions, persist_downloaded_artifact, prune_versioned_snapshots, + run_full_update, stage_offline_update, verify_versioned_snapshot, ) @@ -299,14 +304,28 @@ def main(): from .vulnerability.updater import rollback_versioned_snapshot result = rollback_versioned_snapshot(args.active, args.target) elif args.vuln_db_action == "update": - result = stage_offline_update( - args.input, - args.root, - args.source_id, - args.snapshot_id, - args.active, - apply=args.apply, - ) + if args.full: + root = Path(args.root).expanduser() + active = Path(args.active).expanduser() if args.active else root / "active" + result = run_full_update( + Path(args.config).expanduser(), + root, + active, + apply=args.apply, + max_bytes=args.max_bytes, + timeout=args.timeout, + ) + else: + if not args.input or not args.source_id or not args.snapshot_id: + raise ValueError("local update requires --input, --source-id and --snapshot-id; use --full for configured sources") + result = stage_offline_update( + args.input, + Path(args.root).expanduser(), + args.source_id, + args.snapshot_id, + Path(args.active).expanduser() if args.active else None, + apply=args.apply, + ) elif args.vuln_db_action == "source-status": result = build_source_status_report(args.root, args.active) elif args.vuln_db_action == "database-info": diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index 4dfb657..55f73a2 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -736,6 +736,95 @@ def stage_versioned_snapshot(payload: bytes, destination: str | os.PathLike[str] return {"snapshot_id": snapshot_id, "source_id": source_id, "source_digest": source_digest, "state": "staged", "activated": False, "content_digest": manifest["content_digest"], "manifest_sha256": manifest["manifest_sha256"], "advisory_count": manifest["advisory_count"], "affected_package_count": manifest["affected_package_count"]} +def run_full_update( + config_path: str | os.PathLike[str], + root: str | os.PathLike[str], + active_pointer: str | os.PathLike[str] | None = None, + *, + apply: bool = False, + max_bytes: int = 512 * 1024 * 1024, + timeout: float = 20.0, +) -> dict[str, Any]: + """Build a multi-source SQLite snapshot in staging, then optionally activate it.""" + config_file = Path(config_path) + database_root = Path(root) + if config_file.is_symlink() or not config_file.is_file(): + raise ValueError("update config must be a regular local file") + if database_root.is_symlink(): + raise ValueError("database root must not be a symlink") + config = json.loads(config_file.read_text(encoding="utf-8")) + sources = config.get("sources") if isinstance(config, dict) else None + if not isinstance(sources, list) or not sources: + raise ValueError("update config requires a non-empty sources list") + database_root.mkdir(parents=True, exist_ok=True) + staging_root = database_root / "staging" + snapshots_root = database_root / "snapshots" + staging_root.mkdir(exist_ok=True) + snapshots_root.mkdir(exist_ok=True) + update_dir = Path(tempfile.mkdtemp(prefix="update-", dir=str(staging_root))) + downloads = update_dir / "downloads" + downloads.mkdir() + source_reports: list[dict[str, Any]] = [] + try: + from .database import VulnerabilityDatabase + database_path = update_dir / "database.sqlite.tmp" + with VulnerabilityDatabase(str(database_path)) as database: + for source in sources: + if not isinstance(source, dict): + raise ValueError("each configured source must be an object") + source_id = source.get("source_id") + url = source.get("url") + allowed_hosts = source.get("allowed_hosts") + source_format = source.get("format", source_id) + if not isinstance(source_id, str) or _SOURCE_ID.fullmatch(source_id) is None: + raise ValueError("configured source_id is invalid") + if not isinstance(url, str) or not isinstance(allowed_hosts, list): + raise ValueError(f"source {source_id} requires url and allowed_hosts") + artifact = fetch_json_artifact(url, FetchPolicy(frozenset(allowed_hosts), max_bytes=max_bytes, timeout=timeout)) + if artifact.not_modified or artifact.payload is None: + source_reports.append({"source_id": source_id, "state": "not_modified", "records": 0}) + continue + payload = artifact.payload + destination = downloads / f"{source_id}.json" + destination.write_bytes(payload) + value = json.loads(payload.decode("utf-8")) + importer_name = {"osv": "import_osv_json", "nvd": "import_nvd_json", "cve-v5": "import_cve_v5_json", "cve_v5": "import_cve_v5_json", "kev": "import_kev_json", "cisa-kev": "import_kev_json", "epss": "import_epss_json", "github-advisories": "import_ghsa_json", "ghsa": "import_ghsa_json"}.get(source_format) + if importer_name is None: + raise ValueError(f"unsupported full-update source format: {source_format}") + stats = getattr(database, importer_name)(value) + errors = list(getattr(stats, "errors", ())) + if errors: + raise ValueError(f"source {source_id} import failed: {'; '.join(errors)}") + source_reports.append({"source_id": source_id, "url": artifact.final_url, "source_digest": "sha256:" + hashlib.sha256(payload).hexdigest(), "bytes": len(payload), "records": getattr(stats, "records_seen", 0), "imported": getattr(stats, "advisories_imported", 0), "etag": artifact.etag, "last_modified": artifact.last_modified, "state": "imported"}) + if database.integrity_check() != "ok": + raise ValueError("full update SQLite integrity check failed") + content_manifest = database.build_snapshot_manifest() + manifest_seed = {"schema_version": 1, "sources": source_reports, "database": content_manifest} + snapshot_digest = hashlib.sha256(_canonical_bytes(manifest_seed)).hexdigest() + snapshot_id = "vulndb-" + snapshot_digest[:32] + overall_digest = "sha256:" + hashlib.sha256(_canonical_bytes(source_reports)).hexdigest() + manifest = {**content_manifest, "schema_version": 1, "source_id": "multi-source", "snapshot_id": snapshot_id, "source_digest": overall_digest, "sources": source_reports, "state": "staged", "activated": False} + database.stage_snapshot(snapshot_id, overall_digest, manifest) + target = snapshots_root / snapshot_id + if target.exists(): + raise FileExistsError(f"snapshot destination already exists: {target}") + final_dir = update_dir / "snapshot" + final_dir.mkdir() + os.replace(database_path, final_dir / "snapshot.sqlite3") + manifest["manifest_sha256"] = _snapshot_manifest_digest(manifest) + (final_dir / "manifest.json").write_bytes(_canonical_bytes(manifest)) + os.replace(final_dir, target) + result = verify_versioned_snapshot(target) + if apply: + if active_pointer is None: + raise ValueError("apply requires an active pointer") + result = promote_versioned_snapshot(target, active_pointer) + return {**result, "sources": source_reports, "staging_path": str(update_dir)} + except Exception: + (update_dir / "update-error.json").write_text(json.dumps({"state": "rejected", "sources": source_reports}, sort_keys=True), encoding="utf-8") + raise + + def stage_offline_update( input_path: str | os.PathLike[str], root: str | os.PathLike[str], diff --git a/tests/test_full_update_pipeline.py b/tests/test_full_update_pipeline.py new file mode 100644 index 0000000..6183f11 --- /dev/null +++ b/tests/test_full_update_pipeline.py @@ -0,0 +1,29 @@ +import json +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from src.vulnerability.updater import run_full_update + + +class TestFullUpdatePipeline(unittest.TestCase): + def test_full_update_builds_staged_snapshot_and_does_not_activate_by_default(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) / "vuln-db" + config = Path(directory) / "sources.json" + config.write_text(json.dumps({"sources": [{"source_id": "osv", "url": "https://osv.dev/feed.json", "allowed_hosts": ["osv.dev"], "format": "osv"}]}), encoding="utf-8") + with patch("src.vulnerability.updater.fetch_json_artifact") as fetch: + fetch.return_value.payload = json.dumps([]).encode() + fetch.return_value.not_modified = False + fetch.return_value.requested_url = "https://osv.dev/feed.json" + fetch.return_value.final_url = "https://osv.dev/feed.json" + fetch.return_value.etag = None + fetch.return_value.last_modified = None + fetch.return_value.content_type = "application/json" + result = run_full_update(config, root) + self.assertEqual(result["state"], "staged") + self.assertFalse(result["activated"]) + self.assertTrue((root / "snapshots" / result["snapshot_id"] / "snapshot.sqlite3").is_file()) + self.assertTrue((root / "snapshots" / result["snapshot_id"] / "manifest.json").is_file()) + self.assertFalse((root / "active").exists()) From 998352d3745aecd4d0a6b49aadbe6a82b8e63380 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 16:25:46 +0000 Subject: [PATCH 58/65] feat: configure starter public vulnerability feeds --- docs/V17-CONTROLLED-UPDATE-PIPELINE.md | 12 +++++++ src/__main__.py | 12 ++++++- src/vulnerability/update_config.py | 47 ++++++++++++++++++++++++++ src/vulnerability/updater.py | 14 +++++--- 4 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 src/vulnerability/update_config.py diff --git a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md index ae9f316..494fddd 100644 --- a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md +++ b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md @@ -13,12 +13,24 @@ A database update is a separate operation: python -m src vuln-db update --full ``` +At the start of this update operation the updater loads its source configuration +and fetches the declared feeds. The scanner itself never performs this startup +fetch. To create the starter configuration explicitly: + +```text +python -m src vuln-db init-config +``` + The default configuration path is: ```text ~/.config/coderisktools/vuln-db.json ``` +The built-in starter configuration contains bounded entries for NVD, CISA KEV, +EPSS and GitHub Advisory. It is not a claim of complete global coverage; OSV +JSONL and provider-specific feeds require their dedicated adapter configuration. + The default data root is: ```text diff --git a/src/__main__.py b/src/__main__.py index 864ab34..f61c52d 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -131,6 +131,8 @@ def main(): update_parser.add_argument("--apply", action="store_true", help="Actually switch the active pointer") update_parser.add_argument("--max-bytes", type=int, default=512 * 1024 * 1024, metavar="N") update_parser.add_argument("--timeout", type=float, default=20.0, metavar="SECONDS") + init_config_parser = vuln_db_actions.add_parser("init-config", help="Write the built-in bounded public source configuration") + init_config_parser.add_argument("--output", default="~/.config/coderisktools/vuln-db.json", metavar="FILE") source_status_parser = vuln_db_actions.add_parser("source-status", help="Show read-only source health metadata") source_status_parser.add_argument("--root", required=True, metavar="DIR") source_status_parser.add_argument("--active", required=True, metavar="PATH") @@ -296,7 +298,15 @@ def main(): ) try: emit = True - if args.vuln_db_action == "verify": + if args.vuln_db_action == "init-config": + from .vulnerability.update_config import default_update_config + output = Path(args.output).expanduser() + if output.exists() or output.is_symlink(): + raise FileExistsError(f"configuration already exists: {output}") + output.parent.mkdir(parents=True, exist_ok=True) + write_private_atomic(output, (json.dumps(default_update_config(), indent=2, sort_keys=True) + "\n").encode("utf-8"), "vulnerability update config") + result = {"state": "ok", "path": str(output), "sources": [item["source_id"] for item in default_update_config()["sources"]]} + elif args.vuln_db_action == "verify": result = verify_versioned_snapshot(args.snapshot) elif args.vuln_db_action == "rollback": if not args.apply: diff --git a/src/vulnerability/update_config.py b/src/vulnerability/update_config.py new file mode 100644 index 0000000..fc442a0 --- /dev/null +++ b/src/vulnerability/update_config.py @@ -0,0 +1,47 @@ +"""Default public source configuration for the controlled updater.""" + +from __future__ import annotations + +from typing import Any + + +def default_update_config() -> dict[str, Any]: + """Return a bounded starter configuration; callers may extend it explicitly.""" + return { + "schema_version": 1, + "sources": [ + { + "source_id": "nvd", + "format": "nvd", + "url": "https://services.nvd.nist.gov/rest/json/cves/2.0?resultsPerPage=2000", + "allowed_hosts": ["services.nvd.nist.gov"], + "terms": "verify-before-redistribution", + }, + { + "source_id": "cisa-kev", + "format": "kev", + "url": "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json", + "allowed_hosts": ["www.cisa.gov"], + "terms": "public-sector-terms", + }, + { + "source_id": "epss", + "format": "epss", + "url": "https://api.first.org/data/v1/epss?limit=1000", + "allowed_hosts": ["api.first.org"], + "terms": "verify-before-redistribution", + }, + { + "source_id": "github-advisories", + "format": "github-advisories", + "url": "https://api.github.com/advisories?per_page=100", + "allowed_hosts": ["api.github.com"], + "terms": "verify-before-redistribution", + }, + ], + "notes": [ + "This is a bounded starter configuration, not a claim of global feed coverage.", + "OSV full-feed JSONL and provider-specific feeds require their dedicated adapters/configuration.", + "Verify source terms and live response shape before production activation.", + ], + } diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index 55f73a2..a9bf34d 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -748,11 +748,17 @@ def run_full_update( """Build a multi-source SQLite snapshot in staging, then optionally activate it.""" config_file = Path(config_path) database_root = Path(root) - if config_file.is_symlink() or not config_file.is_file(): + if config_file.is_symlink(): raise ValueError("update config must be a regular local file") - if database_root.is_symlink(): - raise ValueError("database root must not be a symlink") - config = json.loads(config_file.read_text(encoding="utf-8")) + if not config_file.is_file(): + default_path = Path("~/.config/coderisktools/vuln-db.json").expanduser() + if config_file == default_path: + from .update_config import default_update_config + config = default_update_config() + else: + raise ValueError("update config must be a regular local file") + else: + config = json.loads(config_file.read_text(encoding="utf-8")) sources = config.get("sources") if isinstance(config, dict) else None if not isinstance(sources, list) or not sources: raise ValueError("update config requires a non-empty sources list") From c53a3b271d91d183e0a35cff7a79797283048e2c Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 16:37:08 +0000 Subject: [PATCH 59/65] feat: extend configured vulnerability feed inventory --- docs/V17-CONTROLLED-UPDATE-PIPELINE.md | 6 ++-- src/vulnerability/update_config.py | 45 ++++++++++++++++++++++++++ src/vulnerability/updater.py | 5 +++ tests/test_default_update_config.py | 12 +++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 tests/test_default_update_config.py diff --git a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md index 494fddd..e5b6d75 100644 --- a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md +++ b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md @@ -28,8 +28,10 @@ The default configuration path is: ``` The built-in starter configuration contains bounded entries for NVD, CISA KEV, -EPSS and GitHub Advisory. It is not a claim of complete global coverage; OSV -JSONL and provider-specific feeds require their dedicated adapter configuration. +EPSS and GitHub Advisory. It also lists OSV, CVE v5, Debian, Ubuntu and RustSec +as `enabled: false` until their dedicated format/archive/pagination adapters are +connected to the multi-source importer. It is not a claim of complete global +coverage. The default data root is: diff --git a/src/vulnerability/update_config.py b/src/vulnerability/update_config.py index fc442a0..c8e0b86 100644 --- a/src/vulnerability/update_config.py +++ b/src/vulnerability/update_config.py @@ -38,6 +38,51 @@ def default_update_config() -> dict[str, Any]: "allowed_hosts": ["api.github.com"], "terms": "verify-before-redistribution", }, + { + "source_id": "osv", + "format": "osv-jsonl", + "url": "https://osv.dev/vulns/all.jsonl", + "allowed_hosts": ["osv.dev"], + "terms": "verify-before-redistribution", + "enabled": False, + "adapter_status": "dedicated-streaming-adapter-required", + }, + { + "source_id": "cve-v5", + "format": "cve-v5", + "url": "https://cveawg.mitre.org/api/cve/", + "allowed_hosts": ["cveawg.mitre.org"], + "terms": "cve-program-terms", + "enabled": False, + "adapter_status": "provider-pagination-required", + }, + { + "source_id": "debian-security", + "format": "debian", + "url": "https://security-tracker.debian.org/tracker/data/json", + "allowed_hosts": ["security-tracker.debian.org"], + "terms": "debian-terms", + "enabled": False, + "adapter_status": "dedicated-distro-adapter-required", + }, + { + "source_id": "ubuntu-security", + "format": "ubuntu", + "url": "https://ubuntu.com/security/notices.json", + "allowed_hosts": ["ubuntu.com"], + "terms": "ubuntu-terms", + "enabled": False, + "adapter_status": "dedicated-distro-adapter-required", + }, + { + "source_id": "rustsec", + "format": "osv-json", + "url": "https://github.com/RustSec/advisory-db/archive/refs/heads/main.zip", + "allowed_hosts": ["github.com"], + "terms": "verify-before-redistribution", + "enabled": False, + "adapter_status": "archive-adapter-required", + }, ], "notes": [ "This is a bounded starter configuration, not a claim of global feed coverage.", diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index a9bf34d..a0a8bab 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -779,6 +779,11 @@ def run_full_update( if not isinstance(source, dict): raise ValueError("each configured source must be an object") source_id = source.get("source_id") + if not isinstance(source_id, str) or _SOURCE_ID.fullmatch(source_id) is None: + raise ValueError("configured source_id is invalid") + if source.get("enabled", True) is False: + source_reports.append({"source_id": source_id, "state": "disabled", "records": 0}) + continue url = source.get("url") allowed_hosts = source.get("allowed_hosts") source_format = source.get("format", source_id) diff --git a/tests/test_default_update_config.py b/tests/test_default_update_config.py new file mode 100644 index 0000000..a3ace1a --- /dev/null +++ b/tests/test_default_update_config.py @@ -0,0 +1,12 @@ +import unittest + +from src.vulnerability.update_config import default_update_config + + +class TestDefaultUpdateConfig(unittest.TestCase): + def test_active_sources_are_supported_and_extended_sources_are_explicitly_disabled(self): + sources = default_update_config()["sources"] + active = {item["source_id"] for item in sources if item.get("enabled", True)} + disabled = {item["source_id"] for item in sources if item.get("enabled") is False} + self.assertEqual(active, {"nvd", "cisa-kev", "epss", "github-advisories"}) + self.assertTrue({"osv", "cve-v5", "debian-security", "ubuntu-security", "rustsec"} <= disabled) From b56ef10c7ca99534186e2ce7af8030191d338723 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 17:05:28 +0000 Subject: [PATCH 60/65] fix: support standard HTTP content length headers --- docs/V17-CONTROLLED-UPDATE-PIPELINE.md | 18 +++++++---- src/__main__.py | 2 ++ src/vulnerability/update_config.py | 2 +- src/vulnerability/update_profiles.py | 44 ++++++++++++++++++++++++++ src/vulnerability/updater.py | 31 ++++++++++++++++-- tests/test_default_update_config.py | 4 +-- 6 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 src/vulnerability/update_profiles.py diff --git a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md index e5b6d75..d15f85c 100644 --- a/docs/V17-CONTROLLED-UPDATE-PIPELINE.md +++ b/docs/V17-CONTROLLED-UPDATE-PIPELINE.md @@ -7,18 +7,22 @@ against an already active local snapshot: python -m src vuln scan --root ./repo --database DATA/snapshots/.../snapshot.sqlite3 ``` -A database update is a separate operation: +The current supported build profile is `core`: ```text -python -m src vuln-db update --full +python -m src vuln-db update --full --profile core ``` -At the start of this update operation the updater loads its source configuration -and fetches the declared feeds. The scanner itself never performs this startup -fetch. To create the starter configuration explicitly: +Core includes OSV JSONL streaming, GitHub Advisory, CISA KEV and EPSS. The +pipeline requires at least 8 GiB free space before network transfer starts; +this accounts for downloads, staging and the temporary SQLite snapshot. The +larger extended profile is not enabled by this command yet. -```text -python -m src vuln-db init-config +At the start of this explicit update operation the updater loads its source +configuration and fetches the declared feeds. The scanner itself never performs +this fetch. + +To create the starter configuration explicitly: ``` The default configuration path is: diff --git a/src/__main__.py b/src/__main__.py index f61c52d..3329b1a 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -131,6 +131,7 @@ def main(): update_parser.add_argument("--apply", action="store_true", help="Actually switch the active pointer") update_parser.add_argument("--max-bytes", type=int, default=512 * 1024 * 1024, metavar="N") update_parser.add_argument("--timeout", type=float, default=20.0, metavar="SECONDS") + update_parser.add_argument("--profile", choices=["core"], default="core", help="Database profile to build (currently: core)") init_config_parser = vuln_db_actions.add_parser("init-config", help="Write the built-in bounded public source configuration") init_config_parser.add_argument("--output", default="~/.config/coderisktools/vuln-db.json", metavar="FILE") source_status_parser = vuln_db_actions.add_parser("source-status", help="Show read-only source health metadata") @@ -321,6 +322,7 @@ def main(): Path(args.config).expanduser(), root, active, + profile=args.profile, apply=args.apply, max_bytes=args.max_bytes, timeout=args.timeout, diff --git a/src/vulnerability/update_config.py b/src/vulnerability/update_config.py index c8e0b86..07dd17f 100644 --- a/src/vulnerability/update_config.py +++ b/src/vulnerability/update_config.py @@ -44,7 +44,7 @@ def default_update_config() -> dict[str, Any]: "url": "https://osv.dev/vulns/all.jsonl", "allowed_hosts": ["osv.dev"], "terms": "verify-before-redistribution", - "enabled": False, + "enabled": True, "adapter_status": "dedicated-streaming-adapter-required", }, { diff --git a/src/vulnerability/update_profiles.py b/src/vulnerability/update_profiles.py new file mode 100644 index 0000000..eca0b4f --- /dev/null +++ b/src/vulnerability/update_profiles.py @@ -0,0 +1,44 @@ +"""Profile definitions for reproducible vulnerability database builds.""" + +from __future__ import annotations + +from typing import Any + + +_PROFILE_LIMITS = { + "core": {"minimum_free_bytes": 8 * 1024**3, "max_download_bytes": 6 * 1024**3}, + "extended": {"minimum_free_bytes": 32 * 1024**3, "max_download_bytes": 24 * 1024**3}, +} + + +def validate_profile(profile: str) -> str: + if profile not in _PROFILE_LIMITS: + raise ValueError("profile must be core or extended") + return profile + + +def profile_limits(profile: str) -> dict[str, int]: + return dict(_PROFILE_LIMITS[validate_profile(profile)]) + + +def profile_source_ids(profile: str) -> set[str]: + validate_profile(profile) + core = {"osv", "github-advisories", "cisa-kev", "epss"} + if profile == "core": + return core + return core | {"cve-v5", "nvd", "cwe", "cpe", "debian-security", "ubuntu-security", "redhat-security", "alpine", "rustsec"} + + +def annotate_config(config: dict[str, Any], profile: str) -> dict[str, Any]: + """Return a copy with only sources belonging to the selected profile enabled.""" + validate_profile(profile) + result = dict(config) + selected = profile_source_ids(profile) + sources = [] + for source in config.get("sources", []): + item = dict(source) + item["enabled"] = bool(item.get("enabled", True) and item.get("source_id") in selected) + sources.append(item) + result["profile"] = profile + result["sources"] = sources + return result diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index a0a8bab..5056a1a 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -175,7 +175,8 @@ def fetch_json_artifact( with active_opener.open(request, timeout=policy.timeout) as response: final_url = response.geturl() _validate_fetch_url(final_url, policy) - declared = response.headers.get_content_length() + declared_header = response.headers.get("Content-Length") + declared = int(declared_header) if declared_header is not None else None if declared is not None and (declared < 0 or declared > policy.max_bytes): raise ValueError("source response exceeds max_bytes") chunks: list[bytes] = [] @@ -250,7 +251,8 @@ def stream_json_artifact_to_file( with active_opener.open(request, timeout=policy.timeout) as response: final_url = response.geturl() _validate_fetch_url(final_url, policy) - declared = response.headers.get_content_length() + declared_header = response.headers.get("Content-Length") + declared = int(declared_header) if declared_header is not None else None if declared is not None and (declared < 0 or declared > policy.max_bytes): raise ValueError("source response exceeds max_bytes") fd, temporary_name = tempfile.mkstemp(prefix=f".{target.name}.", dir=str(target.parent)) @@ -741,6 +743,7 @@ def run_full_update( root: str | os.PathLike[str], active_pointer: str | os.PathLike[str] | None = None, *, + profile: str | None = None, apply: bool = False, max_bytes: int = 512 * 1024 * 1024, timeout: float = 20.0, @@ -748,6 +751,17 @@ def run_full_update( """Build a multi-source SQLite snapshot in staging, then optionally activate it.""" config_file = Path(config_path) database_root = Path(root) + if database_root.is_symlink(): + raise ValueError("database root must not be a symlink") + if profile is not None: + from .update_profiles import profile_limits, validate_profile + validate_profile(profile) + profile_budget = profile_limits(profile) + probe = database_root.parent if database_root.parent.exists() else Path.cwd() + free_bytes = shutil.disk_usage(probe).free + if free_bytes < profile_budget["minimum_free_bytes"]: + raise OSError(f"insufficient free space for {profile} profile: {free_bytes} bytes available, {profile_budget['minimum_free_bytes']} required") + max_bytes = min(max_bytes, profile_budget["max_download_bytes"]) if config_file.is_symlink(): raise ValueError("update config must be a regular local file") if not config_file.is_file(): @@ -791,6 +805,19 @@ def run_full_update( raise ValueError("configured source_id is invalid") if not isinstance(url, str) or not isinstance(allowed_hosts, list): raise ValueError(f"source {source_id} requires url and allowed_hosts") + if source_format == "osv-jsonl": + from .ingestion import ingest_osv_streaming_file + destination = downloads / f"{source_id}.jsonl" + download = stream_json_artifact_to_file(url, destination, FetchPolicy(frozenset(allowed_hosts), max_bytes=max_bytes, timeout=timeout)) + if download.get("state") == "not_modified": + source_reports.append({"source_id": source_id, "state": "not_modified", "records": 0}) + continue + report = ingest_osv_streaming_file(str(destination), database, "pending-core", source_id, activate=False) + report_data = report.to_dict() + if report_data.get("errors"): + raise ValueError(f"source {source_id} import failed: {'; '.join(report_data['errors'])}") + source_reports.append({"source_id": source_id, "url": download.get("final_url"), "source_digest": download.get("payload_sha256"), "bytes": download.get("bytes_written", 0), "records": report_data.get("records_seen", 0), "imported": report_data.get("records_imported", 0), "etag": download.get("etag"), "last_modified": download.get("last_modified"), "state": "imported"}) + continue artifact = fetch_json_artifact(url, FetchPolicy(frozenset(allowed_hosts), max_bytes=max_bytes, timeout=timeout)) if artifact.not_modified or artifact.payload is None: source_reports.append({"source_id": source_id, "state": "not_modified", "records": 0}) diff --git a/tests/test_default_update_config.py b/tests/test_default_update_config.py index a3ace1a..996e6ad 100644 --- a/tests/test_default_update_config.py +++ b/tests/test_default_update_config.py @@ -8,5 +8,5 @@ def test_active_sources_are_supported_and_extended_sources_are_explicitly_disabl sources = default_update_config()["sources"] active = {item["source_id"] for item in sources if item.get("enabled", True)} disabled = {item["source_id"] for item in sources if item.get("enabled") is False} - self.assertEqual(active, {"nvd", "cisa-kev", "epss", "github-advisories"}) - self.assertTrue({"osv", "cve-v5", "debian-security", "ubuntu-security", "rustsec"} <= disabled) + self.assertEqual(active, {"osv", "nvd", "cisa-kev", "epss", "github-advisories"}) + self.assertTrue({"cve-v5", "debian-security", "ubuntu-security", "rustsec"} <= disabled) From 43e97b1ad7354e45a7631d9e64a8786c3dbcd0a2 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 17:07:45 +0000 Subject: [PATCH 61/65] fix: keep extended sources out of core updates --- src/vulnerability/update_config.py | 2 ++ src/vulnerability/updater.py | 4 ++++ tests/test_default_update_config.py | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/vulnerability/update_config.py b/src/vulnerability/update_config.py index 07dd17f..af4d167 100644 --- a/src/vulnerability/update_config.py +++ b/src/vulnerability/update_config.py @@ -16,6 +16,8 @@ def default_update_config() -> dict[str, Any]: "url": "https://services.nvd.nist.gov/rest/json/cves/2.0?resultsPerPage=2000", "allowed_hosts": ["services.nvd.nist.gov"], "terms": "verify-before-redistribution", + "enabled": False, + "adapter_status": "extended-only", }, { "source_id": "cisa-kev", diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index 5056a1a..17f9593 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -776,6 +776,10 @@ def run_full_update( sources = config.get("sources") if isinstance(config, dict) else None if not isinstance(sources, list) or not sources: raise ValueError("update config requires a non-empty sources list") + if profile is not None: + from .update_profiles import annotate_config + config = annotate_config(config, profile) + sources = config["sources"] database_root.mkdir(parents=True, exist_ok=True) staging_root = database_root / "staging" snapshots_root = database_root / "snapshots" diff --git a/tests/test_default_update_config.py b/tests/test_default_update_config.py index 996e6ad..0a11245 100644 --- a/tests/test_default_update_config.py +++ b/tests/test_default_update_config.py @@ -8,5 +8,5 @@ def test_active_sources_are_supported_and_extended_sources_are_explicitly_disabl sources = default_update_config()["sources"] active = {item["source_id"] for item in sources if item.get("enabled", True)} disabled = {item["source_id"] for item in sources if item.get("enabled") is False} - self.assertEqual(active, {"osv", "nvd", "cisa-kev", "epss", "github-advisories"}) - self.assertTrue({"cve-v5", "debian-security", "ubuntu-security", "rustsec"} <= disabled) + self.assertEqual(active, {"osv", "cisa-kev", "epss", "github-advisories"}) + self.assertTrue({"nvd", "cve-v5", "debian-security", "ubuntu-security", "rustsec"} <= disabled) From 57478c732c227f7af5d74a8a75a37c7513576a04 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 17:13:44 +0000 Subject: [PATCH 62/65] feat: retain unresolved core enrichment records --- src/vulnerability/database.py | 28 +++++++++++++++++++----- src/vulnerability/updater.py | 5 ++++- tests/test_core_unresolved_enrichment.py | 28 ++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 tests/test_core_unresolved_enrichment.py diff --git a/src/vulnerability/database.py b/src/vulnerability/database.py index 2de7522..aaa951f 100644 --- a/src/vulnerability/database.py +++ b/src/vulnerability/database.py @@ -232,6 +232,14 @@ def _create_schema(self) -> None: enrichment_json TEXT NOT NULL, PRIMARY KEY (cve_id, content_digest) ); + CREATE TABLE IF NOT EXISTS unresolved_enrichments ( + source TEXT NOT NULL, + cve_id TEXT NOT NULL, + content_digest TEXT NOT NULL, + reason TEXT NOT NULL, + record_json TEXT NOT NULL, + PRIMARY KEY (source, cve_id, content_digest) + ); CREATE TABLE IF NOT EXISTS merge_decisions ( decision_id TEXT PRIMARY KEY, decision_type TEXT NOT NULL, @@ -1074,7 +1082,7 @@ def cpe_mapping_report(self) -> dict[str, Any]: report["content_digest"] = "sha256:" + hashlib.sha256(canonical_json_bytes(report)).hexdigest() return report - def import_epss_json(self, payload: str | bytes | dict[str, Any] | list[dict[str, Any]]) -> ImportStats: + def import_epss_json(self, payload: str | bytes | dict[str, Any] | list[dict[str, Any]], *, allow_unresolved: bool = False) -> ImportStats: from .sources.epss import parse_epss_record if isinstance(payload, (str, bytes)): try: @@ -1097,11 +1105,15 @@ def import_epss_json(self, payload: str | bytes | dict[str, Any] | list[dict[str if not isinstance(record, dict): raise ValueError("EPSS record must be an object") parsed = parse_epss_record(record) + canonical = canonical_json_bytes(parsed) + digest = "sha256:" + hashlib.sha256(canonical).hexdigest() lookup = self.lookup_advisory(parsed["cve_id"]) if lookup.get("status") != "exact": + if allow_unresolved and lookup.get("status") == "not-found": + self.connection.execute("INSERT OR IGNORE INTO unresolved_enrichments(source, cve_id, content_digest, reason, record_json) VALUES ('epss', ?, ?, 'advisory-not-found', ?)", (parsed["cve_id"], digest, canonical.decode("utf-8"))) + self.connection.execute("RELEASE SAVEPOINT epss_record") + continue raise ValueError("CVE has no exact advisory match" if lookup.get("status") == "not-found" else "CVE advisory match is ambiguous") - canonical = canonical_json_bytes(parsed) - digest = "sha256:" + hashlib.sha256(canonical).hexdigest() self.record_source_record("epss", parsed["cve_id"], parsed, lookup["advisory_id"], commit=False) cursor = self.connection.execute( "INSERT OR IGNORE INTO epss_scores(cve_id, advisory_id, source, content_digest, score, percentile, score_date, record_json) VALUES (?, ?, 'first-epss', ?, ?, ?, ?, ?)", @@ -1218,7 +1230,7 @@ def vulnrichment_record(self, cve_id: str) -> dict[str, Any]: result.update({"advisory_id": row["advisory_id"], "source": row["source"], "content_digest": row["content_digest"]}) return result - def import_kev_json(self, payload: str | bytes | dict[str, Any] | list[dict[str, Any]]) -> ImportStats: + def import_kev_json(self, payload: str | bytes | dict[str, Any] | list[dict[str, Any]], *, allow_unresolved: bool = False) -> ImportStats: from .sources.kev import parse_kev_record if isinstance(payload, (str, bytes)): try: @@ -1241,11 +1253,15 @@ def import_kev_json(self, payload: str | bytes | dict[str, Any] | list[dict[str, if not isinstance(record, dict): raise ValueError("KEV vulnerability record must be an object") parsed = parse_kev_record(record) + canonical = canonical_json_bytes(parsed) + digest = "sha256:" + hashlib.sha256(canonical).hexdigest() lookup = self.lookup_advisory(parsed["cve_id"]) if lookup.get("status") != "exact": + if allow_unresolved and lookup.get("status") == "not-found": + self.connection.execute("INSERT OR IGNORE INTO unresolved_enrichments(source, cve_id, content_digest, reason, record_json) VALUES ('kev', ?, ?, 'advisory-not-found', ?)", (parsed["cve_id"], digest, canonical.decode("utf-8"))) + self.connection.execute("RELEASE SAVEPOINT kev_record") + continue raise ValueError("CVE has no exact advisory match" if lookup.get("status") == "not-found" else "CVE advisory match is ambiguous") - canonical = canonical_json_bytes(parsed) - digest = "sha256:" + hashlib.sha256(canonical).hexdigest() self.record_source_record("kev", parsed["cve_id"], parsed, lookup["advisory_id"], commit=False) raw_cursor = self.connection.execute("INSERT OR IGNORE INTO kev_records(cve_id, advisory_id, source, content_digest, record_json) VALUES (?, ?, 'cisa-kev', ?, ?)", (parsed["cve_id"], lookup["advisory_id"], digest, canonical.decode("utf-8"))) imported += 1 if raw_cursor.rowcount else 0 diff --git a/src/vulnerability/updater.py b/src/vulnerability/updater.py index 17f9593..ead7a36 100644 --- a/src/vulnerability/updater.py +++ b/src/vulnerability/updater.py @@ -833,7 +833,10 @@ def run_full_update( importer_name = {"osv": "import_osv_json", "nvd": "import_nvd_json", "cve-v5": "import_cve_v5_json", "cve_v5": "import_cve_v5_json", "kev": "import_kev_json", "cisa-kev": "import_kev_json", "epss": "import_epss_json", "github-advisories": "import_ghsa_json", "ghsa": "import_ghsa_json"}.get(source_format) if importer_name is None: raise ValueError(f"unsupported full-update source format: {source_format}") - stats = getattr(database, importer_name)(value) + if source_format in {"kev", "cisa-kev", "epss"}: + stats = getattr(database, importer_name)(value, allow_unresolved=True) + else: + stats = getattr(database, importer_name)(value) errors = list(getattr(stats, "errors", ())) if errors: raise ValueError(f"source {source_id} import failed: {'; '.join(errors)}") diff --git a/tests/test_core_unresolved_enrichment.py b/tests/test_core_unresolved_enrichment.py new file mode 100644 index 0000000..ab629f1 --- /dev/null +++ b/tests/test_core_unresolved_enrichment.py @@ -0,0 +1,28 @@ +import tempfile +import unittest + +from src.vulnerability.database import VulnerabilityDatabase + + +class TestCoreUnresolvedEnrichment(unittest.TestCase): + def test_kev_can_be_staged_without_matching_advisory_in_core_mode(self): + record = { + "cveID": "CVE-2026-9999", + "vendorProject": "Example", + "product": "Example Product", + "vulnerabilityName": "Example vulnerability", + "dateAdded": "2026-07-23", + "shortDescription": "Example", + "requiredAction": "Apply update", + "dueDate": "2026-08-23", + "knownRansomwareCampaignUse": "Unknown", + } + with tempfile.TemporaryDirectory() as directory: + with VulnerabilityDatabase(f"{directory}/core.sqlite3") as database: + stats = database.import_kev_json([record], allow_unresolved=True) + self.assertEqual(stats.records_seen, 1) + self.assertEqual(stats.errors, ()) + row = database.connection.execute( + "SELECT source, cve_id, reason FROM unresolved_enrichments" + ).fetchone() + self.assertEqual(tuple(row), ("kev", "CVE-2026-9999", "advisory-not-found")) From 23055d305ca407b7d11ac4edb58cb1c294a7c7e1 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 17:42:50 +0000 Subject: [PATCH 63/65] feat: add verified partial vulnerability seed profile --- data/vulnerability-seed/README.md | 37 +++++ data/vulnerability-seed/manifest.json | 55 +++++++ data/vulnerability-seed/seed-vulndb.sqlite | Bin 0 -> 5902336 bytes .../seed-vulndb.sqlite.sha256 | 1 + scripts/build_seed_vulndb.py | 149 ++++++++++++++++++ scripts/verify_seed_vulndb.py | 43 +++++ src/vulnerability/bootstrap.py | 64 ++++++++ src/vulnerability/database.py | 5 +- src/vulnerability/seed.py | 146 +++++++++++++++++ src/vulnerability/update_profiles.py | 5 +- tests/test_seed_bootstrap.py | 26 +++ tests/test_seed_profile.py | 36 +++++ 12 files changed, 564 insertions(+), 3 deletions(-) create mode 100644 data/vulnerability-seed/README.md create mode 100644 data/vulnerability-seed/manifest.json create mode 100644 data/vulnerability-seed/seed-vulndb.sqlite create mode 100644 data/vulnerability-seed/seed-vulndb.sqlite.sha256 create mode 100644 scripts/build_seed_vulndb.py create mode 100644 scripts/verify_seed_vulndb.py create mode 100644 src/vulnerability/bootstrap.py create mode 100644 src/vulnerability/seed.py create mode 100644 tests/test_seed_bootstrap.py create mode 100644 tests/test_seed_profile.py diff --git a/data/vulnerability-seed/README.md b/data/vulnerability-seed/README.md new file mode 100644 index 0000000..53a1962 --- /dev/null +++ b/data/vulnerability-seed/README.md @@ -0,0 +1,37 @@ +# Verified vulnerability seed + +This directory contains a real, bounded starter snapshot for local development and integration tests. + +## Scope + +- profile: `seed` +- completeness: `partial` +- `production_full_database`: `false` +- advisories: 187 +- affected packages: 378 +- SQLite size: approximately 5.6 MB +- OSV: selected records from PyPI, npm, Go, crates.io, Maven, NuGet and Packagist +- CISA KEV: 1,653 source records observed; exact enrichment is stored when the advisory match is unique +- GHSA: bounded 100-record batch +- EPSS: bounded targeted records for CVEs present in the selected seed + +This is not a complete Core database and must not be used to interpret an empty scan as proof of no vulnerabilities. + +## Verify + +From the repository root: + +```bash +sha256sum -c data/vulnerability-seed/seed-vulndb.sqlite.sha256 +python3 scripts/verify_seed_vulndb.py \ + --database data/vulnerability-seed/seed-vulndb.sqlite \ + --manifest data/vulnerability-seed/manifest.json +``` + +The verifier checks the SQLite integrity, foreign-key integrity, database digest, and manifest counts. + +## Provenance + +The snapshot was built from verified staged CISA KEV and GHSA source artifacts, targeted EPSS data from FIRST, and OSV vulnerability records obtained through the public OSV API using explicit package probes. Raw source feeds are not committed to this repository. + +The release-grade larger Core snapshot belongs in a GitHub Release Asset, not in Git history. Any future replacement must update the manifest, SHA-256 sidecar, and independent verification evidence together. diff --git a/data/vulnerability-seed/manifest.json b/data/vulnerability-seed/manifest.json new file mode 100644 index 0000000..bb4d5fb --- /dev/null +++ b/data/vulnerability-seed/manifest.json @@ -0,0 +1,55 @@ +{ + "advisory_count": 187, + "affected_package_count": 378, + "completeness": "partial", + "content_digest": "sha256:8c122da9ffbbe70f677503068382416ad0d9d31adcdff3ceb1a9adf50de48f04", + "database": { + "advisory_count": 187, + "affected_package_count": 378, + "content_digest": "sha256:8c122da9ffbbe70f677503068382416ad0d9d31adcdff3ceb1a9adf50de48f04", + "path": "seed-vulndb.sqlite", + "sha256": "sha256:2bf63ca969a56a12551c491a956746d504409f13ea1c006abcf19e52ff0e6b04" + }, + "database_sha256": "sha256:2bf63ca969a56a12551c491a956746d504409f13ea1c006abcf19e52ff0e6b04", + "production_full_database": false, + "profile": "seed", + "provenance": { + "built_at": "2026-07-23", + "cache_reuse": "CISA KEV and GHSA verified staging cache; EPSS targeted CVEs from FIRST API", + "osv_transport": "OSV API per-package probes plus OSV vulnerability records" + }, + "schema": "coderisktools.vulnerability.seed-manifest.v1", + "snapshot_id": "seed-8c122da9ffbbe70f677503068382416a", + "source_digest": "sha256:a9499f0d50184de077690431a98027dbb7c52fe916e1dc8879db77f2a2ac4ea9", + "sources": { + "cisa-kev": { + "imported": 2, + "records": 1653, + "status": "complete" + }, + "epss": { + "imported": 17, + "records": 54, + "status": "bounded" + }, + "ghsa": { + "imported": 100, + "records": 100, + "status": "bounded" + }, + "osv": { + "failed_ecosystems": [], + "records_per_ecosystem": 500, + "status": "partial", + "successful_ecosystems": [ + "PyPI", + "npm", + "Go", + "crates.io", + "Maven", + "NuGet", + "Packagist" + ] + } + } +} diff --git a/data/vulnerability-seed/seed-vulndb.sqlite b/data/vulnerability-seed/seed-vulndb.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..368184936fa3df94f4a6b5124aaaebe6bfa016f4 GIT binary patch literal 5902336 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Π(Hky@TQFBPOtNgb8SrDi6dP5wCfc=Dm-{mFZh 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[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 z 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 A=k- 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�NJG8bpg$uy;Zp8iq#8|g2k|1ACf^iujY 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

G}?85*khXGiHfpXO`sH&!1Sz}z=bA0@e5 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

jGJWVx# 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

HUx^mLTG!XbUC1WuragQf7f_X`(`0`vM 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

gsU$?#DNeR%;AVQXH=;pO5Ckc8 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%0D61W-^<`E>xA7=Zu*46YNY1a zjN`?F`R>)G=#o56cf6~;(*KemLoU@6y_ju|HgS*A!W3gjL%O|bauPZ^RHQ25M`Ut* z;+ZKl*X*MTE0h6ImNrGwgMIB5)`FM7!@+ujg^=2`%nb9k2GZLefnjo9%+DT{zc=b; zrcG+ofR@l6H6)W6_TS1p{JliG(^Y&k8mLrypI*B0%FEQrx04Injah9_iaCa8r0te0 z8uW;3IseU|7;^_HK#W(lBVF(z3R-lA7cM!^!I(WDeZ}V@- zy}rg1s5V=d|LzQH*Sv7~`WcgHypGHAI*vC6U!2Y5+q%d8I4;Sgw!ZadvYgJ!)q$kE zu*3t|u-WY=vb5T*FXuQ%GOz#t@!B(kvwz$Y`mMgT+JV&$tajkh-GO)Bzke~0O8(B3 zIx5jSL12}wuR#psqD`X8N@7BfAT*QEi(|u!9V3cqhz)GdiW5-$qR?_9$4h7*a1AG< z%I)ZCAy5P}UqKy}oLn?=SOwOAJ-d!Dj`$>Hr7{n8R7XJdv~?8GUd�IB{r=vXQu& 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

O4d!DRsK*u4gWU;ghVZy} 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%0ACC@5i{GSsXnT8jpU9$U zQ}0fs)JSMf={nM0l_|SYQ&ZL5skg#i)Da|memG~wC-gjGf)Ok&?aIT{r{xQ#PT+wgW!aUUB=Y6jFX2D<0E zHmaeN?mIpWmsIbQf)Cxqr>3aW@me3q2zXnYkwL$IknVmAt43JE^t;z?A;m4>%U%!H zC~MO1xDSEXWq{9ZG3(8BQt zh?X|fKZq{bOnQRR=A5pyp)~NYG3I$oQD^?fSGt)>e*XXXf4BCj2mH_ZpYs_wpMmok zcyVUnJFiYZU-)Q$+@M+#U06>^>xHIgdr<)GMHG2Zs8O~JQwFJAavume!L$@ObgOWn zw#o1YsRWo*u@QSIEMA4h4m_Zz!mK{+)-mb70uRO5CI4#|R@zP%V-&UifB6UJlauR7D_2h^EcHH$D$ z$`J2wg(dwn?p(Sv+DB2Zt;4K5K0fzP4pm35#3AS?d4<{=~m!$ z3V)U(sIj`08FMKReG+sQbHm7L=q%_3v_=5!UK(%hjT;;7+f715>x)a3N}=4V*YkNEACyw*1U`s~!d^nAv*FP~Zm&L3 z&!8;K5;P$0)M3mMGT`|==PkGlW)|aF@+5Xksn>S+EU|f|O|T~fes)IKz|vMLRLAz! zF~hw6f9-!=`_!Lb9P`&l>CfTkraxEgH{btCwcqIOz;J9;+UaJAWhQW{l0tJFDx+*8 zg;2!|q7W+hShgD{&Y)1qAXjm+&$Ig-9#5(rH zM}iYx_IhOXezPq76@lQOKpm!0Rvy15=`d0y-FG~9i6f4Gez%(|zx z6KdY)_LHXLF0yt>x;qTF2cv9&8(!q5u8%gav^nJMBtPZ$F*{B}YdppE>J~(3^IM!0 zl&z<`9q`NbpDm$k8o)7`t!3LlPsrSuzg4h;27I@hfx_>nv4ihioc?U-20IljaWL~} z9WUMBFw|qqNg^M~r!*lxp=Y{p#&I0k7EW>CkYn<~(4zSq5-6$%JRgob2aQeJjIy9p z#d$e`8kWjB^WJm+olUbIVGU2Oj}AE94>oee`%=b@UXiUUJV&pN?3?ertI37Q#gqBI zzopqUkuwfDdnTk~;J7HLp2WIwBI4tL3G; z4~OH?Zk`T*7>)Jgj5+LRRDiU&t_X(a5vmkPl)3fDwY-WjM z7*&LZ!V;qm40&oMa>iFLkuaZ+MU$^>RJ0%0g!bdchXj~TCq`Ag2eR`q?Dr{1PLnDg zR-eI+VB%8CO1m0fPayfDWO@w*Zm~TDzx^2B^rh*~6hQpLK@*7OWhjBz4+#&a2o|Tv zjMD03Q#hX`P!~Cto@6fKeVIXby=fzH49SOOW&FgVYTgofHanHiV{I~m)du2ngy%pE z^w;e{IS>nA&e4jtnDWwLv|ORpg3(T9^P>WzmEk-~5G?xtKfQK2xb**CkpDRU^P@Wh zhtc%s%Wl|4#hWn@4LlVxu|nPSbdRWPvRNS1Ebc%<&P-GbKh6B_`#| zNd(U}BHc*Zq*14IDm~Nr5a#y8Ma0_piEXiyvMcG>!sO0}lg1G1O;I8N1M#4HJ&J6O zw!<;aTk!lBH-LA!l-@QRLM2Wf-zWRKJ>&>db|nc3fGR)6^%sp;4j@V+cE-b>X+4{X z#7751)NLhuFky$&VA0NN(Ihg1l!7)1<%sjmy#BfEG*J&+psslsDR;yA3+lXFY|iaG++-#D|WJb8Vp6@LHsuGW6P zKk%vlDE)qqh;V|=mKjF~svx^Xd|0>0P6j3d0hx(rfDwi!T^9!J8U_NQG-tR;8akX; zow!q7uThL(4&z`{T^NCB1G#2=a8b=j$Flc&fVJs9gO=I6&ihE~>@fjfkWQgi?wl7I zUg&Wn$^~1%{q*VEAUgNW)^m6UP-?E}F`%@}W$g)(>iPlMzoe^XSqs|$lj^36u%!Be z8cp4(a-$Z2n+xY3UYq`v0!4mc)F{IK0XCE*Dr?8`GO=TslG?Klt;r{| z?yEYx{z$b1{iD#b?V=|ndNC}cfnx2Zq1>U_gwz>qqd5Qn+1ll+@c;eUkM7a;{K-EO zGw|fK>0d25aT+bw1Oyy2P!S9t_U<%{3_Xcp9Ix*c#)f*v*66vfdJs*{Vy$+p$1!T z(eH%!hog!1wVQqK(ba_;TkV{8UzZ0`N}PyO54l(=cE}d48uw7?l{9C4K`HiVFS{cyV}Z`bwE0sr5lvPK$S4(Ilr3?9<*K8LL)ce7|F~%AuZbNnwk*2tIYm>3}dicLd95B~05^g<}AsJ=4k1#53d$r(6(I`KC z03nH-@vG2b!E&4{h2}qxV%aWIEU+8G_TXtK}7Fte$jS;Gl>j!hhwz zB8?dLsZq_T{;20d3~3xvA12qxuius|nVpz6H>L57Iu31F#r9F0|JT z0i^>ljJI-Dvb-W$w#0c+fokhy|AT%k+}6?^%A%z>I?JFqljd=4KOEmrTZwV1G|W7p zm2P(RxrFqav&PxHet_%M11#A5$~9QA&F>7B(bERFcslEI)pNFu#(r0gcHTJDZdZNb z)YftMmFX{)VD{xEnAy7TDX~A#4?;S<(!h-(i+W$8fK&n-dS+#MW<)fP#TJ4nMwX)V zm+~Vw3nIs};FCZp#qm1E3iBb%gPF)}Nvtq%S1MGf##)2g1`JxXL3~K;YUD5 z(0ldm-`&Oi<{rXHfdu{bh_E28eW+z*_={GtP)h_^>DIs@f4qnIC?fTv$z(`(#awem z3zi9AL$kDZj$~0d!U|3dVPF8@k1^Hs%diW%Z6umNxTr?^aLu2G7b9Vc=ylJ9t70-7?|+IFibU*A|( zUAWWEu&FeSc9NfGkq{{i( zsX_RXd%A_{P~T7_RWZlkQM{~jXd9ciw7bK}1MSA{eVAsnEl5v8Et->?pRvl+)M7zF8ttcRA2Wen>IzCs&^P?$4n1eiW#|xOPo)6-c zL#&N>Gv}#jK(1cEGeRVN4ng69j`crK;+@at+9P<}E0PEUDP6seK$n!(lLG|T4=*HbDR>6YyU)tr|p zbXY~sY5@+OZZc0@-BK>ris9hXn@~?cNHXa~F`@=29%Drc9lM*+cYa~|YJrY_JeoyE zVq>b!CZL!GywhnFj2trM$Oc)l z3}Fr(aX@>A$Bqpd;<6gW2y1YBc$awk@SCZ28#=rkH6|r<-&otY(|b`~k&e(dhp>0t zEt1sQ8zUn3fbpxFn|I&1BBk>u3`#m~0B&48f8Ex0!pB;fI^f?(o(v^27v^FoIkyvp zutIe&Y4b)B{iJ(vbwv;uYBI7COy#yk5+Y1?;9enG$h19#pcOV-O8?=5YV|DNyY&bK z(c*n z;ZHgr|IdH%dfHK(=#8g>*?}3RmKR3|aHCrr88*7xG3TqyGTb!F zlEezp;dZDmaGb;?muE)-^}2W(UScJl-RXo?4q?uRIO7S+D?&|6s^PDPSUV9L!*RAf zdc?4MO~!3B8{DoQt;?T@(`b(f6G@f9h?E)0JN8Rj@f2Np`eC@UM+Wcu#+zuPZ4LMK z_)6{_lw)r@4YjvMsr*_&Em{8h=?*;g+?`=JZZ79i%K7V29k-%A?YqxsO&hyk`=YAd zuk3d_W>uejX8Kxz9p8PkK7TNWmRr$#*_j739-}gGvzaqty4`B{FY-?eke`|QAX>I*i>egedP3<}&1C;d8 zb}Zg;uK-f9d^8zE1R11?7BPi%cLH-_k=vKZN-plTCk41g3vXj+ZTL`p%%Eq0sKkfH z?~+*^G|CE2PQ2ICv|>0RHqP^&w0J#X#Zs290R`>rr=Z~U3po7?(_bkAwl`-W!S-Fd z3`zLNsfH8)g=S_aW(K<|r_nUcV!D4aJK*muBf1(H9X;34ZQDTjFER<=nqA!q z8NwVSpz(K>fbG%|p&VjuR5^=zF8+zw=MB+x;lMxPpGnSi+BZtv3HPC2Ri!qw8FDG; z!JRk~wk@g+a~uIL9uCt-npDx`m#V_E%K4x!@lNrjn>*4CP_efXO5n3bV4|)DDjNu- z?5GWTZjZy5qMdf=DL$-)8cvu`Egv;$t=&mcZPXS>0FugeS}{m^3hU_!rd}NTX<%Qw z0V(WzdJFp0#lN)n3v2)8r62p#m;TYm|I3fx{n-EWu^)U)zwl=lc0c*|FZ}pRw?6Zq zeC9WP{Qvmzzy0Idr~ms;zyD+Z{>T3M<)8V~H`e~mr~cbd{`n`r@QHu*iEn=5r(gcB zU;g@~e|PEcU;4t+9RYv)(&w)H{^u_=p_%#(Lyj{a9%fNu>uzX7W@e;;7rU90 znRaU1jz^KE0brZ3^c$XGBo3WdnG*)kwwn5-?e{Nz?w99ofNG2qbA`Uu%M9D3M=LWD z3#M)9^@P)jnkYLKRRGiW5p)e;dNRDk_uSMr$>7D7Z6HmPT-s{8zEP1%xjw{E6pZ>2 z)Ulq&-E2xA=t4J*(6i3`HAm@aiYD zuftcBiTEsRRjz@4feU?j6mahKs8Wq-VzsTrcHp6bW5y)b=!|pgl}U=wCJ|?UH#(s+a3U& zHMRLBwiKeFeMZk58f{rXQ$Xs+88vD)m-134a0uQ;GL32KCKl@-8#x3_?zat{czCEOq=|8r)qga&%x7 z-#0a4P?1uEfS{Ra#RS;GAo%!oG13-8#opDMhB}G|o&_|}iRxs(kLl>hj*Tdr^0mKs0&>M=VC@)xYK zM}XJorSJjb%;Pc{b_FRz1nheb&=Ffifsw~BZR!g{sTjQYPg<{Us=X}pe9LmO08Btz zj`x`t*#w}Y6k$1ei@8T^rreAMH7XPR5NnD(H_{zH@@)I!KWo3fvVR>TPAnSVc#uH% zZE5eO=R1K0j&M?FhPr`Be4v}W$v%bhKKlYnLu?8LD4RtW|7qJxjKrOKiNSLRY$Ql! zGctPTLYv(=V{({cwgxzOeTd~EHZajYrN}af*@mH{)7=E=qDzyu2hb}N;_``3@17eO zymf42vBBXs3}Pl-_jm_V$&-;m;w#%1aCvj-T0)m*Kro4@$f(Lg9pVdMNgZy0I;VDfo0LYrTG;HW~*$y^u;P z3fTF58{_n%kc|r{;?)ib=LM0g^P1yG@T&8_h92v21`{9dQWjiF+ph0h)e7?+c5zG* zl?rG@JW9Iug3%ZF4L(5AZ4ut>{wRWIv|g zSUo&LtPwtUxHi zB_|YPIhOc`o`ppL+1${x3FzWi(qt+Y8IHVK4sOwh5v=Ox=K4 z4x`i!Qarpcax-YA@Dtgz(2n3axQNtCbE1)mv*Q}D&VnT{YjYnABE9fGv_3#3BxHs3 z-&!_1JFiwk{{~A8PzO*?AcmY;HV$6K?QKohXF{2fhnDMcy@G1~)mq5ju0(naJAt7k|)peY-l6*_?=6 z-N)(RT!H2B{$sPW5SyvVokLDbHfIfh-{PH0F-)X(Rr3{oc5~HKX z&t=!Jc~2b&wRO z{8@~~8D|z+ZOQCM9_-t?sZ%P5L3gF*%ZD%*eLp6duk+P;LOyEtB!0i7WPUkI+@OxW zE75j(@^>f+oM?~I2wwhW&j$Y+ z=Sgx8t$F%Is0A!Cd9$(vZ2|S_a?Hid5Xy93^?6NsGEa}&7B;UZxIJuMF8M5hUvtfu zlJT!cb=GC?DP;cK7rqe*uU2+`#^)TZmD$1|+4Mv6x0?kYVVBHx6F0uD#M9);mnK8yz zTVq-I^~)3JUa0>c=I{0PGFl;|$uX}Tkah)965+u%Qb+0jzVxk1W7^`OU&5{CYujg&IZD>^5CNtfRMtOt( zK|1ROH5Y#=Zcsg{Gp>J6$n^Xypn**7CZLe1vkm0u|Cj#V+U5OA|2u!3|M`)bfx~cW zl>#=k*q>nyETXaH=0qA3Z?#4WoK#grqM+nW{(*cfeoFpwlaUe0N}9$^hf$QZrHE|fjKH$Ir`SCwOop;v!+ zrYf7tSm_g%qxH;5n4i<_R_TmCqVFzmQkL`ff^ov#u$v${E}!SJOx2Dd^4*i+{oQas zrv#K|EcdB=@4Is&ugY!hq^lU&n1z`Emit!q`NC1%O?O80LCinMQAt*7^< zjVxo^st0uzGwEr|dI1cjvA0#0FmEYpd#k>1R#Q3r?9?nk?)$eY7u*Oal5|uin2>o$ z3PuvlWOtL4x&>-`NzPLAPXL|LUa}@MBZnj($P|Kdr1>&pkU>Ifl8i49AIII+@pWs zTBZr~hEl6&1f7BDv}SPliK$V7QiDZVA0Q>FiWh8(1UwX#$*5AFNq&|Jk_aj@@Fwvn zW~J7K`caaRu@jI7rhY^x@99f59zRaH@s1WFs6ibBG)tN{YXn*AZXmm<=V z|ND;QlKS2xHg@ZTqnw*Z<1(8xw;|Banhye=o8liwMh2sPBDu89x3%}~ypt#N_jm-l zZq+_=Jn8<So&fB3B$=mNOyE9!lRLOCfIC(mxsVMLiO#EH~*Q`S!5 zA{B}WWvK~8eqbKCcTVRtIXP63QjJM-Sf|Vw=U*AY9L!O7**na2c7*C7);Ra|;SM~B z#L2d|!)R2{gK3)wLtdNKb*0CD zyeonsq`~%~82j4SZd^GEpAx|oMUiOqVNxIc+aRtS;k?cjGpS{(8~+2g2uNNj+iWsn??Ry`PCKH9&BIF)0i@^%HcorYFBSwF|8L zUd=O$MbWpS3gMAYg2O*dXwjmPfxZ$aBb-T{Jq76|-IHFi9S3P;<3*UMrewg08ju_^(_ihX* zmnuduhn3!98k1)q%aj>nd^J#hHI3dL-A9UOIps<>D=Ffcqq(Y%EW5Sm22lfI@wIwP{e6xP80n z$J4-H^~480ZD|$_&Ni_MT8=ZimFb!@=nth6NIG_?XG2y7hu#zs2tT0PoYos!{%G{4 zAFbQwln-HkcUnyH+jVz(8uv>Lu|}_3qL-Ibyx>e~8~5>twO4Q5+vweeuY8e*6u$!K zrDMxxKitcU@o8$rQP0z6NxBVj?)ZI(wg9VZ_)t;|0 zH1@SNYf!sdcXN2MH}%WJ+vORwqRG3Au7*DC-=6J2CPS^KC;jC#oJJ=9f^@^B57BW$ zhyiFP^#Y3jJsO7TptRs2fhQp8RQoSR$q44K$~cA*uq#+~_p{0Y)<|_{(nET`#+)Ksq1uq$DDzTibpqU;EXEC@LmgTg3ycxMVrgS{9Qt)5(uXb{QaOY<)S;WY_gH6FJFG`o!%iM>K9V@$A$raGZ)jU-xOYU$ z>J%9qQ8|c1lEZlxrkTl+)=W<88fb(bLE&*_pw{;2{{5n{iQgKxR#K`c`@D&k;Y{`M zq9FY3gZ;rM8$=SCpAT5yL?~gs#M}5=cfmZBfMtu=i$5Y|wv%`DqSrGDnQC z-l4ucjKbaCE76Lps)Sn3b32ZPu;C)elNXRxhifg{4j-wI^F12lw&iS3eE%R95E{3+ zzc;qS3H@jD$Wrbv<-Iqm8=hQ{U#(pKTgh@4tEatV8Ozn!3Kp!F+6hivuqOx8FMi^4 zgWvzW@%_)#FT9j)($(WDb|1L-d;_X7D5IblG-K$}NFKo~hBzzwTTlkV6e*0Kkc6cc zY*&G=!wUw5jxXeVQKxsl8pPadZ<#AphiWuOS-<*sqz_e&niFkfZx4y9+{@!ZdUa0o zyX>bAw8rhwwpS@9>Q$xXlq?&YvRNRRea>0HH^t-^EEpH}c87?9Eg zH0FFQh4bY5)D0KFgZj8Rp7wLyiHG6lw5}3zG{<#@8Ad84z((O@{>2KpDq(gmN}b!xW7UNOd!ai(!z1@GA7-u!4^R zZXig};>360OQYn`3Ly&un7SN>ixKd+E9+@gBdqO@9Ps8|PJ7=#n=-YX*E|+kZtbnd z#CG!p|FWq0xeSaSCA^UubKPHtVAB@n*%(CIdA!;D1RAT*iN)C zBdNBp?TE7~dT@^@cZ$ZNM-m||y4l$;ay?u%d#|xq#M=i6zO8I5`w%aeLQIxhFI)Tu$=4XY9DDtYRMYXUw!gyE12|%jjRP z-=>pHwI>vBna6WumEOiv8Ea$vXt!3igS1TZ@#cE?bJM?GX0Xy3w72{~IqlL}1W7TJ zymZRL+6&*W2?;gz_%KMrHVg8TQ5Vq)G#M-trcUzdRGyk>Gz5eWyEyG)pfUtNb72?# z%=>elj4;PpB>(1KpG7d=F>%!xSpDjh9qfH0d<|o&MV_<3*GPI#XdBw5q@ymI)+T$S zQ6^`96)GqY_tDlc-lAJx_JXb9{Vie4LzX*toB8bw4e%V`L1zKk{q#N=BI-KzhN(CGwF063=qH;9g$_|gElkHe1lcZXJ2`W31YePdJTSeK@bp8!7owY# z(MkjbF~U-Ahz0>H<)-21B2!Mcj(T`SWe7Dw6)p8=tn6v>%r1he&QWpR8#TrTSZ&0&{_aHPn zexz07WEm8AjTXxW-5#!?iV{fB^k8p$MCD>wD2+-Kb@ws(`67&qOmRLck@_oC|Jner z9M`;wmvDE&sILjy-ajZCxJv!e(y4BV6*QJ^9`ekA&K_5mi8cJj{O2`O^^*L?r!lCW z!0?4PsRnQ^uqg$bPi0g^|Noz^U0%QR?U(-abjSbmZ#}aaIQ;tb^IOKfh?*NEoEedH-4meweZH5OP??E#n|dC?n?)|LhZ6yZfV-}^kKR^+7ljG z?aM=|?l-T0x%aC3yJ@(6kIbFA`SmZ?{&^MaC|IiappKt37+Z!U7YmO)4tEu^EdSWw z590^;`|Mgo`!iUrRUCY_JfLmUl3|fhT(D`CpEd{GExo7gmix@_S2LE;*stbHV@dm! zGUe{p(bKNAQufi<{(5S*^_hKChCx_55 zMEi)CLC~i=$b{*x?nDF=Qe<{?)PPXOLcqGUquMA=Y4O25e|xxl@Sz6Ya64^hNRe2-uz57pa|)fBq!orDx*R~xe!T4A~!?>ETe}=T8uoZD3J$_ z0uzm66n4Qek>7-1xl;#`8bS?NM+rq|w%F@)q0pr|U-|6J;MDbW@?d|or-^vTIP4v; zzCPL-;n2<8qjt2!ZJJ@+*P@&de=Z1-^Y@k6sJyH|ey`zWwN(^QNL9uz=I?%M^G+$w z)aHQ6fER#Q>$6n!%taePLFj)nv0rJZ-08I7^=$mFvlvKEDAqcy&E0D?Or!y6Z8oA1 zt@UY6Wh6!Y|LwKQpTG3KUAX4v^Y-B`{KuxIX%S3=!H(k`dyLj~Z2FVcW4YG*D zw>A?z&z-UuW9`M|O+Eeh*&gW?`o=42KNEVc5ri|e^$#c-{KhL9iU7M37@x3*vcoCa znkp5j#an6oATPYgU3f_`&TW>e>~2Vvh`QWj?s5MiZJULwYUzmzbN`%vPW9LS3t?uQVS(BS`8 z9$%QLX2`K<*v`1s=3}=DD3u|C=FN}ZHSc$-%63omv+Lmy5}j?PrCb?070`zd;0#5-53zg0^oc?SMui>89@ynr#|Y>S=lmRqa0Zc8}FnaBAa(N-5X7Y zxD}7#@sWgn?@+QiqNScb2lzYMZ>S-QE^dvrZaC|DQSL;Ha#zwUQfgX+7V{{dU4P$$p! z^DveMsHp+YTZ@7<_4(7AOHu#-FV`;r!KH(>fBDfllz!)@rf-#vW_9A+KuHqLrt%yr zC0{{IGMwhIClyh7z!E&5!1 z?S^!fkxqhMrP=a!XFJ>njdwJA-2&SMnD0{B^;WoFB&xWQL~to^E#tR&V(Iuad24S1 zr`pjjN7zUjX7e3^+flvZ4Re5!JamRnVI}iHNwXJv%m_~_Vcu6IQ``G%_2(p!#YYR zJ@pWaD8dnPWukhmXQ`LQj*sM?<9Zfkdk$%R{@aDWI)&sPAkH%Sfo z?{YFPhcE}vj&Amz_wQIyt|o~Q&ckyP5NU{nu#+$K3e|G3E8di&_j*m6Yz_DJ1P)QP zuHg41z;@Qn8k|p+UlXCMcr2=0i6qp@wqp(W3foTo3oLmKPZvEE&(Welda}!1+fo0p z`iw27Cxm@*Z0GDS_;l9u zFZOKT(~UH<+>}ZJ=t!f$N`3U0gE$D?RF5Lh>qenm4q*-qSISqdhghTGo1+c-Pm{jE z@5WA)Ci~K_THc@zD7fp6axljQUd)zUYQs#s_U29T1WO9iqIW9)Ap^fZ#t)p{U1qPnQ zqBo$Z8p-^sE1#_T!r7L+$p8PNwafp-%fEQxAANMr|L0Hg5uAZ1`_nI%Tjgi#tx_o6 zy-Lp8b`v{=!z>KqkTU}ux#aZNI_)HuI6bEbNOmpS043hzm~p}`%J;I!)b)_?PN#E2 zIRxI#6FQNP^gb*-oKp|2#><`2?)}k#2!=5HGw5DV2{RX0o20((*hFU7me^S&jIcm4Hwq%3{@@>6n* zjY(KAkkga{i|ui%RoWxZvgSSQl(Vy0?vl@7)f-#nf@N15 z8Lb*!M*ylPc!lt%9@Md`-V^ey#=19fXu-lO9O}06Pwq``7Ov0tzS4vs1GW`a%miC& zWF;Xbl!50VRN|N!bxa<94I%;-QmL-cC|XV!>voVvna_VF^osgU9M~a5uN^|BtaUzw zIS}$!s8gyj#M&O;IG}Oq+O5sLQRt0#Z@ewn)r@s}-BXaW`IWb8Z9TY{!`zjLsWaFM zIsB(&wZt2`x<_fmo#gH`W^%RQMw#HT>)R9FJl7R&z>HeM`3*+ljQafeHJ0=LrM3TQ?GwLs z>0e#^+QrC*Ddb8`XMpOdqtZ(T%=C7E zlg8OmcO#gqk(SO2v}`@IBL@K0Y1lGIH2JQ@i7|uUKDI1+OheaV&)*77$Nd5+DGO|M zt;o(0UiFjEr};FZ(LRVcScZX*QniJYR1guWMMNoa==*~5Frm{+kMuX++T0jqVOvaTmwzIi2mJ-^UvuS_VS;>zVczx@Zl_cs=<0GhLE>Wn~7 zBbQl$EWksLHlR>03=%1p^J4nr5}^{ed?Q2LHgl=_cPs>ADeHA%%DW>q(ie=LB#}(ov97z+uF`?}aXVUxLCQdBn)H@)fYg_r1X*_|6B8 zJ>EIh3h*E&t$>b%m)*Vsu8%Dqw*reVKf40?g&Hf6-;)*i#-bJA$f62h5~$rRN9XKe z7@_0D&@02#=`c+x0TC#f9X(+snA!y1&d8(IF~(2OW5W-GXH_Vk>7MW-Z>g^E3`7vq|en5}5?l}1hJdB;a!NXu{JaEjN4^FcJ z@*pR!0EhDh?|@^VNqNi)9CP{E7055tTmiW!EAU&bE8q^W3C}C1j;QAZCj+{mI0UYxbah>g&q``t0=#ZJ@;P)RCQ?*>2$C=(~PLoJh) znxSrR{COFlq3+8 zjy#DDnxP0~qgv|gK9NI!1Njr((rH%mt%!(Xs0E>LLi!-oSe-Wdo zY$Ore6daUsmfGxk5!ulMB4XipbJ?=NI;)uf53((P5St(D4V;J8qBo$SfSxy%@hH3l zGc*x0)7QRwV*vJ-|2k6z$z0FvqB8A{bpVY)*WNOs==KM#rG0O3;vgYe67ovTg(A!e zCzF)utQ6Z7d^87p;*XHy{BStge=R@Z8R=MsOZO8z&Lu9lSTlzfP{$nkx_R*xwy*iQzt)^B;<1xpD zCY2muWSVowea^p7Q~eRQt%h@=o_OB4lzXB+FK6VG*7e=5Pv0)E^dHone3FSmAzg)E zh`xueljunT!ha7cUrkAl5;o|)MC}$Q z*<3fbV%ROw7Uhe)O|M|I5&Rve9Hw`*bUe=E9O-Ue5Tb>(yeD7zodY;?CIlAp%Sx}I zqKwZ(Q{w>U%L(Fm0@RK9dx2(uUJ>*wXbDU7WByGqw-NO*Yg+0zU86ZD4;Mk_QOxko zT`Wy|57j`n2vI0LX;Wz!^9pS$jZuA6Ua`LRzw?(&;q2)ku6W5B`>A@3=HD{4pQ_KF z<~7Uf|JVNc+T~AQa{22;{xiKly;B~#9#w~~Jlw5U2{)?15g;_7m!^Y?&7X7wxo|u5 z1JXI@TZb0q<1VR)2!WW?PF*|6`2SvLM|SMM=Gvu1N}`nvVa`#o^fp23JWhGkQz*y) zM6Pf-r!F;3+@OZBf~uv|V3U?oHfrHD)$VM==>kFioh#Z^ZS!DH7@CC26<MOcq=|r{>uR1#N>Pwi0oyX_ZDXAz|UvLtfZTI5w z=l9Dt?#^*t@Kuquosij;w5j&iy?b|ZXl9!*sgAY%9ECaLZ4dd)7TB!j zMWJxBhV|%G2b*MbDWuPjV?qxJ&)8%3sm;4@TxqLxtBs|9fLyA1^aOS3RwH$%S~9bJiDUzw~P?bGP5j5sXMZ4`1)g=W*#f1qQrpuFQCB6^U*Y= zy3TctF!D_zQ`8iN9@UNA8hsFak|E5&+NybwYK%3o9q+W|9wg7yE9#wMi)-xQ=FyhK zu#VJASfbPh$khN8ixf2$kF>itHt!8K?%dSgz56zjOt7Aiq?l6{Xu-6$?fF!$AmO4d zso^a{OQ+}jSIg2r$aN0Ivrns0bv2frFmN@^rGap5_M-6Z_`#pbVDj_-g}2r&zy0#3 z`Rn}8`3!WLfy0gIW_cp`mFCuIo9vS1i6D_;?2M{RGtE*mGnD01p-H<0G+u5H@G~zY zGGlqMA0w3GQ$)_Md#=U*`to7N;EN1lZtFCBQM{2N&4s0z9EK%iLuTN5mHe)wGslKu zp2GPn$6BM}jSpkQweI(?xjUnR)5u9v;CHZ{(AP??nG#D;11}=>59?SxM}c@J*-qK- z#`nnqNt?dxfc(4`aaJSGy?m0VoG#9wNmyM+_Rxm@;o~Y*9gjy+j0!hzF+=KXajFyS z(Y_Z>1LfqmY?QSzG;-E+)^JR?WXT56(_Xl-k|xpE3m4ji+7PQRbTbMB1MU_e_PxI{ z17dXZtH!awf+WPk+s}Mjk5V7Wa9UxAWh5zSWiz8IAT|*Ua3e4Bb;HzC7X<;&gN-W; zBD1r+mkePJ#L!e}Z}qRO^;tq!Il>ycC`du;qxW#|yStOUG#+L{Kx+mWRJ{&BBQcAH zBhNP_Iw3I*YCuD&bFRDnTlEAhOF9vL%BK{~ddnm>u1Ey58^xVYmD|ii5%~hI6!@HC zNqfScB`#_=0O_!-hx+s@r4RJUCVZHtsVlK&y6t?ZhD*eLQWKaFpF5QbZ!hmrI*I($-o);LuWeLzsh)!08=5p5{QPhFIgrjSq*}{%F*@ zJYZFWu$vx;{NV7LMFj%=AvsF$3Wlnv?)nGs9ppkq5**#3Q3Mx9jf-lqao(M;dFwXm zB2r2RdkTc=TEN-tP(c?>+kf7clJ}!9f_OM0r8eBb;S#{11!FY6Gah|F;SGHacOZ^l zfI~8td(07G&n`@*4b$i!c$RJrJz>uaVh;@*YcmMt1D(wxiu3=UtzG^HFaOMiKkIb# zJO8Eg8CaDWcye?4Ug^Qt%;Exa9^!#z7=rx2?vZ|sZ6OAryV@i=ZEJIZ2%$z= z@5FE1+h7#E#_2`HW_w$lV=mrkY}}QyV5u#X?R0^>S3`WEAm%D0!ym!?g_kd7Dr7ge zw_8(+>b5-3%;BL7E6fgyp->W=59RdoU&`EM-Hukj*DE?3NoX$VQX&Z_t!hu3>FfkH z6?K=eu8l3Ry6^nLs(rEgLT+%US=lGwn!a0r$@gc%0Wy=ypNC#64ya#nE!_4LR&Emm zGkp(kt6B+4?113sc z;Lh#Md(AS4hv7K)(nBFIth=P2FUrW&t{Tc5x7@3UGMyKE$?y|S@0GsHgJw8^%7Q@o zG6u{d1PKT-qK-`Oi{U3J1+7xp3X2bIFd}LdWrz}He(Z*(nMHaCiAhY;i;tc_M_(o% z!W{fSDYH`X1U1GQcy4DIt^vdD*O9^JC?%gt>IGFZFymiH;GhaBN_ZOn!AE(fC9f)= zPo!{SRGd;JOcuov+F+-;KF>IF^R}D`_ph|7-Y7UDw4$hBL9LXS-6FJ6sj^w0hNeDA zyyb4{F+R=H#0gHZ%6&o3^Iqo$+ALgXfH-GC$#WWyJg<Xt8PLIM zc(mK<(cWubr+p(*E7rf;`wZ=k5=IggKyG*tAebkghiilbQjf{yF3FNn(UGOg_VyVA*#tm`HuUIPbJuOFphq-#>?m zwL0r8bN~FA{?X1I(ceM_Mdh#E@!Svo$h8{y<;=OVzl?Cc1_Ac|;1r3g#$TN=9*B zWBLAgH0lkbW)uld<8_r&+P~Meyk%ZC9Ep0uvs&n<0HNcSy2$^(vUd5Cm;Ug=D=*yP z_k6%hpMfXg^czRQ(8BQL1Qq`h_4`mR2boUUK1A`b*rgtvOo^SOsCMHrLtbvhhLt7k zRVGY!F|vHV9j1C3LnUu?*^$%`=5{2~_NU*72v9mjhW*%7dgpUtV~q7ybZxYqyaCzK zXqTb)8;X|0I2mhoeHBfBWLZK2xVf-0#lrC`{B#tnZI58Bn~4Us!SnoE6@`eoM-C`&w?L&?EJncR-x5Uc`LpMfs!YcQ*AwBDLZf-tp0iVkIogdg~ zSNh5CPJgRZ*!$(m?PXq({!oSYN#IzHX*wQfZ+I~?3u^t?*3%4T%)~%OBy07g$7KU-C-~b$6*YG(Y4IcaanBJ|%MEE2;@g!avAtta|h;zC{Uq0YyOI`NPz;ot> zKb%azUZzn#Qz4L)a`|Yml$C=-03j(!65nua^ght2uwBm8NX57*@+;_npg|-(jka_I z*^Zl-QH=aVtS5vNyQfiP2y+;8Oz+Q83?ejmn&@C>3{um?7;6wZ8j|MYCAd3B@6&L5 zByTYYGnlDR*-F!s5GZ$(RylL>E|0U3Kh7KSI4Ai_jfFWadd=C&GW?~+s7`4vy~5aw zWiV$$z?Nq_-emIg|Jroz^4_Jt$Y0O#&v!mPeZO!4|JbSk*a&D{s<>A&^p%Ar-3mEl zqPG+Zm6Y$gnG?H7_W!f@?m=>0`F-EuF<1h8N#5wOTFGj0wIQg*koW!Aie!TTNWvlr z5Cd|#(ypodI2Y)}O!sW}3_$EkE6Iwj#SEo=ODjt%rAm$~aitPV6*=}gE2kWn?5bFQ zs3bXM%W~u>6-!Pfah$|)R4G?Jzx(KW`_Ao|?w)S2Nj7R11TZsw&OP^ce(&G+3#^|H zG7ZCM3?LNq_Yn|@)TGHL=#3M+SDkMMo4vwOJ=k5Y# zhcv8xJ8`euj$7ZadL1?M399o$pFXy}C9xSY6AIWAb5yU= zY1C@l5tXj~tyFc#Djm_0BiZW0ZyiFiko6&DO-YUU#q4?N5?(0R{Aq_yo2Ol`JmbWj zMgxIcAeB2K5u24Ven$vdRgX4H*+7pTUCi!3vitEo(RpE@T_wlFtWd69RS=New1NZ@ zS7wDYo5@26EI=9zV9yN{q?Upi0Bn+>fj1a>fC_pZLq$5&mm#x@(|Ebr4rqyiQBr7ch?)lr8RV21W{@cWne|M-c&vvS7f zx8<+p2`o?G?Q{Zf_I88Jo%m{{Y9W~or>L6>>AM%v90-*K6;oYfro(|c%ZdY^I8OIM z-E<79oC)!q>o@?Kg(jSX7T;kfI2=>B6S%3egPJ?xdLt(U_tz}ObSI{-Sq!#V25bB1 zig3ijeqaw+v+Zb1tO z_Hk0V4+SLcokR%FYhSe*<+B(05EE`yV3SW3y?_w9ee#emzJW# zr+p)!8jH6SO1c!3$CRvagGNPJj9gq(-fpUVT%JuzpQw_LBSSZ3KCU=pUgFT16~mAz z6FIM7@KQ>Ws_F}vhNvnR{@Hs_4@}%kN9z2MNDvDGu;OJb1%8l#o{_*;T*Km!>k?nY zuj$vfk1q0i&+q|v-v-_nDK(V58h1Lf(u4j!iR zog|K9UwM2{CAt|qaTJ;kC_B>)re_)bn$-aoqmhuYX^iH97#(Z4GyVKfa(31hXZX|e z^2_TKGCFmb~Te+El?<2aMWeMxOgxQ$; zyv@b~D&t(u4(Zv|h-=@2L1BbdnIoyYT$wRzK>sw;;}tA5|S8I*;?j3F(j4 z<%|4uzq^rsc;;bmZo#+#aDA{H-IDS5qLB#!(p}eVESsliS$7wTs`>tdz9#H|HwLGB zs4H8_?zq0}`2D5x7uQ+&vHQ<)DXy<;oKQ=uKWDz*Z{v^?5M?I6+w zo!^)W!ZY7NP3JGxU{Q8RLt1~Gah~n|oD_cc;VG}4&`1m4Cb?cA<9M$k!EtrVda}Y^u*&T`|I|D*EOytt|hzX(jhw7ROvbF zlcCva;dh7>O{x*6m7}cw|JPSe|D_Xu{T=D{FCS`o0`H&`*t@=~^3qGmyiO%aBUsIY z*uXJtGxk9OvV1SGod6zUmzF|1)II(H&?6YYFtMw^u&B4_AORbeWdx4yCNQv1MYEXi zpytoaqknMf3TU~-(iT0?C>CEsrcbV1yV3%Fv9rzJyFH0c)9DvQKzI8bv1SR%h>L*_ zL{!>e8FE+p)84%goJS7p$739R=_hNs~hHnP+$UJH)#8T7p#cltjyL zC$zVAHXvA%b^$(v2FsobyU@(fBwn3{ZLO4qMRJw0J3QoWH;dv3ROTA(xL2#mWAwlBFzGYA;F;Xk@#k%rV= z8DpZygF!SgTuTou~s*fw*LQSvF0mAnP$sReQF|N%_8n_zr4{z60&;R~+ zzMl8CRnn9EMHEi#xO8WUpQ zX{);uX{SwC(uUCPU;rW5lRsx4lsAFpDaM&ti^;Q_xp0kZC>}_5b4-Dso1Lf*I3NHF zbqx~6i=B>t+lu^=?9YKhpU(du``(o^UpsY@|15t^asu}+?B2@E_7|Qh&9(+{JREbm z+4fvUx2%}*AVhMW#h6wMIE)(v8eQ0KsQVGvFpAMx6(z)G08Z-w954xZQa^Q`C+$%n^Jo0 zwZoll)hDJqEV(?bZ7Xt}(^0?Xa*B|QYuz3|#+WYBF~njn6?Hvo+ z>cAxjWrowJv0@7~HRdi7z-N9+L-EIYccaHY%ye=@#u*D$#K*T@RrJxex9?q7{VgUu zRN8t9iVAhJHMCY4l!!Oo-%?RKk?wFvZy zDCLKShySI88dSeptS2^ge&*&)7o>b0U_UcazU{!7$5ZZt=I<>K=n|{j`%SRCs!o)-O?xk{|pS zihWaUhJ5>``q&e#ob+#M6`3B+1xfo~dIKWCGy!s0-&Oer7fJaIB)_8jYGO4b<@fFs ztcg|a7^0Q+|94j&zIU=aN$9)$-sK4_Phfch6Q00NpW6LI7Ha-wdyp{$+eas-?c`pY z6Nm5{xu%Sb2ELgX4$byP0$s5O$x&>XJ~;5OtQuM?)BHz21&Z-b~ZMoPqI%lFx955)G4Bv#M5SwP4WYhgahEI-+6KyVz87DF6B+? zOXocu_$lBgv2a>V+PEhT2!%VBX7{AC6qKhS=vb(flM6@xqI>knxZnduV&XEk1rCz!IVoMT%S&SWbRl3jg=d+E=;`s=! z?0(jJL6Y|Yls2|jH}<1W8IbxDU&cqIP_SVO` zJoiuRwzKrb=k?MOx@)#$7CBcsJbc6UK)Ln+1B5Qg#?(QfWc%Q$`Y@d+7*FiLpew{S z6Hkw=Nb{5>Ia$D3<6tU7nC)Qxc5upu4+baXgxKE!cX=jNqaw!4-sztUZU;T+LNc%z z{wO&FsrsZji+(zGunG4`)b8%^w+g*dW)8$)T@Y&J&i2|389_*mz`1njAZ?8sF?TR^ zT44fFY?>v=4|(=#e4g)pE;{_JfAjNHLuYW{pIUii< zX#rRBilMIviqx2-ZvtMb=c7)6tmcpKKiek3NaX7wRVz1U51^sZR~Mpg^(cvr7(OXa zKXtrm0mmA2VJp{4Oy$vR?b?nEY_xVjG;mJyq<(ZG3SCB9{2F+wk)`7biC60p^H zW=I2J%=3Dy|5wuj&?^*2M9y5Z5;AD>les$uml2a3w3sA`ZfUKoRwkQ%-%tt6PU3ADqM?fI@!a7 z?naLn!^yeyGx8i*#pL9-G%nycRvt+j!ZYYOe0Ze!rZPj#H#jNGCVTcR&oF4ja1bd@ ziKDUr)}@LGZCLDpU1WKy|KW%Qik?i!3=xUQ1_(WIEk4b1qfm2@C69+o2u4HG@Iy0* z1yRq_>BIzTPxIJ*DD9l9f3b0a*)a~S{y@_L?5^-JOv}<^D1j3MGO=AI9F=7wnZD!W zM=>mH)5epRQ0&Xa75#&n91}>1#^nQ}y`@nW= z`x*%JWYr^#q(2J8;K3In+6(FXZfIEKtkD3>7ii@T|V21Wdr{7jbx*?lmPy$6D zjkf3uxgikE`C$^A>b`Y4++*yq>D-IwSR<(53?5{-LE-+*()X z{n5YVLy|@Jl8vtl8-N+m2$k@F9uHx|UTxb(X!)+GvtD$n@d0$LxX8MTxF{dxf<{u1 z{2A1H4D@~EdojWsTk_EwNDb8ZEMA9hfSip8#39!$P^+(uSfIGbyhmgZlCH#xP{GoM zZZSZmPq?z53dS1qQExf}<-oz(OeEIMjia za4lG>sYId%9Rc))uv@4TXcU7r!L^WKSM(!>E%a7j9kD<$^>b8G@YRnrE#Lrkkqc3x zXgl|bEr4!A{0KmR4~;0821%fajZ9*08ruk+5Ug^(fqphuo;mShU-Vagy?Ft<&=j1i zFCmW~IsrZFK%UbW=Q-S94VoW(0Av6UKF%j-ZC=1AbX^L8 zssx+S(L6)*(A?mm#*S^lqV8Ib2CRplkW<8@A-|qW=8>ohUNJ3d>_d>iyA;{F&UFN{4{E&CpKMxy4Hr`6 zm?rlHw==h=Qre+olOwh-pM7!}T7`My_q}6D+KU$PudJ_}>_@Kp{n3 z(nJ&1JrNY0>&fqWYSjS2?yntKiB0kDj zkhUn(!kRG{hygMUW}b)AOBk;o}e(v_`ROu zf?|j{B_GE(NpOcvUMRh2%8hh7)f@^53_ape8hXSH#^J`MIuUm9#0Q%fC_$5bmv-E= zbC*k&AbKQWJUhY$;7+3Bc&(O;rc)RKgP6oHaZ|yI2sxl4g?Gvqo^h-^l9Vcaa#nifiz9dy|~MhKIQ0{|U_hIbqXCqB@)fZ-R)&O{5i;(I~D z%?PN(9)tlTk;D&1*%+?t8y4pW>T?oeUlFV%47?b})WcG*HXaes(Zx%4pqk(mQ2BJs zBq$gz9<4Se3Mo!vc4;^X_A5YS^#sp1p*Ii*$xp=lgl+@^++o+`ZMtBL;=D$J4pZ~yqOHZ4FDTc`^BO#B9phQ5dzd*+W${Ps!jp@03*PpuwX zO-_B~(en?#c&2swZ=Zg3_4vtOJn5bIofF*?XO92XtP<%wcMGQcAzSW1XqA}$D_8tM<9fGdb9 z2h_%s#0dT+8c_e{m6cTPMJoKw2O;}iNxsCSOelz%XQEKkxYf-$&jHSe&vf+ zWDps~5xPXf6Hg#uG~I7!jepm$1`0+m#1uwGlmyn5*e1cF#EL{1Exc*Df{ZT8Tq6O3 z&Imf5ICleA63s`b#f|Z;PqW7V)UXB-hE}X$2bf3kJDGK~xUJ~T#KFEKnsUSeAaTIR zBtbXXA#MmpEk=9Cm;h%SA!Lqh#r5+Oa!%w`VX%e} zLb5)gk4?n;Cc>705AQZ{oNxGy5=JuVCHoruM^i7F*Gz`e0-@k+JTU*@>JtKqmzjrbsck{B5Hc(e#FVM!uUl~2Of;#T?O>F`9+Cywi$P&~+A+4mqQc|IXu1MiVXCtU;sEh#T9 zIxm!N;n*eZOxD;WWI&4W;m8+2`c0M15_%*nzB*LH(m+TAq7@Ia2;yo@p!70;Yh#4*~GH3?Q$yZtAf7|yY?iz{O zVhwz4gS0I4X+lrd6xI(uhMY9aVhA?*bn+d6lOW(mfVVYTiai9f6!OA!l z|L45-uhthqsqoXqEur~`Y=CCshKf1IO%r{OL}MBGN}w1x!NN!a6T&on9E%DmjKLst z;+i||i8hYM$JGlQvqJQHdj;*Psk z#K4VRPysw7NYpX$64g(8Wus;{o*PTuwX14E*HMK?%4^sXuM0zD&ht+r>&8o z(RlkBl@`&7gy;Nmks*_<)M?8nikPqtXSNZ$I1ukTv|Aa+vW`E6I|H^ONuJkp#a%xVqZ z2eEZ5Nim-U8G~AA6eO0q1ipVD4oa*M*(%cS#7WeQBI+d)m-Ds=jaS_s)av6ASzNS)Mq zCHr2wZmeOpi!~_uDJ0S%Lrt>9B}a~qSEw$RtSphfNsFLMQU&xz>I)i?9JMpzJ08-( zutX;~tK0R*(3~~g#^R+zK!JNDH<^#H*(m8*xqM{nltny_(}1(exnYnalnnBPbYS7= zNF;KLSN}9eWi-5W!r(zV1d~l=DZmhkT_8UyjT*S`fkJFuoCb0T92Qws(s~4PR0+uv zl4TaGVH}Fpf65|1QC|c{h%C2N+z_r98LdbXI!qH=BvSbdje(a~f?~2@gti*OOg&J- z{}90?DQ^i<6iE@oJNb34$c6f8F=#*{r8q5%OHAsXf578Wlu8jGHjZ3!?q~#DJ3Les zh#yBPgdht?j3^pohe2_p6aRphe*8}w7SXt@g^z+ckJ7ASq?2vNV@R>9sAN(hq>MpE zlH07 z#}n{SU1J^6>8wT81D*>Xc`P7g#cSy`RBa#oqcOq1PcSFk)kE(M(VAhk8M}5 zfBG0kuA$UHC|py&BZEk^1Ar-Gm?7mcG!-nN^$;~5C3NmKY!*A&wS?0`%eGb>6ah+U(;{pyO+O~C$Kz$ z2=UL!6xi)4&z zlSHIf1B6@y_FGc1^c4l9TqI&uR63;Y?NFK{bR}s?Uz7A_K^mY4bqMZmvc@MG9)!IP z;u?~zbZ(FeAt^#21qCnZ1VyY)Zv`DhfgX|nr57b()6_c+qA1}OAS$QxiPX|Dk{HK7 z-LQyMdWu{O%^K7WBxy;UOcYFRPZ~NTBPsm>B&kROkuIkHfpQgvCBBf51Cd0hRI*oo zg+)GB4>}BsGRUA}L|MoO&x+!fJP+Gu)AUS{E3rxB(wIQ9%#R&%RAgF(D2IeKcvn0% zFOVejvA@e2|HZxsvDQeo46>pD1vDB0B94LJMpDYWb{gMkI3*k>Y}YB4la;Y)QVCd% ztWpAmgOX@g5%wM<^?LjlniipjtcYg`TRlFLvH+h(s+$@Z9jO#jX$-ZA%*bTYSQsf@ zH%WiVY|$D-K2E|+pN@-Tzs({qH=Gt>eUYf9a6^?#TJ>Vub7@B7R1^&)QmKV!f|?y^ zE&4fpFe>OvB0nEn9#z7asFYNQeteBJ{zb!s7$lI2MJQrf)K6$dp@tt*$sa^-fHlDLDQ;Eb@E%9>iReb1m{?22HD;X%b*6n_gw; zqG@0vKSMO0){{9DI-V(!QXlk`lrG`zn?X}zVAUy>Jw$ck_s*N!l&j& z*@FfMilx#m;6T4b8!BxvWH;!7q1lE5B{fSvk@OY$O@uL|n0tJk;Qvg+A}9l^NWxJx z2qU&is|dXs(p5=&D?K`-tH_veCRCKr1!#D6NRLu8BubYSSUx2-sC1!Aq~1e~jEo@SMq`S!LDT50{B z{{IhFPXF%7KbV0HUw*{$1ePbTJb{Hdf%~7_-N^Z$hOq4%y0~-0MxNZE+cKocOGk+G zUP_AxwwH!MX$el7n(5@E!B7e_w7pV0!}*{hAT9qSx$m_5-QK-5_}|tNVFLd26R-EX zJAh8U4nJJC7eDdgPd^deQI{`1@!=FV>ygTSwo5beLCwFgWC@Vj6w>n`-{56=c#NDNKihE6LfD;d(3Y{1>W0dri5yUY) zPD>l(b95<7y9iD6xc&53;I%SRfSWvp)?>&s-9oAMp1AOlO9TMU_~3Xog!SuO+3x0D zXh<#un_EHqX6Kc@Ld{Ms%#}S3DL}A6t_AVc^>YtE6E>{X`iKg@U#P;FAs4dnK(x_X zkf4m#lAdCoyvjO{q6@au+42-UuSzNdVsVOL%)>=M=E>~&U~V0C7xm;bx3iZ0V}AVo973h1L>qUCgAl-(Y~8_wOs$X0^G+>X3lUm7pC0XVaq@rS3*~0VGZyKKSvX@cfw;`iPNZ6EfdytV zg*=7G-0$voa<%uKQtdHYL1$pm?H7|#W~7m6V7f!2zz6@3VMWaWO+z@UeV367z)YA< zp%+vmaY1z>G8`+mDJ_YXoJQ^CTR4i^t1(E--g__ixNvIkIaJ)W3^ZzbZ6|K;6z+V| zWAW+y<0&L~AE1;>28r|{I^!z6nxxFdLoRnUp0GSnrME!hGIy1?duMkuQ+Zz=;y)x? zFc<;wDDyKILk|EoK#iv3kQq2H(j%IT4XL3?*^o&~y4WcU()9|M3Xm@zgR~4gS<|V! zG-2V0+(vg*|A`O(V4AQnIY@x*yXFnQy+d^kudC0=Sr{nFPH*1v6a z6ZfxsNA(f`|3BE*J4EvZjj4=l7oU?9Mmn}fur`QgoOr=7C$CaveL zUcYeZ;-!~vT>t2-bm!&#fv*-1Jf6RpzSVJ6=L1VFOdx9yRCT_Cr0uAx_b_=&6Go&?~V z=2Jy%T&;B_Xm1pD2fg2EQO{fJCTpRTYsoP8$VVSyd-A-*W;cdPD^E7yj1T1=RBsbn z+!U?6o@8&fO`EbWaL)TcjZbG{MjdeLYW9TBW>1*%gB_m99thdEwx%Xib8^$C5v%!G zoQfE~%>-*QYjPCPx_@=|lbJ{Vh3D%@jH2rncsM#a8PfFyrU--x!DEYDdP`}w1-=xZ zYX)DbL84I^#TJxGx>N;v4x}Y`1&@%#Flu_#v&``w`I^knLytAo=h0cg;M zR9u<4*cKFP{+a-AO<8W(aZihYl^kv9m=7z=8nf4YleH=C_JzTY5B0pW^nkpE#nOh8 z3CH~O;KGT=Wa@3-jcOe%AopM1-O5$k_t#XKUF2oKFLY>7XM&i7M;l!lA@b@|_UY4kdHZEGuRL8&yW9qQ9Z#pF?_uF|+62<^7U{GH zD<4PIW@AZ6R{#Ix%EKpD&6Q6+fbjqR_wDXv;q@1uEVU>pD*zpeNfUv;0$mP#io}MgHHGruC@Bl0;>RQaS06POZ+cZiv+d<7OWC8v~GQA9h zjIT{=3Aouih=a|(g~}9S``iJ@L;9>{yM2cWf9WOCDw}$VG0nI~@e()Goq!O1_7(i= zvO%1}e1nH7(81A$GCfgYJ1C0kI#w?`+DjG;Lt`{lhKBw>l zrC7xlYC3H3x@)sNmZD0Yfj!SB9ayxB<{F9I-?DLbc8#;e=}yxyn@Pc9Y0={TjFQb+ zE6(ElmeN_A#DQ(ylj(KTO7W=&%jf+!cKi8^*!xR`o~FW!;b#FPR))~N0FesPBe45A z)Hy)BlA9z=Da-+Z%b0`>v=~zrAVuoTKr%jF(ptvymI}6TV+TE`Z+ST3B37@yLU5>=4Y;y9t~Ln(qnm& z4JZ)!g*>2B0B*K$U#P4?*W<&V2Y9m$Xp7=Y!ZHWTiUJ1)az_5eQUZpePaUDk4r(3^ zbb1pMUu)@+V2r|@5k{dXU&F`=#V7$T@X!j#HlbMnkP6;9Xiu0l0(BqC9Eg@B&uGJV z0fsc>iIBX7CS#W{e@&IP#3Ev87T9Wml6*n{LPhWFG14j&9|<`U^NpVIQk4r+#ne;6B_w3gwT zQ*w48>&6BQ2aG88y8ZrIU#1cJQLhdD5%_#(Ut3>) zYKhu+aPVG$OXct3LVA$va**q_gB+*DGrI>nAi zax(if>dhCv*Z9((&Ho=;IrE{_PaQkOz_0VvnU(O8wLMgnn6qwrrLhwy{|ewB7IT04LsQt>5c!t4*K|75IXx1K4e5cgLDa z4exCQ{eJ6tW)5yEwIu+Bw^Vd{O5DI~->-D~TVRhTZIExrutCMiE|w80b~XBa&(!2B z(i@*lMIZXk@2~BCIv*!JF|2r8y`Ux#UT7a?X5WC|hAAk9`U6!Fr{` z(yl?D;=yeP1$Y9roeLnd;aaYt!*B+Pwq+_4G$g(X!xv2D;CaBLZX`;91TwY4Vhc5e zrR$58xJZwQJ(da!FMd9L5+7Vd0;RLm3R9%zwGmKzOU8gn8V8Ew&C#nTL-WgIb)w6EYcH^*s2Z-Jz{hg%AA&q}}~4?!_rx>jSm zR{P#_;bo|fFi@q~NUe%DgG7qoNWFadvaefLLl+j6yTTM9bpz=I1O z%4bX00?Y~A*1Drxv1`P@%mtPi0zK!M3Dn@Q-IF6^t}6twF3~L;uJ|KB zW9ko}Z9t-L+2eS(ZicBtT=9K(Za-jBy@ER4xcUYShD(CK$yuB7)1G3aKFfBAAT6Fz z8DG5TZd8^6o)Qb^%4Qk{%gN&Xk#5tWBA(X&S9&XFKCtTWp9k>k{-51DmNmb9;X|b% z6IcklXnv#3+H-*PBLGUmK#u@}4k)WTff4v%rUrpcv$bz3s$P!oGPWE7yy8)i_gq6G z**sMiIom_2aE%5UESVbP5o0gb<0+V0J+=A#w zhUc`i?7I^Pj@? z3HaxpPoX`D3wGh~J~&KyH*mDC5V8XB_$d~8f1qKGnOP3 zd?&E&(2qmkbwWJ^bO$D76)D4>7H22jLd|3ti#1$X4H@tF2fl z$xTzmY_zt5?OUk)Acrj&Qh?c*Wz^llFr=3awH@rBv^(3vo2=qsh(y0*4LSfLfRsSL9nsQe%FcJ7O5fbs*lr72NDniE2IrFm7JyG;-=HnPIJ>!>7f?a(yfiVxrnHKaGz13d$ZQ0SP#fU?xIi3Zt1&1+mV zbVdkK(><0p`wG!*>-k==#pqcdRE$B){0a=ht+UTxd*vyfX}0BdB8D-RE%=dRCffyQ zgHigRO|U->Q(v|CE~$wDKWHp8e<{tuW^fyiag&n}7!Ua^bsYPWd*`W(PFqqKH(3@} zvAZp~i978LbyKC&{m+oC7?3$veNS-->#)=N1E@+uV4TyK951nW*$b8)IHCy7%#(b# z2;q>oxGybLI*Q|+$H8K_cWLir-V=9GlSuh7)Yh3XMQ#Y5|TtN7F)U+6E}O4OUG(FIrDPvB$TydLBk!YDfW$p`25d zo8^b|C?7rCBcHR@?JyjjwJw}%*33CO-{70l_M9#;{k=3poVPu6lUA49gXEi2lcz=m z`TH)+q-wi@^D<7TpG)cD>1??>)5_(7=5H&FDs?$8iHAZvq{t;1+&8kV7X zh860DpBOD-B*?zH>cPv7j`c}5(wXJSQ6z46S2S1(ayFsL--J1hEO=*b$t} z)_PhXOiM2psn)kHP`Ob()|qW~V0#0I%{GOm1D4LWlIH{jYvF1rU;=AtCZqLIaHoAU z4d+`g2A!KbLh*3+>hmwX_!KoF`93Kj9qgHkuTZHu(TXvWBasu>7w#7iAzy1^nkv42 z&_ibDJNA=Z9z5ANerEonXYXgeRl+wbA9I{HvzX#nbq|xZ>n&-k>J#VpyE{D$P707y%@z#uulsuiq}MD<7$jt9`%g2zxwX-4Z)a8@ z!a~R>gM3#`d7F-0W%E~9gT^MV;*QiWQIP^DzCOksny~0!zW8w!bWIfJF?UsNYC36r zkQ(}(Baida>IX|?Hvj**l{5cvRjqvPDE|0Ne)j(Ly)&6p|Aisqa?3F6!h|>$bw9{) zEWoZ!#%2@W!Gu_hpIIgb1CDY7+hJ*56zVjRDO1-XJNCQ~=C(w4jcH5>E_1qtnho)0 z4>3EvTUBhZytL1@H#T10X-BtZ$fUKt0~-ntFjFu7*_SW18kVV4@j&8#`Nfg$_+8q< z@&>P>#aIe=(sPJu>G2;zkGg@#ICF-)_CZhC;p(0(k5KfZ9!4HuBCor672_)PTD*6F zQh#vbF(WNL>P&MFBJDw62mz_+-v$XO{OM7TbD)UqMti3-zxYd^tog+Sa5e~!eqaHG zt!tr|!1G1F0;RJgv0OWLLqM{1(=sC?)WSH@0xgPT&w_|D0$kfsYN`R+%+A+wv*+L! zPbswJ{z{d0Xs%$^3hw*_&R^*jqr&KAfXIt+e^^Mi@O!0gb=;IhH3bnwx7zfp)*WrB zcD*GYZWa@-t;?g`C?0Km?O49lah2ov9`9QuXEV~2Z(~WT=+41Y)NO2`K?mP3Ml>~< ztnF%h4`t5dmxj_0B!InQ(m?mYC5RMwQh-GP%3`?+;-(n50>_GV*nRCFGCWu5fobTr zas#E46ApDdPH9)Bavl-+bPJqFo`4veP_ZWaqY@9(3x2V&iiYiV?~(*Xy}%;IpDsR- z6!7Rp3s;hUutt4X%kPp@kgk7*!IEBglONiOZ_`b-P41x;qenNoTj@~O*2d0F(i5SQ zZ*6y^nSgvTJqM~2gd3!Rr58+*OXw?@6WSYbbKgK=9qQ7)KXq`x6JA%FWbnBU6QNO6 z#A=aL>9i6xdo6mviIk{Ha&r#`rf@qvH;`f zJ~#+43~kLU4IjY*k%CS8T|_%Hpoug{`y|z#3W4^u5-MQ*1XvE z3>d}qsj?>74obWC#D$MsTAPGWc)s>8KOy#4n!odL0P8OP_PR_tx3}-LgxixcC3)(z z=hx3am6}GTYt&ZvE~$wdw`f<}W@@p=FG^(woLaOM1`D}6-0@vH<%$$(uTjmx-wn9Z)Pw=Q_2H` z7<4i23uD3`z@?axsb5};VTSNI zU5kom(s(b5!0sp)X1um(x5z<~-nmeTR&`Zt8Jj8p;T5 zGtlDLqR%@DF?6287?2eOlmm>!Ci(A9nfB*;vV)odgEwW?0o>G;W4W!_4&Rj~tQhM# z#C)Yyh8J$!xJF3#$sN_F_{?#oQ{}H*e~}_`>wLusWuxo4y~4D#`?VMotH&^UERkb? zoeB~`aH)QLVP@q!VqAr2yW7K34rallTa-2;sciIRKN&f3SK6C0G!j0JSQTsfbnASp zzt4v9@#S#6prKUl=bg5?+X{MNo8?$Et&*pZqq%w*veoj{0CZ+geQbY~v>{gtyTpIUkB zhaY?YqhEXUqmTUCM}GDZ=i%Rdc>Ce^p83@?FQ5Kbr$2Z4>4$#vp^b+ge$QWf&!0Q> z$EQAf>dDpLSXIaVgOyLMuAcmlkNvxo7a#wnmESw@hbR8RiSIi8-yDDa*e^c*eTN6q zKXmH7PyP7&kC)aSI9J`!+`LgtXJ!`$G^Hhmpu&Vqk5LBmbOm0RrMqNnJ@{qA#EzN0 z^$b@578AR%ld;!b%G!-k)@?B-~vz`YBxDx~(gLEP8 zQeqh~^tu2;_>t+Ek!ust2Q22ozYCJi>OW~(KzHqePe}J7Wva-sb){LR={RJ_tvCj} z%?HKJAy;5WxK@hOrz3-zJ!NuU5SGVwz<>2q>rD#)4qUv0n4v$C47}+Wr%qyM zrkg%~NE;*Q#}1J0V7~i_4yrq(6&`hkP}z`H@K?mvJoayz7BC#E=ysufCC1kcb$%GA zBVE%C*|njoC@?G<)_IuNMtZ1EaF7A7-!%gr5G4)%_b6I@qHzJuEGi-v2M!T4QXeaN z;W?ft(tXp_LpYp~CQXC8nWOW~#P=-lnVcx3F0C0MVx^hkvF~YGK=%hyq?oo39S?dB z*RTT3q+7=`UDvXxT069VS{y#O_im^$FzUIQm2ik6 zh8F5d5na%a3QMDdXa=x2Qi_Ldi&ad`@@QX;X+h$K@pTi~3Bm|KE5t!Jj(?%?fDr0j zNGbAru|e;WheQT~VZizN3@ikW1w=OGDH{o};*gO9-{%fkfdh*G&&;Vpg0lL1BNix5 zNIt*~u5BIYP!#ktP;Wy;#S8^U=m7KNV~q=FdLg77 zhZcrDya|w)8CK%QQEYQ;ROxJ14jAKzXaLjDo?e{Tj<2AIp$m-LAlXj)#LG`2EmWB9qbD@Y6)Djeg7%Wg3|$qX;9M(8B3nZR0-Elljj;t` zbg%gVwBm$lqQ)BNyjjoiq{!)`9ehpGZPT`4feY!13rNaY0*%3iVd9!W7n-mWlDr7= z@qgX8fHycHS3^M{>n?^?p|)+Ql%jB=0N_p0Oo zY+k@Au7Q6DAqCDI`d1|_R#iC4%)F?E`#Y}GO1~sx{DSM`~=^{Ly>Aeh8X6% z*mfh`NLIUz3%CR9)-Z@1)HT=5z=MD@P}e<_4KA0L#2Dh3$0OZ9BF4azfYL-rX)$>L zni^+8t!|H4pm2(gN))jAqs_V=`XeJ2D30i;6vV5a8L>d|k}Xakf!Y|QfDyJ$ z_`H~?qgyTZaH?G!FGa!pK#?g)aEfqO@F+0Ix@Tke6Sdl`>>RrY4$zsn385VXmKG_b z)OB1GH+~q6!T9L9&5fn6Lt};{fjKPZ;^UMin#T=FTzB<{o1efej)>Mf4-?`hjHL(* zGq@Elt`^EQaSg+ASrVre4-4d>(7+48PQ%^o(~V52%neun#)t(9a{%XNVn#t=*uEa) z2U><@$4CqXIxcmDh4XQ;b%p)H&!)Z4#1aQF-y67uBJS#c*|>l`;F;Exg&$4xAn->% zUb7XM7y;K)XbRk6jhh~GPB?KmzXo4oQj#c#YlBuX@f-i!<^}A+^Tq#Xtj92PdJr`n zYK(%OxHyW;Sq655YNJz;UPdpnJm@~SeFEVbYrGlpxsBETdc*>S6d43ccvb)$|0IfI?N6xLpz66h4rn zp(#CEm&sBC_kvi%CU;G~8r>vuK};hO!2=;E&KHAE1cKh`lT8cYS{Dnbkf?>zz-<>f zcVaq69fAQsRP_)?RLEZy>-e~M5*>n$#RG9>(g+{e&g$={_5aoXXywe`=eOmrxI|&!b}ID zvg&tr1xAL_wo|HnueN*JI{;2!k!Jpm&;S+~hm*D8+y%Vx)=>4Y);v@43~p}H!kdB| z?yoAg0uZ;Q)YshvklRb45}O8N8_WH9XKTarUX)JZYm7Ri{W}-B=@up%oXUl2+(ANSXKH*QWY?W8C{zQL5F*W#1y$TqAilk zu||+W);IwhRwLKpQT#Cp2{dw{y7=O{M;e)onl-(ebQfMt$_|%mvfg}AsL2!(R;E&C zpd&}yglYAqyt{?dmtzUkyI5Z~h}0339%NFTbubna4yNYX*gNc9BvpMF)vtR({)tt`U4D6=oj($hWK>uz_W?goI* z{XR&4`>>xXO|ithHCR88{Nqnh|7O;u+PYT;%*)m8qcpzI1&;49VdevIb&hAj~zrpJs*E_5U;9R2V z!KMz7!I}DnODUYpu{^3A?tN(Q@k~E|rR;^#y*0XMio%}sU&xpt0lDz~NrwnsIxbaI zdYh;i(@bQm#7~%BRCH(3K0&ipKt-QQF&M2=>F0b0HT}FulN{v^hp&cA;-@b~P>bfI zrpq;20|iu2rVQ!rtpKCD-9n>4;yPf`Y|^&*Ty<5~mK3oJ)~D(-X;7c%21+(oop!LX z)=glXO=k;RXD@c)oF#i2Lj>6EWIVFPyr4|a4{-iOHK&siDZA?try1n zY2MaY^Va)@9Lm?eKx(?&)EKfjb9LQx)bDUC4VTbb75A0`r+ixr}CNNjP~?#?+xC)V6f0WMxmCskWl z1VJeZ`rEDR5GPBZeyxbT&t81>%JpjkuU{f2-NF_D#f&4wL~954@Ok)_wy&m>`i+`<$Z;xO@? zxjXpUbxDRS1$4B4PVPN&rh`B)z0rq@C|dm+M`-n;9hLDyo4H9Q6D%eWXoqLyfj-%Y z(H#1I=|^UOleQxU*L((D5|D-H=%rDWAsSnm^bSwci9|-pcIqIe3#ip)i%YG(KP~(2 z)9NA#3#Zi&5znPouV%6yh}-c%w0ai*|JKTxA3yn9llb_{?_Hk2@&uMAuy7}^cW&?B z%iYuygXDuiniRFhhWHojzUb{eJ8EtKfd5r4ad(ou&s= zug{Onp)hsG+83pv{(0#CK)Pyu6`WQf_JoH#=Qo{pjdelZPCHZ*) z_uiZ7>o0%TKwnFu322f$S?pV;&ZI1=n9;e5)4%KVm~8Q*K| zY{_K@1ra5df#0I0=y}>nzb%Ej@89b7wlAuFl!AAB%CZJLN!qiOwo^BEY8~1{FlC;%IOB|3D`U)U?f{VF^2I?b!+PGz zaF|-ouK=%bfz)!jsc~d(ruz3CD|M6U-trhyO1C4+T{i#!!pfQc>I)0!%P%*yJb~p2 zEKlHVa00te?tOE{J@v)A12Z@SAk1ll1s(~&A}BXpgQ*2a=%;{X0rU`9 zuLwXIN@1XNIliY`fJXse6oxtoJJWJsr(38wvH;u6Jn?V@5-K?)c33(U>i}k}=Xylz z@Nfu~-t1jjx>4Vtm%g@6;nSwPl&@WRk(#|UHIQn!)Y%p`kh8D7c8Lat3_V<0Bkt^M zbX1Ql#D;viPG!As4q<5epr_bHO6~{$6Q7@U9{?@hr@fWggF{&=L9Ey*TES{7H7hFs4kSt_X=Mm*v)!nAjK@0;?7 z|9eYS$%Fvdv$>|UBNN=yP$17}0;7+B837*%LxA*9jjltx7&xZjh=G<0evO-(0yGgGziaN!%$$UJM^ zxR(lfyn{G2@08X5FRh$@^W>$sft$VD;_?KRC$MNIuzO+eTQiUDOZvd0BUcPlMgeLJ z6uAxzEg;c=+eVI#_XeegIB^ybz#2RQz@7&J?F#U^pr)z-_}=U*J!RWM-D++Y$OEw%? zH#=xeLCbIeobGmLn?u_w$vvkmpO>$2f!wunQ*)N9nfY}KAz4G-SCeR!?pL|r*~!+M zTYKMyj1#+ziJCVE%xIL(%~W2y8`wUI!9G2%S1#987`vZ{nMc3}{40)fM)fq?P zv-O+ebRxJ0kJb~p2EKlG;oB(43-ziwfV`G&u|@w8|FhNep9=%J=yO z-_^eNPN%=6qBih_ag)nkW$fM$mo?NBPF*DslEfAQ5a;t{#JbTJ5ZLQd1846r{X?;zGhA*l+?MSivnNA8{ zTzj$Ix!o!jiPJ@j(jtwQ{4rypYIi;XwwXA#LmHmaW16w<-`iH3uW#P$JssU_%MWca zKS%R%t({k_GvAPW`U z-Yg77J+Zd+ai!t@2ll=_*HzsiUFF*Ys$}TD0p!A|Weh+;%F9%&f;KmX0MLddHVG}; zHu+ch#67+<&?EQ*!S3=cO9yxxZuH4pX>kP%*+NZMF~B?Xti@5>m12(-Wp(-bnkTph zdakc#K0;f(>2je=PAmNot#Aj>>RwA&50Z`U-DZt-SA{4qW)l)f4d$<>%Kc`-*#{IN z-R0F{mxm<`DnhYfnkpC7F~wlU+NwO*w@45sR#N4T#}tLVZ{2%;rl!99(Se$h{Ed;ME05Nt`|G-jl(dPZpe7$_cR(tcx!%hA z6ein5>4-HtO*O^VQ+;V5W27o2gxToQLePq#Um3I)Z1oh1QFS7a3m~g)g-X6#3GNBg zbfONk{)1?vjq}!jvQ_zv6w@GsI=I&BiZhr38Z>qJ3^$NX_{hx|0Ea2ZiYU%rIWB}0 z&PZ*(ljN|Xd9%l=#|njeINd{!C5c)5|LDrYtE-r_4VAkF zDwvVmDVmlI(!-&nxiQKp3O&nUA}#TC-Bikobpx7h3&dN~_d*|hmcS5qJFpXS(24I) zWv8+olxAvPlWEf`ioyO$Yjv@^O&8cpJGT|2Eib+F6q}!I;9vXv($oYsvodZ7-@4P5 zbV2uaTLI$*;|$Zdc`IF09=PEF8{_=?KF7M1`&nWJN4z-ZVX&pK-ujI6fBo1W(0i|_ z>iP~wDee0AjmHnP`^mlU%zfpu2bk$Q-2-ng*FiM=noexkRJRz8^@1odBb(Y4-3YO! zT%X}t-&4v=z}OCTm6(phhy@zSc3m61fvI#*zJ;0+G7V>OLi*yE*yC6tIg@7IeXn_F z@U;`f>XSQ+YT%_ty?a|}1`?bt)wv1P;E=)~u{h-aN+Ye14R#^PYTZ@A?dnGa8#ih6 z-M+P%w$nn+fIo}>E6`h8K`+=;f(R(xy6t}J!mF2BmoLi4cQ@|fIi~{`lH%OpyZH9) z=vEpz@O^6r9O!F0@s>VIop-rBhD+r!z+;#l!=cV`DSNZmep4rqCY84ND?k~fc?Zbb zEOhN;5_kXZ-k;8t?iatM^!xIQFi21sx@#s{ObS(Z$cx&*x9Ct3hCU^rSVsZ-iEml} zyP$(XEwFu|IS3&qKvBEXfw$yaSahW;`eLbcbEV5c)YA-g8zJ9PMU5$HLUmtpGAZ8g zG?wDCV0v>Bfq56`&4I`~c-5E2|0{pEa^@#i{{jDbC;qx0?0q1M>c6mA)$XpNX@y5k z%dV#-wqffY;eEpNF%^B?vK>n^HClTW2;r^~pz&kdx0$aCJkV#9W!XwI>}eTkWe2?b zIpfVt8`XPj`Ti=-bZ=*ir0fMiv)K1+1N!o#t1;a;iQ_cFuQk{X1IKP{bO8w;%qM4G z1o$=r{tI4jSiD;ov-LsVQs*kJIQ;bnG3|?&$W*4Lav)6dRy&LLwwutF#+PUnHKz#8>DeR@oo0|4) zE8`oeGzkc<;DG}NDLHq>bI_(Ba4Hvjm5mptlj2}kDIei}JamYl6pz{K zv#A67a#IsX#LSdiHh&-yrgPBpE!35lIs4hG zsb#e|rXlqOX#ef)?pE4OxYH3-(n~RbqCoi1+Gp!Vw`n^Vxn9+g8wz;q{YqJ#o@^)H z7&UxI2Z9YrnpPnF!+Wi*jUbYOf6#)%L7p=Rf$dk6lcEDBtIIIb5TQfqkG6FJ+H5?u3%}PVQ(`BxzdK-nV(7ZE|x-9fz41IW2-{+;PTR|^glV154e(pj+*Fb4-cKa>jbAAN%PuZ(a0jqWX+U3@5b+3iu zr_&;!HSB4|Q`1O3!?(#jTN~6v|h<7bT7zb%EV&ax=?w{!zx?l>slZUUvBDf8Jdw&A3oDcRR1=TqKe)gdYrl# z73zEFn~yk0B?|f5QvDb8wSMKswbn+v4@-bRXx$3PW(N0KsR~Ss_hZNS zvbVZO=Jls^+mp8SmoI(xDr|nQc~*LB;a+rA3pKpyf%1`!AM&dAg1zs~;_|QDF1;{) z%`kARay8?lSYpp{Rj8S`VGx&ujt-Hk?vgsRfgIHNDw9RN?n2h5+2W1a9>b6U4N8hk zh_C4*pe3cEEW$cBlN`G#PZFGsq!NNQpiW9pPWVO3d$8IP`WT@6bqr6k{jLb z#<|wrTW$K43Pu440PoPIDXJ&)^U9BDZ1~SMJVO8FPjl!C8ZRTiuN+^IhH+J8O*~)k z1)Y9(^Dd|SdK7GK1?`)i*Kv`UWO%D2bViDFDWes|-7KVq>YlBXX7T@XD`)=X)XOW+ zO&kBe`JTO}GE?z0?y#xwy<%vdUMa({Bf|y2HVKq(M9h5I6xV${0-D8S0L&0#SIeaO zr1XeJE892Yz*0s4VRtaKsbC8=Q{g%0LYatchoy;l_VV*jIh0p7f&= zV3tJ|9&4t4>vMLt-WW?4?k&mKMh#!9yyj!}?F$)>dF%S6^&2v;RUKc=@Xiz6 ziVfK>yM_IjEzT}*sCoG8Je=K`(<>WejR&@Q!3WM zsgJ8yYZy9n@W=;SIzSL+t~AF!=Spt&=%O&8z8ZUzV+q6V@x3SWBGWTfMMaUR$Zi-~ zC5GW0f8b2nls*~EVT`%?csNU=_n-AKz^ z;(1hyOop>q&?$0AY_Sy4p=|c7Ro2jlSF{lWFPm%uz|^u+fV^l2g|msnT=PL|S<^u3 zO(`8gZzpZ?%^2P<0#O22=szN+jE&0eof-K&z-mBtgB87a8o zGc9%3f(uSXFAhCHU2+PSZs?mP6CH{FkDvU`mD4}MZ_8iH6IhQ3M~y5`x^jswOV zedfMvTT?}I`3}&BRVT^R7HJqgJ0!MPI!VuUd)w`+>-^hn({}Q)1C}mL;gor_bJQC2f@=bDl=%%>F+qOOJ{NJwa!N*@jI?*7?ndkEixnDr8of~y|LVU0Saz%7tNRc`7a5u1@KRh;v?NXRN~Sn>3ADJwj%;_HLc z8B5IG{L#Jd$;u{QeR7~(N%oqy?`Z(A+f_!_H*4)iIdKr zzcO>=Azt-Ob)C-KLRZz+L$go>Ur!ZQ)}WI@ZVY-9@80T)nv_tpl}_+b_qaC*G+($u zqmNhz1+^Zk6&T{I2dJk6LnP2it?WIXI{;E*Uz;o|8^zlqho{koK!z5|NiXG z_I9`PoFIfeB_ChZPEs`EyhtNq5+(Se^(flufzy$8XF@)^)1idY7cnmm;YtgP5klxr z+M1t7&k|Y}wR%zZ*+e|8`jqJfxes+unTF?iYJ^VDKD~b3N~K<`o|%h-Ucp$&pr&Gd zAz?Pj|5smMIrAg@ zw*0j`f#nG-PhfchvpRv@Z`)hTJp3l zHDRV(s5yY{ByL}=95Bl5J4!oUvB%O7Utlm3?2PBA7TvhFHFJ>8=eymT49(=LP~@Q! zlrJS?H7!~(J8OAV+V3XYGO5Vede{qk_oUoJAt|QkGNHo698NaMSz7WI6|1fB*zX2I z@-H%#`uh5_?d{jE(N}O6?}}E?uJjN{IqKR=&u4?B{g&Dc6(eOiOH{gp93Ow!F{PMQ z4BqoVDgzu5cM%U!98rPO2PR*H6lzyjz(aG&t#q!a{Hmkrntb(qC+>CIag#rp9VbFI zw1wQ896syfm|HK%867gYy}z23Un!Ov*O9D=?*Y}U2PMHXaw&(;bt%JB$#BI(Z5HAp zGcbJG6G`!Iu=jLk9KKY+A3&1jX62(qTB1W-YM6=TL0#d8f;AA@bl$^XD&s`D>G|LS z3M!yxGiStnkz@J>hQje|GnlqRKi$GnjKi2Yfg@clIVSeF&p1fjoGYc)E0_6>nKq*h zzwqI;s#(-AbbZ>eUzC!u9qH&~(MKWXquaVgyFQ%+Jfk2o$7wvD8JTn@ATSm8CDxIE2K@`5x;I>3luViYq{@w|Ml#3Xsokuly*hYB{@n=mwy1n8b?RZjpyrz`EK*OiPkD2q4w zJ8^&ODtUn5NU^;f?R7cN3xo4~waV-F#Eky2MXsL6z)Vz*+}nNK-Ip9n zvW?xphP+(s>DW;=a1tc@M;=%pL4d?a;sw@=#EXUD#EVV5!3GGTAc5_`$>z12O`LpA zJ-WK9``%k!x0-AYo3P2zeRQ2V^{emsJ-=T+2^snH1206gjVLqL)ebih&@ej|Wpidp zBim;J-*FO4qV48NMT2?dI94OKD~;p~&7wXTZR*;1=5__n0_>WVEcH^Ve>QZ?f)oNN4)9Ej`i=D~-6W z8&Y_+kCje-dFop2L8V>EK`ll|N5a{#N3G+OULkN zb@v=pJ}j7%A<0xQWg4a#$1#ml0)mw=2^bqvj!DlvYykXksX`SP%^IWfB~-vaSg}Yu z-6qy}XfSg=mDzwh{rv7ORpGr|jRbW6P&v-W)w{jnXt0<5SUOxYgyepNW?aStho0Vx z&rZgf)1eHV@I75-&KOs6I?TNZetdZLk>=AqMdQJHzPm%2n`S9p)Moadx%)#ClR75v zMB`><8it9XH!TRNiCvvenl-vEGej-Pn7NynKJuMzg&|b^VmvmH= z{><9a3x{$EX{p9%Og&rA;{QL`c>4c3`3EZ!_^g+)-huTFG~9vvKf3ScS%XpUvCDGMh|*#f@aS!)eUpa z7HoQ-M9j|$UpWC8=Ud$&vFsLvZ(B(pNr8c+#eCzdgz<0h70%l7r9Y+v6@ z_jTf6n13#mR$TX7ctH7r{M|arZXf8mu(sU8+EN9| z&5iG!dgbJwoZLV86Hol!6E~mw!6*NNC$FFW-%fw)w7K~QoBhoXoceb^_*)$YX}sjhrO0yx13JV8pgeq@OS_X4*-l!Z?o1 zFo>BjbF3tAVnxdR^zPgXz*v*VTOO=5@OOnUp(_|`!Z4B!(uX2cC?5KbX>vuMZv-xh z`aqhA?^q#9Gm6lR!RC1LpU%I4TTH>Z{E+V{Bx*ue6Xe8!W(W3!7brIhT*Hl{#B^D2 zh_qJXCNj1ossj)SyB31H(aArZe*vf1qR_S+&$gw$XVh;3#<3wMO9JMsDKQW{#*sui zobfxKzGl-hlxNG(_hl$V7+G@j^?4UCOAa)GPjnx-1r;Z792>4AI<;*Jyo=zC<3D(&nz=DG1bD!S89ZdfT?? z$9BTlREE#IxRMcNlh}(BDA+8+vm(OflYcVz0+wG~AQALEq7P(7$_Nm%j8V1JRrkb3 z6-Xrs+-{yw$ey__+-)8$lI)aWa*aUJ9O<0+kKa1|;ZIb})EtYZ*;MsC3rS3x#3|wj zG7*V|w7Vr0bI8)Qy#&5}zNDhqSKN{*J&nWBQfmA4lF8TB8l-~g)#+hEy@EveWzw9B3^2qSYmJdqq!GA(kZ`ysW5RY z(l%Kmv{X(M)3k3u$rnqzja(} zl!Et@Crjgq8KBObrsRrNK&}T41z$laj@^(Of_L0R2P;wmo49#>{sn^KHPG)^ z7+3+DZ3jF{lQ-MPj6Cjuk8}i3XE6@JyJB!TSIEe*v09VYGV~*H>h$~z_{BrU=6y^^ z_%VjzV~QrPC#^4m15nFQ`M%+}JmJu@1Q3Kix%9xrND`P3lz69}oPPngxPXV?EbtDH z2DS|vVWdDPEbKzpS3?_^MeW?-or_E^scd$~1#u%9nG@5uHt)^9fL&}+A_b*eGciNk z6AqgJWrZWnD0EG>9ymbw(87vro)vFeAoz;3nR4dVV~V_|K0WsW(81?s8nVkFMDRg? z)$qo0w%JIwD=C!ik;x;k2R%IRLJbWNrY(9{bzOsCliAI`d!`ICPsTrg1lb>D~5}4R5-$Y$6Ey7;&La*@-VK``cB0(y)W1A~))u6mL19EF z7~4MX1E-T=vowH#qm~Ej(4xhlddwMyf}CfnkU4ZhX4V0hKTn#UHDmAOe>eB@$EpA> zipd_2AYh;f=!`gROm0DH^x%Sker(cTZ-fDdklsVzk1T~@xK3iSbtnJHyw5kn0_h@Y zJBqL$*ySvXJS-FRaX7PLTY#5_Di_rwG;7uljVfu~;TpA=al?*Q#sFU!qsEl&h8y2S?S3dd2^FH4jH{PLL zO0I*gbZj1&?zWRYNe|v9horg7=I99s6^ACR7KyNF$#7kl^g2QgtWuo%f9HKZ17Nv* zDqK3#^09X0N_dd5XZb?8eh5&2)A)P3n?rJ1<5)VEbgl+3EEHjK>W6~3I!qPd(Ij77hiZMDtR!VAk)9#yqDA%+=1KtUn|1(2eaXc1oiQY$n{*ZZc z?lH#ERh*MV18x-Jg=3J?;E+!|71_MQc+dEa+zb7cwucWyV$2F6#`%K4hF$^$(*J+z z!!rP6Zm~$K1R#xPyg-2@Q^sKx7y^%z&-5+)euc-zXVa_0sbex8DB-k#;(}2@{3F|U zp0MX%z$_j?fUTRBhWCIfkH;a7-(`5Te$pX?@4#0$a5+u_W_Gw!`icM`KHK#GM-q6${ri0|=TphNbJ7gbG9#%MiVA` zo0sNZ0EaWb01Toy&lV0i@eNPk;5~?oxv9^@px^V7&w59k~DGzMmIf{PJv0$FH0M_;_DsY@n9MaX{=H384u0 zaC=1rhT_ELH~ z=an_k48g;jUn%sC1!!!r5~gWwlm>YTs2RE9f^Rnu3S zoV9;M2uH5pg!J^**e_^CXX!!19H|NngB>3@Fm&&NT^`ajk?u-<{kUj1jm5(tw`YJ zSyIcRt`<1Lq;x{VibW3#6>6J$ht2;aZ%h{3B(WdUBM=8J-7>n4h(=UlRBoC4GVhIyLzZh` za$ynfziFDkl+|yV>F?O|e#IUi9!1T?{@gxR4Eq^h6^$%?VzpHJk&VA&WrL(G^PuRN};G*0*46=@nFb#f8!Xm67cB zYgOYV&T$o2F*~qk5J+VXv8kz|*c`U~#^i&!&DQk|D<--m)_{CbM_K8Tyu!uP0*|Sk zHueaQ%n0oF_g~C20#8nLBoH(deZ^okFXHE9Hu%fITH1{Z7{~)(469Yja&f68La~&Eo$LZ9MbzsSnL_``2Gv@4$Ko9;Y4H zAMXED?gUP#-02AgxDbk-00swr#+0HEnt;&N)5$?-nug(r%uq6p4OK)eb>{%H>meKw z5z~y!qcIe0Fj?NTEj3-jiaUYD8s|8HFKu^wZ?pWR7KPG_v{MpV`+)O&z-)sLKUL?s zfrVkLmK#{Cs)o5P$rD@~Y=7CzfOSk3*#Fc#*w?LK1(A^!8-Uz{scTI%z$CYVM!^q6 zq5?}WcdJMBnT*yvA3>Dx9Z%^ga!v&w1)7F(Gg&v9v*NIyZqxj5>P;1W=9Oi`etMBL z>`zz!+tm5XHh6K^FAQU~V82+^9N4d#>ylu9ZLmv+{W>O__5c6b#?ycA#VSORyUCsBJGXBt#EnKbQ4Q#!dfyY<*jpL=hLI8zzDlId<;D0Qssusr8huwu?#P1{_OXIB>T z*VZ{LF@BuN{gL*0-`f9l2JOG`{wlN=d{F_UVzCYHsbN!**QC7?Qdam$VZ9<`2Y>^} zXCljniPtpv65Mi@37exO;Eb}41MNly+AU+{@LVr(4xV2IJbR<1ck}0$nTX+$%-CT) zT9B~Y+ePFa)b0W`4K!oLAnJ|=V$enCFdFo45BW?$Uvzf(NZIZ04LhHI{guw+rUsZk zSS|aK?egVxm)|INx#kg|4QKU^fZFD~q;p_x&`^+!`p-`fsVrAmw%GI9CY{y)pWS%o zBd4By4CA5oEw6WAy#t5t0EMCR^9nLd4vfdJr@{$tBRc@|EY$i| zjQ?mr8(?Z?bpr}xxO9DqwgpV+Q0dEtO`+)$Dt_gvHH8*yoa0!gWjU6=?gx03iKgll zSLgQw@cyivhmb{BV?-KopF9GKC08T z5}D&zqEd#ACxV@5ts%RaNCO=@t&Y_^c%Rb?@cgqE-n_J>`@O!D)l$!sQiz{@@mU1u z(r`WP4U6~GMKRJ-ImMSvpCJ3~UjKG)SyB7}Wz>fg#kbfJ@E(4#t`7QNR&s=yWKfTZ z)MRq0T{k@_#9zHufb^ZOk%@YMN5a~QJ2eJXj&nTJw&Se+A8kDIZ=Q-Co#1A@()A9k zci_?3f%`wbe<>pl{Eg>IU(`Si*D8cq5!f{uHb9~j^HM@C2pP*sw& zp;~c>5`m$`vJpfK5g{<89U_p}#1+j}z`>a79oF_cD`af#`<>&Jl_>|jUeS5IJAAuy zMfAiCHDKMXwhdf<=}KqjA``u+ogwv~K^H3j=+3SfR`sG%iNl=ae|x)so7&KThI$G{ zVl)!+?X2B2|JCtF4V0c%kh-B2;^&*Hr!SavZ|n`|oV(o}-RxXDf8~{q*kgvFH|ol? z_4Qomr8}&q7wZ89N>IB>c42};V_+bX5x@A^>({Sx^^GUg`WNajn??m$L0YvNLsTM0FDs6|-In?bLWt^(?z3mvsJ)PE?%62D!HF=C(cI zuFf&;w|Zhn$L;f<#Szwh@6G*-*%9*XFH9dHc9G5C@0eNl<$y^y(4!sJ9$H&c&5PK$>u|Nu=^3E;iC`ngX?}ck6hduuh zPrPn%cR+OBAKdAHnzz(o$Y9!3d=7Ss5obZFL0CCX%Ci8dpFCXh&r+S@Y~GZTAH~n-5Fe=_K84J|rPe+%lYB9B;w(@fOsA^z>n_8l*2^VGjz@ z3nO^sZR|L(TEoh8{D1Pqr#8-f^7Qlkv;MQd4&2?||7>DQNLkC|Nm1THHOd@2;^mLjwU>Km_CJ&3-T4yl!Y#))3t~tw0lWKXQn()9f2EOupG&cDlA z_H+0A{>vF0esgOKhgO>6Dim>`K(uXoB|H^dz7?aB>jajIM2?D$&^4Wq%!ITQDGEP~ zC9`rOi4*Cgr0524GB{1(Fke9h4*g(tyuWgVrAc3W*a_~#yur+6o0pFO=nhOsl*qTU zL(X{E!2_E}3jf*f{3rTsCOOd`Tpc$o%t@UU4&K}heJx9!ZC1#vlc%gSIKBtRF=Wg_Gy`ZDJ7h*LM-R&1Hym4tOZFNgG ziQg;{^NsFcv`6OjT3Taz;hGxYw{^~!7@Xap{svEiC_d_LQ~1nbc;UOhJaNYt%R4?Q7N_g6 zc;F8q%ZY9l_-Q^FtU>Pjh{g!EIdMfXbTdc@}`JY}0Urmqd!b zVMn-bBcRTgz?+%(Y^0e@-|$w-w@tT+HI`6)r4NLt%L5$1D|_3c?k<5hE?>MS+ou(~ zd`r+O(J3!UJ`z$x)%kJ$>GjgW+w+}k^ivF=h}69dSNgp!)wuM(UstMc>~3~yIX(0I z;o_;)1=~uB{1CAHd@t=!=cX1t_Dg$T*p^yC*qJSV1gvQSKC|Ul&8dLTnVV~BPj~(O z%Xuc?BV*4t%Uc(j07v($#fjnL(#FC`OfxZ*3<5j$Ow&d)*YU{%&;}=B(=ef0^n%cr zJ{S7RgnZRtiwr>d699O6 z-D{eM;q|Q7t@HBqb&v8e%gtXQ%qtglltr|Ka1)z4=^oZQ+?HY!lK@t(u4)ux6f1wE zfmLMj|KHs>^Qp~0+4#H54F8w-+4r8^e>HPhzqK>QUjitLTx(I8GHf>>@#@SNQk(KDB>?ZSl1H=6)(v4j$VYd0BJV!76lcVcPf ziyp}y55CeAFi*y4ny4J;tfUHPA=Vx>4r|(_C9;lTjmllAwAXqI zgwzgb))1u2K;7XG?(?+WSf^vp5Bce|JdS@n+@oxtzDD}jb%Pk?GM!bJhu9N0QGGdc z#Gd$x%7%6(L$O!#TRRG|Cmvc|$gbGYQry)1MPm;ZG^Lgx{E%IqMD$fOrU|H@xQnVa z6;MC%BMr>y-j)3;d02m83MK8pFBrXSBS}0@I>L&hm^LPzTy^XOcua)yq97(e8-&7O zN*I{5>@X50L%V*6CWH$eSW}eLODIut@rI>}nJ)z{^EFP`xI9n8ap!t}L>l%g4L$_d z8eq;|xqh|vtm~D-E;bFC1)cTopnHqF1DHwu3FzD*=&!)%RE3{HzT{4dvVJ<_KBe9szzQw=ArjFo@=~XEGHj` zN$;%=e&$bc#qhJSZM6lVhwl0mims-0O#*3pFIDpzW9XrGx{!U{{h9q&^05CWOF%WY ze57%5p`6S z4~lIY_H^W1H06rD*`+D*cIyr4Y5HQ=hv+uH07;B=Xuh0Nn>c^R0cS@I2}?8Q?AByQ zP6s+L-R+~Zc(?H!yCY^lHKRZTQ}wW;X$o%l2Q*%0Q7$!bKE9wA$mVuFGwAQ_;&LK_ zb%zj_n026f+C`%+|De{++c!~5+)LA=ngQSr-A23H{q9I#r<$J3dPZX<2X}U}wxe=Y zy7o@2t$&O0Qks^sPyI{|AvVrTnJXT1IoPX+6v|NBYvB8%4= zPNo}PN~9l>E}rTZn#vRBQw=)&QSUGxo20P>jBA7=qqHJ-Jn#RITRBo#dS16|{(R~l zC6y5NkfY>5n@pQWNE+H6veS8R`%sLgddTRtR$Y;)Bj%`^Inr$2{qp|n8Tx(wSI6i_ zd!J!?1@EH+z}c2%N*Nk<7)Jrg8N)YhBXpGGnx3W5OtRyEd<;}xLP8zj`kv{cMUG&( z-7F!Kt)PN_me)RAKtof`w`dCe$d}kw>$E5((q*4tpxOdGvDyospQz~y?7X046uY}* zSW?el8(n4Qb-a$MK~DO{Mc#;gXqcfGKlqhFty+(|b%c5t54#!s(mNxXkLbl3*2J{&#A#m9KYCKBK4{gtnOecx ztS6QmIM!7c)GD^L1XrwFQ)6>#9rJ2E1I;-6pbe@SFxI-AS|*jn|KHts=66oVC%*eQ zM(L}1&v#$meH;Gez0u3{lPiZtBi{GnPP~uoxL(>vug&0}jw(g@J$9(hEme6)l_t-Pu z#DZIGmL2=HP={t$Xb4?P@TSKrs^#9y!=`*2R|}fzJliEe(=wlKQ|QUpRO|WP`>Flw zdD#D>Q%;f@x&>8P71xOnDud0bd4pXEZtkmFVOj%uHtMr#FfcWzLLA= zT<6-jEvsnC%DN2-4%1wVChgPLY|B}dMHgLqv~N*$L8wNrDlh8fBc*yEYHLSxiLy^x z-sO1SS7iq#2SFF)hsvMcY9U!2n`#}&Dtp?@lUf<8YKEMZJ*a0_S^WQ{jc5Lw&EGxo zrB#iEAJKKaEBC*Uolalxm!}h~K0fu+JcM^;6wq#*#G$F%r4kv?Ek?_j$HbUTVmf4I zEHX6%Vk~{#Es!Xiq_pe9X5fm@Y!t%hOQ@Vqrft^ucPk~`_D`pBjSt~;%FlsjIMRN= zUU{|a1YNV9Z@Hm$4~)t)J|tJ%+zBaHb=YHG+JUje2i*#a*Ll?UKD_^Pd7shGPQr{q z87oH_FLZ_Q;pR`0h#pmRu&BAyo9f#Egwt^hMPHg3RK6A{v296gZJNGg2|crFH6W)# z$DHROSN^zG3%F|7(9&?L+|ozNijIeg0k`*d#xd@8XfE^{s21=Jk zeG|PU*iQt~OcCV!4C)KZq>_>#Cg=y2r=;>AWu{2lZ(vpsi_+TI|%1X#nkjLQZY#1W2y7 zAsr7Or|!9yDW&oM6X!P0+&KN~{ImYE-ho4QfP}^uXA>G}Vbw1vZ-n8&3oc|ByN2OL zkrz8UcOisQwgoA;w3v+ZU=B+J0}p-(`K`yqoE;~go^&`yPlB%rWhSX^O*5>Y(0CB( zc3g>R(wqFSV%AuB$L+hS; zm1n$^ghsilhjQ#K@j)N&Z2DYQTB-A>@4mYKSMt`UOJzcXjpc)sjG#l`E-c%whtfARh5@5eG(I6efa0JNLFvE`B~4s+ZE<=DCCt=LX;dt) z{gg(zw9@P@^==B-4C2lOO+V1TF%Y|mk7}yIlofS(sB^@HCo&%ow-M^7b=EP~xww>D z$%^4pzN#h$(z=^|)Yg|CdwV9*48V?BX&ocE`vdzwpCQ^eu1z7DO^!9s(K=xO2Q~c& zp|4!@pMxNYJWq(g5@v)BK;l@jlXx%((7zc#UQL=J5*7`fk)zxQVU=d%33>@7qUA&a zx-Cjm3IvwDYA#f|+R}y}muAZ>co@DcsV2C@pzZ2IjL!27U9n@N#$#UEF|x!5eZ0eCvFQ94=11q2 zF-`&!mM4*kK!7RfZPFwBf)U!lgO1VEWLYHoTr1XS1gxk)Svb7X@od9TX5uyDHPIn3 zODJJxwW9NEX(hTG5m#^&Y*nj1*# zcy-j)zsI8U+xuV25baw(G!>oGU|r}(smKMSlmTERh)|>D7doCxw4TIfg!5!NF=0Dj zg~3Tj?vde{7Ts3LN=!&*8*!DS`9_vdB3d@06l#pi2>(`Zow`t06y7Z2ub_?g_wN&Vr?=34BoW4+} zo9lbw&D^5dQTq%uJMP5WP;QFB4fHYfsN`+x$TvG_i@6q1E*vFIV_zsEFQL#;*_305 zy=${%PwRR_m5$q`^o^93T6#p48=kO&);*)jr5>0aH1l(+tF2Y*__e>V|BG2e_;)`y z2~tLA7ks=>QJNmTYlyQM%Jl&zqBkpsAx=tZDBo9(MbnX)M9hm@UaX=dViGT)`GjID zx|vPVc#kusl`pZh%?B3QosavGg7F$6++2;gvlyXH+7=F)#2s*Z_1$Z&K`4!THq=*q7cJ(o3x=OZ=;Qo-w= z)*#s#-r=)%h76@k#fKD8h-sYTz6RrO5B7RJy~OhS&rhN2LCPa^_#7lXQe_zitk3W6 zUf?EC6ybJ7@^RVVXV~%L2J4f?Vid_+Px4Wb6d=0zB+y4%Ew6)&o+3eo< zU0N+@ukrS@j_8FI9kR*w(s=9lM=J+G{{T5)`|nS)1F*)!t@Q?_@&C#Hd*jRp_-p-V zy#wnVcuaNxZ&=RrhP66T!A(K*O|!J^nL>&Pg$jYPkq4I&qa225*vJ}33dTu+V6p8g z!h3^uYo;Xw`VpaLZ|Du{6|A^7oG)?h4X?f7)%J#SLtQOzxW?PF_J&8f)0stZaG5_A z(d5JRhVS|JHQ1k(im`1_R^MwiZsOup42MM#V{7@ku;JY5VYd3T(75dON zL1Y@mVeBO)sUe$GH%DmG3{g;R16aKbQM$y3a3(I)RW}{Y_M|{D*G>ro^R}j`1^}%{RZX$vtI>pk?G*nP=*^p-5J{iQY8?Sac%-o`?Fe`T%;k76 zxPZZ={r?+(YvY;UJ$;3LR{hWZU))bJfd0-~V}LgOE#LBr4tFy^$t8-7P)0gmA47O= zBGwwgbLGVVwhEYtG||$FLRZ;BIG(TIfKiN%#vuVr6M)WFPzhQVYH+WVm|7nYEtgmV z^jJ%8k}Fad9J{cbcFtbDd~JyuFGU6`D{yu!!>~KATN7PcooFvXkGlgI)gS?mD`YPq zc8&FSymQ86wQ`u!Tj5(xL;E{Qq8XlL`Ld?2?LLY4n-rZ{L8NYUv&?*&9{=LAmy;Je zpSn33?Y{WJ3txOT%?oy}zW&EoaJ5lPH;k(0qm3M)BaE#8n0nu@-f{D;UY z<3ILe+w(oXpo^)#FFdG2Vx|S85#e8{Vjln6|#my+C3i3<8B@HDwZ{I=sxse z`v#BvUa%i$u=DMYOu-J?e`BUU2`dOX%aKeXSe1RlhwYE~$H)SQfE-Usm#KS4c{HdA z*EVFRU@|uXL1J4%xZEUc2X^!lO4wPcfuwwCCEnCg6NY*npeU9E@Eru5%pcGb);t94U#EGwJ;-`zO#<EE}MHa`B zK&h7Og&(675So$n_<;sIFxd*qlPVoATgXAKnZRi3F^v~kB1^@KS>Dl9xlregtT9^G zWIm_vbQ00sPBX+Tjqc}k4ouNE-P!APNd+J(b4RC=NfV^Z-Kx|F1GhR?Z`JP}17G_IgIf1e$1R!#zS5@ZBHx2^xQ}H{ zts`QshtQ_OUDKeN0cEYbsbf-iKeT@%PmW%hLQ5}n3fE70k?ArLXCy%qlcz8gOaqV( z7|g$cg`}~VI&lJB$s&s?rH9J1X9UcvIH4`+LulgqVcB{KD~gu+(n_?<>qg51#G)|u z`Ca{{cQmKEOvmu3iY+BmcJ&w(O>-An#~kM(T)x>WhHy1Zpmh*?;6~64oeo`Q9WzM# z|4;w)#+jeyul1kx4y<=zy#wnVSnoi+9k~0o{kQXm*;0QS;UC``%WtDQ=p(Ha#maYV zX&H`3dzNBE#E}6MT0v~O{N=;R#_&iYWMB)|5-6OK380O(kx!eipmb@obf)LjulHB- zR_*s=Wt+qjr(9dxdV8s!EuWu@TxW{bF=SSH>Uk!Gna)eA&TN0|1ogu(&0X#md{~op z|0AWir%5B2e9oG$=;~^-e^%da9XDvk8!j!Vt}|RQm_rhsjq7XWq7Jc{Ww^qRs?{`h zs_WX#-Jjb3a$e5)v2jpOpPOMiMZ=RP-N-UMWk^XcfgiznYWotg65D_$&;#r|(9vZ! zz>Ivj{hcsI5XrWpwC#X0P=lC0UqKcB+SeFtSj{QdH)Y6L5@@ODmue2>y=+(1aEOd* z=cVnwe7j@PCVKYTm6vXrO^5=QRKh8uySXbaR$D7oKZ|dfjk4SA|NrR5)4#HLa^s^@PT$>lzn5d%aExshG)0bAPDT;lt%?ZOeq46d(ESm-#Dm8}h2~*&| zsmLLWg~!nHr01in;W?3^!q9KrKB|{cLAuZk>PNAa8stGp*YLznyVkQ6mIhquELfgD zSGiEb(#!z0`(pBEJZjx;=S?#YZDMolLRRHz9}5ag)h2y&fmkiVh3o%T_ z9D^`Yu854dS^6wnK?Qgm)2k0WHC?QRc9?Gw3oLOb-|&lS`1Yv3TNG@U7*8H>!RK{S zY$t64e7o1bO`dBAG5uht+Y{Txs-ABERybaJJ+TMTUvJcvRHozc45Ox9hzC1+L+u5=e(`GRmJJoY*(_;&KDRhLcU11~;AppVol8$Un_XPN?P0%@ z?ZsYC&r|9J?(}a+lEjxBgnkdX=L`zPM!lENIk<(>;EUev~lKl`D^`Wy#wnVXm1C;A@_H)$nv-P zWA`o}_4SKs4~z1sWji)`F&R_)bP!$)5*;*}alq&Y>S(bOswhOI5%LN*u)`#PU|DCoVMh$7b5`>y3?Wpwef#z~ z*&T{=H~P0;=&9SoEp7Jr1yOPL2F}pd?QTz}M7O9$_C{Me z^R=x8Tf>aZVr$ALc`hwmCVKmNc625`veVxiK|+n|MxC>`^K+fz&U?4wbGine3y3pnlJq|Z{4w<|Av-H z;=`x`)-QS)yf*XV=kI>4SN+{!zn^81zW&ikH^Zb1mwOqyVLt0XYB+^UFz z#I=1ZjJznZYzZ@#<&jnjMIv3-vl%mmDGQ<&Br%#4>PSbjf{K%|5Nly2q1k@=I$z+_ zaZ2yUQcqLeTT<_>T5OX1YO^tdx~(qr4wQWR>YgW+$Ju_0gfs5wC%O#aT-Gyfj3srS zYF7XMg^e?#(?7fM3+;tI*(dGy_lFrW{fkeR$V3YPqfG@e#ikj=abh`?(Ii6A$b>Nu zs!XY9eFA#Wk2WLW@>RH^AZIb)UR8kzz0gy>XsWoQS5QGFNXKi>iB^(*2LaQuD#O_d zOKAEmVl;!TH}bsB%Rjd~kg8s(bL%r#KR<<8g-RH4%-a(?X#epy*#X^F6dTF^$^f~P}bTy0MFmx$ust`wby0` z$ovhhWwG}@wm--q|69~|Ze^JZUAhR2qL~5(H5Y_e5`R>fq3;Eba8(QwYXrZauRT=;O8=$b;M>XC?S7kpg!LlR#rki!2kz1Us@93U-tP^h`!fL zD}qUvGv5X>b+_o9 zq_6x^rWZdaHFx)^{a?x(&cZQ7>hv7VV?|lOv<*`Hi82x^K!-Alj1VI0fEKebbWB)M zk->A|(W>p6{En^hIOd6upEJB(t$8?I>S(^U@Z?1ob`SO00K~hup9M zq}Z(~)U34NEDt^_7pjS))o8xjGuz2}Y0E@X6JN8sv};9U?#o$YZs(;tyJ9%3l`YO~ zp)SHzp7mNH(`D34fryc=v(+t=aB_xHn9D4oK7u z(#G;FEgZWwZY-Z}MA-WB-u4|`*f+Lz#Yo=V8j;kB#hn#uP|&wozd<3hsVS!nzgYKW zEYBIsFVMO8>b11JRt*?SCs3VAF6L2c(c*gWJk#Ng0(5QY9HBn=wOBU2tNMSw(wDlm zH`Vy=oR_k{*Bdo#9=LY-Gq0=ocrM`VhSX~XoSSRRUeLNO;Bj(|>vxm!xrLgCmhf)2 z?laFC<9q1sZ04!YZb`lO^WC4_A7yESuYayQ#?37&u+8Eex227Gfiz6h50fbLd^3bZ z(28x-^Ek|%By?QVRw(={Gzl#RM&M%!>?rZA*!9Dp(K((kp*+abY{4=L{mm;B-P3=M zf7XB2JMd6;;N4H}zmp$sC6NwUUdM2pf^EXHk#S1m(2r>i5k^SR>bRjRLSI?xE3Ygs=E^>Q zBJa&;;z8xZYW_2ei}_u;m&bAO@gkmlIkoE3^NzG)1KU5+nrFI;HI?ql%tLMcKwIKt zZFZ0?@?h_Na{qRg<@)Bw$L?`j5_JnP0%X6KaUrV}nW%vI)YJqJB4R)BB>Am`L`)Jw z!(~NiuOyKWG$km0G)Y2uy0q-d;#sbI1toqgKg(5foTOY?X=9lyvpnF)U8M!+2H*Q_ z1g@saDyfU`jjH@^EbOEIkaWiOo15-VQ1O z5k!KCggcO~Dc25A0kHY961X}MfF@%>+bn5(D{=$qYaB8I4e$#eEL}ngU|BD~B4iMi z5U~ATfMSIukd39GFTJz7-5;pI@-S`YQWJjBVKXyT$7qLw!Qc+RJQ(cl>M6J5IYqO} zx{_Vs!uSGpx&Vr;tqV|c40?8@~r>=_czX* z*!+`?-+w5fUyB#L_mTat=FO*Hn(_htuxPAG9K%kG$V6B#3Bgl(PW{BN2^G;bvtjV^ z9H7-lktzxt-}Ayi%TOB~@wxzm={D54>Bh9FF93GoO zk0E(R?!_Z*NX;OB0T1)uhxWgcgX3!@I0jpR=N6s$rm};`j2${aJkRk$B{gYl;tE5> zj?0uNTw^iQq4<)PVSA2c($;U_kUBopu1sY$a4^km1tmBxUOlQ<_(A?<5yxBG)7&M!@0XCmH)ZD$UhYXuThUy?=3 zoWzHAt-;<<6DnrYtZ86Q7uPlni&~^P9YYtnBLq2CkabG=sy+{nfIYwEutesf}k8f35$l zcVN8(>m7Iuci`R^_J28Z1HV0$IW#TP&8shvCuweN^yw(ccuZsZfu-Or@qH>Tj70=q z*wRy0M2$HLpe|v6GxQ?FQNl)UV7R4MP`ZI_XAT=SD3H<2*Ht=yq#_irZO;p|Kqv$3wCGTyu_V$e$g2n+s8tC)?WSYJH13#*6CldsM<#?I%*8iC z*J24Jyk@yaX8|7EO1<--++)KRU}A+20ci8VrecKrJmLfWRORXHE7#6X>f{}yG&ROh zLgYim3;03O_dALU#03)**LeNv1!D4%8lVfC5%kKw8t|XG5)}7$Nc*S3KY_R=r6o3> zq>Ji^8@etqB0%r+3xk4vD&r-2_4+GU+CkeRwyC~GRsKd`j&%{ZVtq@gwx@3?YdXvT zmj=N{>}`qAkG=^W4~LJ~sDq3!jsH*m>Bcj+_-p-Vy#wnVSnt4lbO-iN@BeBRE6_C2`bcpFdgKsadJizM+oz3+Z}T`13eF zm0id_<;Y&314XWMCy>5`c0DFY0MI{0*J6a!mKx~c{~28fzVLRc2Zom#@#{D7O(__q ziGZ9X5kp`G_jpcezHN<4=lVt9f!1|CD{U8tIG@MqyvP?-dY?0f*Shn$HoZYJXSA;I zfyBQu7l|?dJlpD9mJAFiLL&<97C`KJfiK~r36Wu?Rnu|MLkuNTI<9YoZXyEHu-w2B zR*?99)T~c4djVG+iP@wz5^G+?r6Ms{_z;med&Vn<#77$58i`wR0;WuFxk#M$|DSkr z8q*nb0$WEqW&j?gyvVrOe{F5L)cOr3W6p=1eR;Vw<1F` za+w^6O#wlgL8BORqwu9Au@%RhN@kPTKu=%kC6q@}?E+vWHF!{By0L3Ev9!`Ro9W17 z;Y*4SW-c`mDjZf9td3pH?fp3(^3N`H|xX}*F6a;Pkk9a`NXQ~J^0p7h1vZr z^S~`W`ew*GySQ2p|DJdMMBae#LuGQp-GT$Z82_{kDdFT5p=&vj3?qSvNnlBsqJbhN z+Z~3K{0M}Cr!lYs6vCaz^?iLC>XIbLFEjx#ah zd4wbTy=Py1_WbVd_MOh&u70709q9f#S)(S-OxZlka;ZBqo(l3Ub1(L@`pQ6v#d72>yXce5jq=2a&Si2{-RptsD2vAYA$E z>H=KFnw9}@<)RKTsMbO4J#13VfV8er-3#w;YEN5q2p@`3HG|BlEvRKyS^WRSjWf4T|C1A6 zd|bo-<=prFhwg9YS?+S+7Orm;3=2v-N4ZkK;1VeWU(6UvJJ*Rrx`z`-g$DAghM^cE zlR@ml>KfY2pZR1K+yKHV3X+WurhEmJgNc^r`jmFdKAFlTmM}6CS8)RmA+=C<;I^nj z>VIdZ5)T}@J-946Igd7&JLFa)8-A=aYvuvW-q+$)$MQ+9&?#0fs-F3^ew58_b$On> zHw>`Z`8K;RGq2W>CV2P6{Zo0W_b1D6!QVoLHYnOaXh8OY(Le~uo-z`h2?vZMQO{! z;>E+_$pr7iLCU(3>#R>-+CckoxYVcKIs`uK=iUsU>OT3qoA*y`kamU%- zB!=HF3`u1D(AH9|vo`zlSeA4I+{MG$#zEd<0y@Fm zJ8qEKJPIZ2wE41A&AS(7H)HXv(k!TsAMomc>Uc@@Y_4@oo!#g%n0lnGt{LXeZpY$w z_wJ|epU$$GUoYtkvktv6f1!ZF+DFmEj_GAk5%jH=8A4Ly31-}IUt_veZOdnV4a{{( zEJzt9%Ak!kl)gv9S%aarVhJSz*LG1WEsU+VJxnaEd=IkoZ+U>5pRc98ALfqMN*A=^ zJk~nnXRvKz2kU}c<)JR4ZEIpxhdkHTL2a2&wi&MEE2{Nu)A)bm|JXS5)aldw^LYHZ z_x}55GSK|ih042KnuHIMI$bS)8l>ZfXQ>taf{ew*!qDgiq?Bsq@B;8nTPYsKxo zoZsF{+3mftx7||%5p}n_qdU+3@(e;xSW;btu4IOmfzT7HI>dICh0u?f^&AWPi+inU zKX-rS{xf-+^AjZ?5-uR1S!hq8C*>o?>CuPeF=pU|p(9;4hV;;hEUi9eQTq-|D$QMz)mj`oN6kqZ^B3$!z{Af#HJo(mE`zpv5%9yxALBJdVCQy8m>JfFB+sAbnt_ z9T){80ewA5oPc-AbU?cVlX6Wb2_zXy&j|1dP0uv(2dTizLS1ziay{vIB^YY*7A*;avV>yJ_2JSsW#Q)sJofDhM z2fntsdFtQz;BRgGqf-}8|M3St`u^X3@^dFX`Tj4w@1MQzH{a(!`R|;*d*&Z*{%0Tj z^v0btdnZ5s#NR&o*PeLm#Gjw}{%8LElmGoQub=oEr_X-iA3y!SKK+fSUwG>GpXxoO z6AOp^`Nh*8e(tY+^obH{Q}Ro<7`C^4lhU}$d{&^844~d(>NN^sekHbs@x@Ud;>}7T zuaZcc@vX$N1f%zs0W}Qm^rwGh-US@jDymY_^8MIC71ffFjBVjMNXQ3C7(zrF2Zo<0 zgjOBWrJ)m(2MAo6u@aiGR1|^t%G&&2=3T%=KCqw*$1i3E*YFJy_%_x5$VE2BHUlnT z$7sjE93VM7klNA|0Z||vBZOScV<3%XMVtTDybA;{l;s!DJ0iV+oP`)iBr}Hj=5?x_Nh8weZ+c09! z67=bYj!mbWRCHrlB)4rBvIg4|w&#Yft0H=M6OU@7%aFDHU&-cgA8>(UizE-&WgH{2 zP2tC=gp(s8+JPYgej;`~4gzS51y7#6i)a%`_=@6z+m3_eWW4zw9&iD#FeC23G0+i` z%y)aHMTegsJ4!MBVVW_7$)xd-{lzw6PiB{*#D%Vo|IJORzz8@0y?GbFjEXI?B`bAB zg3A(NIrKIAw&57)28W^L2<9QBt6ZBG4#In8C=D4ZdRL5q{p9^KHoy1Q=?{OR`YJnN zu|uTElr#)!IH;(HRDI)!pwK}riT4@fmk1|O{)JlxRb!WT3k@agm%ApoB#(CTg?TsN zU}gCZg=`8%jmWT#Nb7h~IYzqOx3y%aN#+jJ;5qXexV{-+W0Km3t#>lwu3Z_O`b!5~ zpm>v=06TRVzM*vDu?wmqWt6OAdxewgU@X$_5qe#?X4^oQqN zpha@+&HrcK1u&xG4m=1E;~)yqI{+1&2rt=^%-7-sJGMb;RMQeLa~o6UXXKU#;KZ;N zNY}IRkA*lr_ZcuJRdnPd*NUD3J+NHG!n!TUzu9*l3yKU3QE7#1Be4NN`Umj0anxZ5 zb4@?S5Py`Kd zGX-=RVfIX}1c}4xaNY&jqVXLtEanJyJ20u}xsID4To%&{97ep@utd;)CTu7xAyl_x zG|lXo*8~WUxHzZb>0g+00S7234jgnIW1Ex8)D6Z);Q5ws@|o!6(&^?|wt{0q(UWXq zv<_Mr{HTM)+MK02 z#{xKwEr+HdS&;!$@L`I=c4F`@gcjN?5i%{5wNn7a z1H-+Ha8rcoM$ow?I*9k(lUL{7f$0?oT8POj*T6lr1-Sq`yO0x(^Bv#^`)ou}xiJyz zn@iw-!hrB+B#*<5xGC%8&b$k-5rvuJN(eKyk_05MOspM)G!jGDyle@)wD=|%W8m`E z3I~Zn+D$DthRy(wMTD`t`Rcq2c-(MtVg{IrCX5kyi?R0G3{$ed!nPqwZ~zgIRyzC) zDGx9UhY>A4puQza_I#bsV9#2Z2<7E=uYRblbcNqS`UUwY4coN%r1 zfCs2dk|vy=p}vFQiTPNE_gOsT*mVT(lHhVBF&?u+QO>soPF);D0VO&<%i+{OIgm_q}x3$qVXzDV)L%$B*a zgTum6LK_`!4QVF#Lp#$%SIMd}{U+Q5yEa4K-79Y#e6bL^0x zqScNkW`%f_1RywKn=j410CGq91#E5|SH;y1Jj?eLBAB@39O`kX*di-&(<3z2-G4}@ z2O(tu9zD7pp2JY{=Evtw^Bm^l1U_!JueG!ch}#R)<9g4c~O2oaMBYX?Y; zdvAG?2Lz9Y6M=t(ahw11ybAzDMM;CLcd$5@P$sf5YXU!BZ9Rc4Vi$SO*!MZ;H6aMk z*)#S2VZ8b@62zZ@yZJxOy8v!i;T1svNA#psLW2a+5(msMJX>+xP(|i!AR5J)3Gf;* zFjq^wPK3^eq38S3~<$nDtU7aq(=$JoEWMT-aEeFrahG$ zq}Y<_h0;K=)c1)+=+xf)A9R@h#1p4Bp7~?`TK{=0ci@}R{r6|N?|-dd=3~fxJAUDQ z!-XR}-^G6+gJ5t7VZats4=&v21VK;|@aFh92R7bc;NZ}beIO9#odtkFn+DwwI#I|9 zD!Ffh`PO*~sy)1~qcsGXH###HE?+zUiDBo`#SW`6oX**sqtWj0#TQ<oJJQkL>j6zeq{TX_hFq zd4!XPNhXHQ$e=l|^}W#Wgy4Kh)Jhf7F*K z_ny6SZR=GOhNgs!#*d=|^PAXC=RYdVB&mGxWD|%QjzqNG9o~ekO^kndTa}kiyHrxn z_g+tJ>&k3T8wnJ~TC!+X$>?0?Jf+w|a`^VmerLGH*ynJV?CJ3n_0H~gzdIVH97R)R z!$)h`;=vxjK4)HKVyH!{EOBLZ3ljfAaS8L(y3LxtUXAY~Z87Ppos*;`n*hQ5KtNd?~F=8~j@syNXGg^BScch=#3;zHLQrwWM18N3;ZJ1CR|DX6<8&CZqf35$l`VRbB=l%z? z$%XIYcHhb)D?|dQ9Tle-i7bm0vVz1)#%`!pbt!7Y7VeURieq@IgrkeDR4gSG3Z2cO ze&%Z)anjYyJ2W}P@+FkVSnYAIivNAkxK}Ob+uSm&#bb2+TV;&CQ;>Xbsdo_R>fKPp z=xV1sR73uwA43s76{>gDaD_s0eJ}Mx^75&b(0nPs>&`VbxTOZmJJ%~0nmE;uKO1*| z02@3GBOR*h%*NG0|D8Lp=ye7po`0sp%VB1Z`VL1Xy>v7M zP`{#W$fo~`zBik3X@&r8%4ZblEHCkBLZEU*Z_Y8!$O$cF4@)gMgmq6edx%ftx?aHFm(V; zMT`I?J-@W@@hfmlBzU}yyx437z>&PIhR?qES5|KlJKv-!NA1mS&$iy?OG_HR&OU!4 zhta9qNuUE!emm~pMj&1d=nvT1>Blr|3}_-5bhKa`h5kODrI!Q1(U<8VSVSLg zvS)!0RPR78k%}R4H99)7i+A+JkCy|<_o8wA9s}n=weQOvr-Gs1y2A~sbvNa`YEsQo z0Sg$_ubsXB7xDzaov8$XZ+JxlfT01#33T$CsXTf#6XvUY`jZ(ba0&WpB{s;J)1q#9 z2xl@~vxEAk5H5aDudg7tC?z881H7hyW`eSdL zo@)5u-~Gz{4`q4&Z+vVrTV*nDndkXK=u8YR5zHSb&CX8_Dlwr3N#H#3nV1%uFNB$G z7(`%%Ng_`u2XZMGC48UOYx>x4b%*`IovmJfw3YOk-umjZZw>o<1F7C(S`k&IXJ7p4 zv+|a@e36-`aZ{;YK?Q)Uz^&h`QZdJa0H_*b*PSQi(zjsG{UY;69Q{B_(v z`zP-IKn7*s*&0Kc7H)(FB!@D`glU19a3KQMheUy4@fcDc_}m~7f}ReZ4ahru7osqz z76K?lG%=h<%`yofnoA$+D$P~SNovM#HrdctA2TnvdSoL zD*1NW9GjgFogFcFdv8}aP3!VuDT;?Co_t%}P;HDVPa+|ONL>-tZO(X=ubafmb55KYS^9btB@ z1M0+Xj?3GRf#Ed+_leD_WqRNFiTmH5f$-n_)iDU`89dJ@nBpMXa!o6N)+nS13TFom z&z`38aS?%ntJH>T0N{;~E`=`9@ic=B6pj#sS@3(p{Mf{w%vMkZ;cx+evhqe8R^}y?Li|_RY!Y7zR$~mW$BqZhY$n+lc@j0d&VNIOAdd`i@_qMvd zExwJ-$1#`9ehM-W=w@K{(ho-ebkdC>ok1Lz9Y;KZC1`RJ{%?6taLHJAZAYcMMrl;(h0GoNwR)((QRto|QuocX2G(Q(87_3y8DV7&wD9a!(cdI!oK zxOe9M4`um?Z=E0KBXsU5Fp3Jhgilvf*1Dc2Q5!)x0PPGnM%N^yd=*;I2E%9%+qr=< z0!+!$gs~dl_|RpF8;9!jf6veSvf^d&A16LhaQXU&*<(bT}vbJG=cJ zAz+$G)*(}uB#*7+5AL41|ATqCzl6gyhcK2%Fi>oOC>?Hda;}uhLf?V3o5U-U5>hMg z1W=JvGBXh4fY#fDA{ecy1S)^N5nGLE2oY&0;V|c>s9)`GoSm&{*7+Vy!Q#1BFJ14v zJU|#t^VagMB{dyQUuVL|d!0g48cf>V8>bj`_G>yTIJzlF;%RkN@^<~fGAIQrtE^Qm zm?>11+q^=MRxYYM5~uHW;@P(jZPQnJ5Kq4u3RTuw>-neg{}V65|HohJKkFT+y#s&! z2kw6)JIH?X^JBlB7uAHce|QtMHSa|PvydA>2+BgaBQR|Q-%u8^tq{c!KV;4_a9}^u z+AomjB5LD?A`oa8p>cxBM(8#1>+=gQ>*3V=dQexC5Y3* z^<3xLm<7M6Wo3n?{9HX^zDrus^F5}H<@TcA|e8+IwWrKfYOs9RCa>V74!WM!Oz zdOh01CD1uuy{WqChi`Q)B%gPZ>vs{$S*?>iU)1qlf+ZjF>(^l6*PsobWf}l=jd>b# zYP|^X|NRRG@&6SklO3Z-h5}_suQV!_2qe;4t)-#R1`{Eixms>hpu%Y)PODXvqA(O% zpDy9RGEBeG$&`_L>KAfy{NFXK)`P5SN7&p3nDzYs!t?*IEbGTtLRV#!czLIEY%UrXqX=uI}q%~)N)>}3Yb@Ks@Cg0d(M^bRr?3s z`b}ES{Qm-PQtL;3)$Gcg<%+yZ&5qLQZPj|4bo_sE<9i!t{LTN0f8LXS?)LBha9)9W zdK{^ysr#{}E7FdXn2=UgTE8`nLNrhvq-hbGG!dB8nwyZU`3SsPzCzUwh9G)l5wnDX z&1DL!i9e99pmYaTCQ>a|R-SYZtl9I@U_g5Gb+y~40h2<~**7n}KGo{EJI=BnDA6`i zSIApG3!N9;ZZssE)rnaB={gmgmXtC!G@Z9?nF=i(3!Hybb?OB($6fhw+CS}%SF`lA zxY}VB(>jtDeNOYYx5V`YYf?&Al()|7Zqz-eeHm=9WBOVrj{*B{YI7R=uS1Qug_s*HT8u&MVzs+VuV7ol85Bic<}$v#-5!>A6mP zrzemn=^(=SHh)C}W(+!KFTV216h02=#qMnPGx4e^2Rs!5r7%xBc~Q24PcrX{Py5W% z8dju0#quMv3n6oIWd3bQb**B1Ub)oaUOU(H{k@Xk-y27CXPe{4xk_j`UeqBr);d@g z+xQq*Su@xzHmHW3-Mw`GFJ}1qO}E6?aLcsJV$#)TLO)4tC&o_{i7<_raeWuoNr&=A zNPS!(BDC) z7RRLzKXClIl47H24SJGXCk<;{-Ng$C_GrtafBfAo0O zf#UoxPx`~};NWhPdER6G999Vr$7Xw&akLJI#Wo+lxyv<=W=K`6{P+fv#s9Z9&Yau) zKR0eYsPO;Z*Y1BTgU|2$=omh!k9vU_=C$J>bWJcYR7!xEMiN^B)HLx{sUpXwM7U1+ zVPqMo*@bA^A<}~yD=g@Nsc8fnxu^LGO889OQ`^%T^cUW|w1u|)>Nu+9V#}B2WyI%` z{yS;4_WI3Kr90}v?$WmB+W$&-ds_geb1zpUr*&yqAV@+S7BiPP(-M`|gz4!_ry_N6 zwl}=km)CBp?QLcYhm1AK5#f0zHm;{8X)G*140rT8zf-w_9H?}_Q|QUVEs>1WU@IA@ zik$iLKzKHzIhi}>1Q0N)&&BTSj@ig5hq}mUSN7vPg{z6}?|h!6oKKhXvR=wjK5O}8 zR|uoaMJ-}(ZDDq0gLP$aa)a|o|B*Mi$znNXIrpU|2Y4q{-Nl5TwV_!_~DyN4lOJA%!iP z_^+B>OfR8=z@{B8K-N-|cB*lPU}BNwtMJ;c>UFM&9*ihEx()tvFBymo!uE)z&%So$ z@^h`jaG_M%sdM#?9;F39&woWP=#49rtG)CNEiFS3dRSoh5rxHZ{wH3^W#VylPp7$S=wsP}r*F{!(+-v5ydH@|sl3OBvb zEy(&{uyO+7#sc;#C4)%F(8XmXYwGY{zTrTvA|fSiTmxwx;Ogym9{VrDM4BO4y=5<8Bw76bha1m)ck|ab{_sJ?|4Y5j-A~_tHV5e+ z8-ujYjJlyyWEbLy9=;$UnSdmkAPpNyD*wU{Le(rMH{_FUIC!Ee&&E$BoSt2%# z@+shxk43huo7~B`12u=?Tf5tPH~7J2 zu4s8nwG89liTfYV5bRq&IfY<8a%6daG%}k|2p)2m|a=6v^f9-ut^i z6EoAp?ipY~hI+XC2LTRAkyIo~PKip&72AodBvn>Y6;&kJv7L(T#7R|LiBlG%Qbnqi z<2aR9Rg!Ya`J8+2ukY=iJ2O3vp4rB3k0<~;({u0daen7_9^dmld71@@8{@aTkspO< zG&-BP3P!(aHJA)xOoK(9J3nDjk=AOAwY2ULsGPMzyE+z>**i?Nb$_#ni{?Zjcg003 z^ip>NW^U-YrEIi|N@_Bzq1Yr~dZo8yRL#rQ=LNZi;TCQr^q+ z%qIPAdwCFgac&W}oJI#$BN$VGk|UbfO8ghPVZ3Ia>ftv#V?E7V@#rl4xA)P*Qe z*`UZ0&&`PQ0y44VCU*PqZ9nX$Cm-Jn# z8k$|(X2LA;ir(rDI@LR}@*Rx;@1#k#F)oiy-KV->eUCU`6|f~H((i5Gx?RLZ_!r=> z_Y6AsbRtCd2AQ!bO>4wu)f-u_e{EQ{T#Q@3->fJwf!*eus&&IDS?|HLe^CetFTbhN z?E>O9N&KVQkvX#E&1qu(6UfPoZ1~4ZQW_R{tEiZ$$H=S>B`aUr-1+mRp8KV`P8BbU zf`B0`7V?xROVT8FwdgM^0`+S9X&zYAqk__kLv8C+8UVT^ujm12q4;7*D?-RDl60!D zuNgwE=jJKYQLN60+lOWMxV}ABdVrVCtberq01Mp@2!jQSdd7R+)GqCt-q0_jBYC7(!!1mvqx&+%v6Jf0ZaY z2%25*!3h$cj)9n3daZ|-HifI#FC8hy4p;6D!sqLdL0^aoogqsiyIu-hiY-d68|WD)b;6qEE7uI(8OP z37JCs9;R*@XO^RqECu5ujp3&VUR5Kg6Sl{Yf4dF6CH(cqJ-pjh zof~e4(#H?qxN%K7X>6%Gx_1}lDxjY+m3OXlrKnrvsbfQauldHs-fi928rLO%;`!!;c7XUH4PER#xMXZ)|VK zjEl;mOI`T?2+2XA-%2(0FDkJ7lmDdc`L1Iki&1K8&v88+hfbW@p6^4~rZPXv{5VK*Ck!ag z*0iokY|n`t5aqtl(+M(Wao`8pi9cz3zC9d2Ju6eCoXASEFpp!0!a~muBX~B!p5x`` zc5DaKf%|y)S(GM$pHe3txh??!Ux&$)|ETr(fdRlv#51-X7>jc|Qn^QsA|>Y9iIR-+ z#>CT5a`+58iK*IQO7z+xekx4HE-c1gcH&Q4pYNLIQ&6OV$MDJ6lCpLJt3n1s7fzK6 zh$aqPpXJcL7lw}Gd$jL_ClsDLTK%{*`8m0{>-p|V=(=_l+4aLHSClWskS=F1EPKky zX z;XL)DC<%SU!-_xykx9=zM}Zfj`)CN=vl~Q#qGC!q6P<`!p6@%3TRq<;%N{wJUZpv} zBZlUOPROcA9|_ynaT2<0a}dFpnnRk(H!0cjolMhmA_)BKL}@X!#z^pAx!2L8+~&(V&wd1T$Kl_^sCG+lHei@+}wf z^K=-+o}XA&meNQzMgoF>S~pgJ4a$6#6C?u;p&7Ou=_E+=oDWA!|6}X(Eu()tD|WM# zXq$3b73CxBPMYR)Vk8&`>;lDu*xGg!Tb6H8I}9H^ndjuGPpe1xBqPO!Q{?9;2?XZpvfK9jC^l_Qh#A5_ z3FV}1=bmr*iJhY?Q4P@d`U#4Tqn2AC?@k3Om*ifaM1g}KaP)MpPJXBT`DT4k!Q@v0 zSS#hk+5$sK9aLzV*eMOX(2*&sPd3JeQP^S@6dwAqLlq7O!nIHQ_4el*`C%|DVU9*RX|+Ay9d`2MCeRVh&s3N( zbx+fy6V6Ym%Y>vZ3^Sbw_h-z_60i>>t^yBvp!!^=sg(u!$yWK~(yPV~(GsGJf< z@iIT&Uw`=I&I?tQ?8?x7AYg`U`DTOR4n#+08jWbhsq4q7=Vd62%;TuKTEWMHrerG% z6$&M`WBJfuTWLR(CT>N>pFoM6SxzKAfa9O9@Dqcf7PS2p zjCErLyD`+M;ucxl|CGHtS&pltf(%=OTPU(sXlo2v;itAV4g+_Tix-k{r(nQNho2}% zQ0u_?OD|T7#1Q947Ygs`c;m@!;F{YIR%ad5ff`d|hSU${Qc{DGaf8I~#a5o`L$UKu zl6f1K*Gs#{esehXOEUHYaTG(TnIp}2I5{~k#rGCV%A@MGL(9s;)t&d0*4{T?9qPIA z!VXP10SbK&?~CvU@sAXX7hf;*@JAh7W*tG5B1Suo6h4UtM2{B)S}Y{Kl*e$GPS@43 zuo*&oOw-{3&J`g5c1I!WNJvUP0au7h?o-V&!jJz6=<%7?QJ90xw^x@u zZ=>09uTOnW=fdVDoF{@<_$bXvs_UMi?$hhgFgoAvQUFv@ISY1T3_|uI7>Ei#R(3U3 zcL6r2M4%5dMU*vXxX=1__JI!VB8W2b&Zf+ff^3ZHQN(MunzOn5kBfjER;f1UIHiac z{{IvI_tM!XPkorb7GLj#75LJtJ1>?#!`H4f?^39@P4^nw)r1KlJ2C*Sn?ayM2oW}L zk1%H$Un7W3bU0IZ6Lypmu#8pU=ROS?@FDb6-D}VzGJ>(2G@hg8VD$)VMF$S<{_54$ zS>Kb@W6j;iJq@Fm#AjBD{$BL2*_7x7x0$rv-Ay9a1Rx&D@~`JJ5-_PMVa>40SkX$+ zi|d9N%a!3+4l?xXg`BT@tdhU|c6UbClv&6+lyRi{+qhcx*kFTkHUm4{4nGKX{?)2R z|9hJ%MdE2DTCG%~=*>cwNm;2E#VMTyZI^rmNj)vu8c4Y^ViCmJNwm=Ih5SKIU?Pkq z_D{NW+F&e0sFlim1!K#h)$%sxQ_otfRF=@#TN+AcKMT7e9lS_{p$7t6=mvWm((IrB zG4E}6uPIFHeeLd91zZnrOBa$cUplBbGHm=LLNOy{H1}fBP+#R(S)Y;X$!M=VX0nf9 zJox<1PgZH9A0F3SCW0EpAR0Uelm(5V16u=4@TjiO5&#_1sgG_=Z_LC1q|&eB=V25(r6Rq0QQIzM6yBir`skKn>o;JZ>iuss?M88 zbc*`_6L*)++~<$Q*J1@0D{u@e@Rgt6Iak^ozy6-u=CD`jUOB|h`8mL<2!0- zSzys|O@Uprk}Pl?%L9Q2o>T!B1K{X5fCIA(w5FoJFj1JPyrpUgwarnaZ9z}YJee`x zFXp<=s~W|NS5_}T+jaR;hlVwl+j-vf8oGDy-nq0pQ0H#-?w;S!_XaBzoo{Rn&S&(Y zBnEO<56tkMsWzb?WQ1f_;4r_(C zB!!&KM|P-$q$Cn^124-={anXPedBI+ZlgQcDyA-jKA#l@ndd9uO1*EjL3T|hF3jvQ zalkz?aW;0Q*_O-CxsYf>z` z29F(mJ&FK|P};Q_U*$-de{;+4S5d9~rm;VN?rzho-iq0qUW-HX79W}!*`)i)TkX-j zb;qV*dbXb%<8JRak^K+Omrv}hlvm&{pC4X{2BSCL9NO8U($;fay^_MUrh^Blj@VcCR- zukD&JliTB>FhAaR?uW*~<4%64$P| z0tNE1vNc|7a)3Yg#a;Ka(F<(d?C8CTutjNRMd{nI-_DA+T1uj-^!8THmXLug^+Iv@46XL<=AvVTT>&=xoE zyk{j2f3}YO;+^Z$HIs{V|MOM)|DRZT>a$OL;+^dN&wlP-eR{_!4V7QNIBKX2=_jBo z0!?PaXaflft*bI0ssb;dQxyapFy9hKi0uT93JXF9aIk&~wTV|C(5Nr-rv=1DPB0!$ z@Z94-*)RNEgC%mfvoj-0ZgsD1% zhKh)}1r1dUg&)2<^jpBL>DTT-0%r%%Zc)n}!*&$Fkq0-L)~N%%g<}JIqEc<@06X+y z3)lT|bKNW1nJeG@VsDLN@*eSU$x5$oOZdAEx_6RoY`uO*xcqYgJT+ZOaCP*U($ z!O}-v_if4miwyV(42lkz1*ELk+Y;DFzraPcMcmgly(|T}-s`Q;`1agA^Owr$zG|jB zQCz(|i;FvT-tW{Yj^B(f)&1hgkLdxN(FJ_yBUt+X{iUaV?}`5Gec;6tcdx)#KfL3W zcFpY)geYgZL4qN#BB&)Fb8L z!UO4eVM@MZs_J_)gfTnFaTd^T{kd%r=JN^tZfx7}#s&6M!nMUi;-Q~(ao79zOGH2) z0N;q&bAQz6k$A$W!DFl-6EE1SWs)>YT9t&xfX?1RmmrA~@*g$Y;O6x!Gc|cG45wCr z2d>N14l;2X`!#zLXB<(w2)I2$z^$=U6Q8VOFmN7+vo#ZIW`fi8)%WkX)m{4I!@INq z=R|Q_aU{n9l=vC^%8*Ih&|Sj$4sJY2p_cao+Utd}Z@ciz!}puP78gO*ZbP*mWT~Gk zJD;w0yR?ntvAZ;!eHqmPEOZowRI+gspZS@Tw@-GP5=vNKmuj?0SbxmDInsD=7(Fl{ z_v%w)k$0)8dcC`m_3qIOP@sX=b%|4zzKentYz5DklVI(dVU0;@tc15zrgaDcq56c) z{u*5zs<-@59qUCpm&a-*cj$o!OZ@*6OTWEz=6_zk%U^T;_2AM@Sdm@3&HLVtEmJcF z?Me`U*{2*VrrSbH2O$keA5#BB*|d^z!R)6rkm0U}i7KY0I2e9u@j(|DeD3MMfA)%u zVC=T1FZs+}=iQoV!s;E2qH2isy*6wadGU64bD)o~m+nt*t2Md0I_6C#CXSoNjYLaZ z=?k0pHCXW`^tvO})p&H!x%P|Z;SAIc8zVfn+{2M#r(ph56a;mWwuscX7gBa}oirpMganp}^eX82#oBkpYU?rmIG zaK)|PQ+<6=(WM&x0}c&!FpsFmWQcF69;0fd(3lN91|dU5#EB--{XX?Dxat`+6eI#A zW(C6o9ll$rI`7dKyj{grd=hZI_w}u^%%&=K%^|IZ&!LmTi7hp;q9vik=zQqf&5rpk z!Ty%bw>#CxXRH4%HD`RenDNEoj9;&2TzW?nDo5GZNtNT6q`lD}irO1#C2MbRw;ZRi z9hq``?8R+1O7#&0?&0_B_+_N%8$UhNxMhUTHIX7Z^1->|Sh1xn?WME{pfeQhxuD;H zeLz8R46#l~JjqR=DJBc!M>NkO8n+eIBo2J}gKIr1{qDa7lrzN;nlCTwAKD5RO*SF#OUVQNZc%hNUPyuIS#TN` zT@q@*MG>u-Z3txd&=2(8c9kVI_G(fsIwm~(Xwf;4pBd@b{bFsqx1p$@IdTbVD9H9G znz1<#H~0f(sPzB;@zR<9XZgQf`p0wb{vT#|5AN-}w^I1uUn~4@#YW4Ueld=(Qd%z3 zW7d`KfR3`ru=^fe8f}{Y(pglRpvJTprOPV+a?>0ben`(O-=%G^<4mRSt09ajeBYma zo_%T~+pfo0>-_7&SCDQex&wRkI_4)cm?@Xot``{NTA*+ebM9o_LAur(h}}CHCXn7Q zfWwpfsOtfkGwRHRm%6*LiOqeNx^vW_7|ztpVUvFrMETGvFP^+oGQBFf6mCnNzq7fv zeT!!q0#F*02n&U#jPIP!OT9HM3Xo$0sl| z(&W3>v(Aprwa7Ho{csNBGGjFU@B@8VN#F4XBs7tR;PBR z13QN?675FoVmi+Pw5CsThgb`CpU7X{y)|o{SUnbo*W|qVta|gq_-7Cu4vPP{ zkY%Rz(7Daqn+>(N(Rp>1|2#ZaqKXQP)K}Dxq6YxDh{0{Wwnp|zY(>;2^hszu2K8frU`2Q1YOJ_FuWAU|EfyD|O*$RAhY3E-nZH`}mVZ`R3tB|odNaRKt z4T;k*^JxU-QT3X~nMW0flf{WI#jltpNeEv=irePfew-u}$EMIk;J3xo+8i>3+UA(6 z9%xmq~!i4O@zh*P}TK6;CENn70ufFhGe*N z5wEHLG9jmdamNgr1?S7erf|V9C~o&M61r<^G#I!+MqqfVFci_?oi&LdVWJ+LciYZ}y zohPl`-}3#ccYB348%y@G*j2=3WHqaJ z-0B1oil6epp!ErQ)_G$>*&M?>)7J#JPv24VPy`t zb^P!cJ9GGfL!6#3KfUu)$ZYW5MydWdh)U5G=w zb-P0`AA!gLihM++8W)%!>~{y=yWLH1o6D?h+#@K?>K5ZVYFxLd`r;yatS^;ovSv4i zYc}C+GKa1Es^hVz>>c%O@=lh%M^MZA%U_xQ|IX5x|6%!?OW!#%*XJ#I@B@421694i zGeeKdwpM)CF*sY-Ri0yIaP28+OikD}a5JeCP&$h}oGK5&I!3Ue!7PHko9m5#4)Hw)x0_icc*~vNNoVWZ``JqLN`?=+4xLZ zLN1TP18H?AE?gV8hKwsQGMVetCcyl&KlkRYxNW`qbL2?WgW6vtW~Kf|)^U!7qN$R1 zOU2Me9+}QWV)5|e&ihNH_02jpWk)NH8<|EVFoD>y<7)~8QrbYexo3MG4CdPQ$WO(f zniA~bAOWakX_`WUVNGBfO_Zf*RE;{D2B}((pjKK(Wgt%rG#rkvmeY#`qctkyx<-pg zd;;8l=c?LJw+cFs&hry^x9-^Zp4}Pw{Avw!Emb$dKG(Fze(4Qu7I5y$R`t5 zB0595zcAao8=^%^{mKg6CE`-RnMw;=v>LP-z5ca+@3TZ%fX${2=m-@uzZI#e@;4 zo{9-Dq=^RD2^f^_y0jMz?GyqCIu2$UyAbYO%kwPX2~oINr1R98%J?%w7*nM4mf@FG zVu-aam1qy&n5_k9;fBT7V zKk@!|zyH}keD+_Tz~z7A)OWw<7k}`{S~~;Fn_VUUsqmTqWa)JA{9P}yR^r$-tiy4Z z#<}OZApWzA20)3UlQ7F{Nx`NWqW4azD72rrFa|)scjBebocit; z#wOxeq+=@zqAU$5D$AmfId>g~nq_yqJ$?7CoVqRx0)b{v%`+@+icwV&JyUKtzWYh15P% z^R>?uteh7^I~^|HZF_zgnc6`FMul)N(yTZNLWmhHmjF?e0izE1Umn9x4X_%q2|Pt+ zUv|g`NsWnttr4jcf873jvjG}Yg05d43}Gfw%S=`)rLnlrGsfS5*lsZAKaWM1L z_XC$qi_U1+9NWS2|JL?=dS4nAE<4YxfJV(6GTTbw_NG=HJUM9_i+XlgEdiN_KD{lZ zm!`O=+KYpfT@E=rfj;$JtiLn))Lo^a4q^4<000JQsKiYjI|vo>3H7E&qcL_V z@UlG55;)3(GyuAxZCJ#XzuNwMGk%MKvg(%0?&{Ra=mQewfJ

9dc%)h_<85A$4=q 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

$4uT~MEG(z+*XBnqTS1}^g_~xS`lr|I= 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�@1+qAzIw&YM`U9aP=w4hwE2E41MBjZvxe|bE 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 literal 0 HcmV?d00001 diff --git a/data/vulnerability-seed/seed-vulndb.sqlite.sha256 b/data/vulnerability-seed/seed-vulndb.sqlite.sha256 new file mode 100644 index 0000000..664ef02 --- /dev/null +++ b/data/vulnerability-seed/seed-vulndb.sqlite.sha256 @@ -0,0 +1 @@ +2bf63ca969a56a12551c491a956746d504409f13ea1c006abcf19e52ff0e6b04 seed-vulndb.sqlite diff --git a/scripts/build_seed_vulndb.py b/scripts/build_seed_vulndb.py new file mode 100644 index 0000000..13397cb --- /dev/null +++ b/scripts/build_seed_vulndb.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +"""Build a bounded real seed database from verified cache plus OSV API queries.""" +from __future__ import annotations + +import argparse +import json +import shutil +import sys +import tempfile +import urllib.parse +import urllib.request +from pathlib import Path +from urllib.error import HTTPError + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from src.vulnerability.seed import SEED_ECOSYSTEMS, build_seed_database + + +PACKAGE_PROBES = ( + ("PyPI", "django", "2.2.0"), + ("npm", "lodash", "4.17.15"), + ("Go", "github.com/golang-jwt/jwt/v4", "4.0.0"), + ("crates.io", "time", "0.1.44"), + ("Maven", "org.apache.logging.log4j:log4j-core", "2.14.1"), + ("NuGet", "System.Text.Encodings.Web", "4.7.0"), + ("Packagist", "symfony/http-foundation", "5.4.0"), +) + + +def _query_package(ecosystem: str, package: str, version: str) -> list[str]: + payload = json.dumps({"package": {"ecosystem": ecosystem, "name": package}, "version": version}).encode("utf-8") + request = urllib.request.Request("https://api.osv.dev/v1/query", data=payload, headers={"Accept": "application/json", "Content-Type": "application/json", "User-Agent": "coderisktools-seed/1"}, method="POST") + with urllib.request.urlopen(request, timeout=30) as response: + value = json.loads(response.read().decode("utf-8")) + return [item["id"] for item in value.get("vulns", []) if isinstance(item, dict) and isinstance(item.get("id"), str)] + + +def _fetch_epss(cves: list[str]) -> dict: + if not cves: + return {"data": []} + query = ",".join(cves[:1000]) + request = urllib.request.Request( + "https://api.first.org/data/v1/epss?cve=" + urllib.parse.quote(query), + headers={"Accept": "application/json", "User-Agent": "coderisktools-seed/1"}, + ) + with urllib.request.urlopen(request, timeout=30) as response: + value = json.loads(response.read().decode("utf-8")) + return value if isinstance(value, dict) else {"data": []} + + +def _cache_with_targeted_epss(cache: Path, records_by_ecosystem: dict[str, list[dict]]) -> Path: + temporary = Path(tempfile.mkdtemp(prefix="coderisktools-seed-cache-")) + for filename in ("cisa-kev.json", "github-advisories.json"): + shutil.copy2(cache / filename, temporary / filename) + cves = sorted({alias for records in records_by_ecosystem.values() for record in records for alias in record.get("aliases", []) if isinstance(alias, str) and alias.startswith("CVE-")}) + (temporary / "epss.json").write_text(json.dumps(_fetch_epss(cves), sort_keys=True), encoding="utf-8") + return temporary + + +def _fetch_vulnerability(cve: str) -> dict | None: + request = urllib.request.Request( + f"https://api.osv.dev/v1/vulns/{cve}", + headers={"Accept": "application/json", "User-Agent": "coderisktools-seed/1"}, + ) + try: + with urllib.request.urlopen(request, timeout=30) as response: + value = json.loads(response.read().decode("utf-8")) + except HTTPError as exc: + if exc.code == 404: + return None + raise + return value if isinstance(value, dict) else None + + +def _post_querybatch(cves: list[str]) -> list[dict]: + payload = json.dumps({"queries": [{"query": cve} for cve in cves]}).encode("utf-8") + request = urllib.request.Request( + "https://api.osv.dev/v1/querybatch", + data=payload, + headers={"Accept": "application/json", "Content-Type": "application/json", "User-Agent": "coderisktools-seed/1"}, + method="POST", + ) + with urllib.request.urlopen(request, timeout=30) as response: + body = json.loads(response.read().decode("utf-8")) + records: list[dict] = [] + for result in body.get("results", []): + for vulnerability in result.get("vulns", []): + if isinstance(vulnerability, dict) and isinstance(vulnerability.get("id"), str): + records.append(vulnerability) + return records + + +def _cache_cves(cache: Path, limit: int) -> list[str]: + cves: list[str] = [] + for filename in ("cisa-kev.json", "github-advisories.json"): + payload = json.loads((cache / filename).read_text(encoding="utf-8")) + records = payload.get("vulnerabilities", []) if isinstance(payload, dict) else payload + for record in records: + if filename.startswith("cisa"): + value = record.get("cveID") + else: + value = record.get("cve_id") + if isinstance(value, str) and value.startswith("CVE-") and value not in cves: + cves.append(value) + if len(cves) >= limit: + return cves + return cves + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--cache", required=True) + parser.add_argument("--output", required=True) + parser.add_argument("--max-records-per-ecosystem", type=int, default=500) + parser.add_argument("--max-cves", type=int, default=500) + args = parser.parse_args() + cache = Path(args.cache) + cves = _cache_cves(cache, args.max_cves) + if not cves: + raise SystemExit("verified cache contains no CVE identifiers") + records_by_ecosystem = {ecosystem: [] for ecosystem in SEED_ECOSYSTEMS} + seen_ids: set[str] = set() + for ecosystem, package, version in PACKAGE_PROBES: + for identifier in _query_package(ecosystem, package, version): + if identifier in seen_ids: + continue + record = _fetch_vulnerability(identifier) + if record: + records_by_ecosystem[ecosystem].append(record) + seen_ids.add(identifier) + for cve in cves: + record = _fetch_vulnerability(cve) + if not record: + continue + ecosystems = {affected.get("package", {}).get("ecosystem") for affected in record.get("affected", []) if isinstance(affected, dict)} + for ecosystem in ecosystems & set(SEED_ECOSYSTEMS): + if len(records_by_ecosystem[ecosystem]) < args.max_records_per_ecosystem: + records_by_ecosystem[ecosystem].append(record) + targeted_cache = _cache_with_targeted_epss(cache, records_by_ecosystem) + try: + manifest = build_seed_database(targeted_cache, args.output, records_by_ecosystem, max_records_per_ecosystem=args.max_records_per_ecosystem) + finally: + shutil.rmtree(targeted_cache, ignore_errors=True) + print(json.dumps(manifest, ensure_ascii=False, sort_keys=True, indent=2)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/verify_seed_vulndb.py b/scripts/verify_seed_vulndb.py new file mode 100644 index 0000000..962d1a0 --- /dev/null +++ b/scripts/verify_seed_vulndb.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +"""Verify a seed SQLite and its manifest without activation.""" +from __future__ import annotations + +import argparse +import hashlib +import json +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from src.vulnerability.database import VulnerabilityDatabase +from src.vulnerability.seed import validate_seed_manifest + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--database", required=True) + parser.add_argument("--manifest", required=True) + args = parser.parse_args() + database_path = Path(args.database) + manifest_path = Path(args.manifest) + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + validate_seed_manifest(manifest) + expected_db = manifest.get("database_sha256") + actual_db = "sha256:" + hashlib.sha256(database_path.read_bytes()).hexdigest() + if expected_db != actual_db: + raise SystemExit(f"database hash mismatch: expected {expected_db}, got {actual_db}") + with VulnerabilityDatabase.read_only(str(database_path)) as database: + integrity = database.integrity_check() + foreign_keys = database.connection.execute("PRAGMA foreign_key_check").fetchall() + if integrity != "ok" or foreign_keys: + raise SystemExit(f"database integrity failed: {integrity}, foreign_keys={len(foreign_keys)}") + actual = database.build_snapshot_manifest() + for key in ("content_digest", "advisory_count", "affected_package_count"): + if actual.get(key) != manifest.get(key): + raise SystemExit(f"manifest mismatch: {key}") + print(json.dumps({"state": "verified", "profile": "seed", "completeness": "partial", "database_sha256": actual_db, "advisory_count": actual["advisory_count"], "affected_package_count": actual["affected_package_count"]}, sort_keys=True, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/vulnerability/bootstrap.py b/src/vulnerability/bootstrap.py new file mode 100644 index 0000000..c520a94 --- /dev/null +++ b/src/vulnerability/bootstrap.py @@ -0,0 +1,64 @@ +"""Pinned seed asset bootstrap with fail-closed digest verification.""" + +from __future__ import annotations + +import hashlib +import json +import os +import tempfile +from pathlib import Path +from urllib.parse import urlparse +from urllib.request import Request, urlopen + + +def _https_url(url: str, allowed_host: str) -> None: + parsed = urlparse(url) + if parsed.scheme != "https" or parsed.username or parsed.password or parsed.hostname != allowed_host: + raise ValueError("bootstrap URL must be HTTPS and use the configured release host") + + +def verify_asset_sha256(path: str | os.PathLike[str], expected: str) -> str: + if not isinstance(expected, str) or not expected.startswith("sha256:"): + raise ValueError("expected SHA-256 must use sha256: format") + actual = "sha256:" + hashlib.sha256(Path(path).read_bytes()).hexdigest() + if actual != expected: + raise ValueError("seed asset SHA-256 mismatch") + return actual + + +def bootstrap_seed_asset( + asset_url: str, + manifest_url: str, + destination: str | os.PathLike[str], + *, + allowed_host: str = "github.com", + timeout: float = 30.0, +) -> dict[str, object]: + """Download one exact asset and manifest, then atomically install after hash verification.""" + _https_url(asset_url, allowed_host) + _https_url(manifest_url, allowed_host) + with urlopen(Request(manifest_url, headers={"Accept": "application/json", "User-Agent": "coderisktools-bootstrap/1"}), timeout=timeout) as response: + manifest = json.loads(response.read().decode("utf-8")) + expected = manifest.get("database_sha256") or manifest.get("database", {}).get("sha256") + if not isinstance(expected, str): + raise ValueError("pinned manifest has no database_sha256") + target = Path(destination) + target.parent.mkdir(parents=True, exist_ok=True) + fd, temp_name = tempfile.mkstemp(prefix=f".{target.name}.", dir=str(target.parent)) + temporary = Path(temp_name) + try: + with os.fdopen(fd, "wb") as output: + with urlopen(Request(asset_url, headers={"Accept": "application/octet-stream", "User-Agent": "coderisktools-bootstrap/1"}), timeout=timeout) as response: + while chunk := response.read(1024 * 1024): + output.write(chunk) + output.flush() + os.fsync(output.fileno()) + digest = verify_asset_sha256(temporary, expected) + os.replace(temporary, target) + return {"state": "installed", "profile": manifest.get("profile"), "completeness": manifest.get("completeness"), "path": str(target), "database_sha256": digest} + except BaseException: + try: + temporary.unlink() + except FileNotFoundError: + pass + raise diff --git a/src/vulnerability/database.py b/src/vulnerability/database.py index aaa951f..918888d 100644 --- a/src/vulnerability/database.py +++ b/src/vulnerability/database.py @@ -1109,8 +1109,9 @@ def import_epss_json(self, payload: str | bytes | dict[str, Any] | list[dict[str digest = "sha256:" + hashlib.sha256(canonical).hexdigest() lookup = self.lookup_advisory(parsed["cve_id"]) if lookup.get("status") != "exact": - if allow_unresolved and lookup.get("status") == "not-found": - self.connection.execute("INSERT OR IGNORE INTO unresolved_enrichments(source, cve_id, content_digest, reason, record_json) VALUES ('epss', ?, ?, 'advisory-not-found', ?)", (parsed["cve_id"], digest, canonical.decode("utf-8"))) + if allow_unresolved and lookup.get("status") in {"not-found", "ambiguous"}: + reason = "advisory-not-found" if lookup.get("status") == "not-found" else "advisory-ambiguous" + self.connection.execute("INSERT OR IGNORE INTO unresolved_enrichments(source, cve_id, content_digest, reason, record_json) VALUES ('epss', ?, ?, ?, ?)", (parsed["cve_id"], digest, reason, canonical.decode("utf-8"))) self.connection.execute("RELEASE SAVEPOINT epss_record") continue raise ValueError("CVE has no exact advisory match" if lookup.get("status") == "not-found" else "CVE advisory match is ambiguous") diff --git a/src/vulnerability/seed.py b/src/vulnerability/seed.py new file mode 100644 index 0000000..bca50c1 --- /dev/null +++ b/src/vulnerability/seed.py @@ -0,0 +1,146 @@ +"""Bounded, verified seed snapshot helpers.""" + +from __future__ import annotations + +import hashlib +import json +import os +import tempfile +from pathlib import Path +from typing import Any, Iterable + +SEED_ECOSYSTEMS = ("PyPI", "npm", "Go", "crates.io", "Maven", "NuGet", "Packagist") +_REQUIRED_SOURCES = ("cisa-kev", "epss", "ghsa", "osv") + + +def build_seed_manifest(source_reports: dict[str, Any], database_manifest: dict[str, Any]) -> dict[str, Any]: + manifest = { + "profile": "seed", + "completeness": "partial", + "production_full_database": False, + "sources": source_reports, + "database": database_manifest, + "advisory_count": int(database_manifest.get("advisory_count", 0)), + "affected_package_count": int(database_manifest.get("affected_package_count", 0)), + "content_digest": database_manifest.get("content_digest"), + } + validate_seed_manifest(manifest) + return manifest + + +def validate_seed_manifest(manifest: dict[str, Any]) -> None: + if not isinstance(manifest, dict): + raise ValueError("seed manifest must be an object") + if manifest.get("profile") != "seed" or manifest.get("completeness") != "partial": + raise ValueError("seed manifest must declare profile=seed and completeness=partial") + if manifest.get("production_full_database") is not False: + raise ValueError("seed manifest must declare production_full_database=false") + sources = manifest.get("sources") + if not isinstance(sources, dict) or any(source not in sources for source in _REQUIRED_SOURCES): + raise ValueError("seed manifest is missing a required source") + for source in _REQUIRED_SOURCES: + if not isinstance(sources[source], dict): + raise ValueError(f"seed source report is invalid: {source}") + osv = sources["osv"] + successful = osv.get("successful_ecosystems", []) + if not isinstance(successful, list) or len(successful) < 4: + raise ValueError("seed requires at least four successful OSV ecosystems") + if int(manifest.get("advisory_count", 0)) <= 0: + raise ValueError("seed must contain at least one advisory") + digest = manifest.get("content_digest") + if not isinstance(digest, str) or not digest.startswith("sha256:"): + raise ValueError("seed content_digest is required") + + +def manifest_digest(manifest: dict[str, Any]) -> str: + unsigned = dict(manifest) + unsigned.pop("manifest_sha256", None) + canonical = json.dumps(unsigned, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8") + return "sha256:" + hashlib.sha256(canonical).hexdigest() + + +def _load_json(path: Path) -> Any: + if path.is_symlink() or not path.is_file(): + raise ValueError(f"seed cache file is not a regular file: {path}") + return json.loads(path.read_text(encoding="utf-8")) + + +def _osv_ecosystems(records: Iterable[dict[str, Any]]) -> set[str]: + found: set[str] = set() + for record in records: + for affected in record.get("affected", []): + package = affected.get("package", {}) if isinstance(affected, dict) else {} + ecosystem = package.get("ecosystem") if isinstance(package, dict) else None + if ecosystem in SEED_ECOSYSTEMS: + found.add(ecosystem) + return found + + +def build_seed_database( + cache_dir: str | Path, + output_path: str | Path, + osv_records_by_ecosystem: dict[str, list[dict[str, Any]]], + *, + max_records_per_ecosystem: int = 500, + minimum_successful_ecosystems: int = 4, +) -> dict[str, Any]: + """Build a fresh seed SQLite from real cached JSON and bounded OSV records.""" + from .database import VulnerabilityDatabase + + cache = Path(cache_dir) + output = Path(output_path) + if cache.is_symlink() or not cache.is_dir() or output.is_symlink(): + raise ValueError("seed cache/output path is invalid") + if max_records_per_ecosystem < 1 or minimum_successful_ecosystems < 1: + raise ValueError("seed limits must be positive") + output.parent.mkdir(parents=True, exist_ok=True) + temporary = Path(tempfile.mkstemp(prefix=f".{output.name}.", dir=str(output.parent))[1]) + reports: dict[str, Any] = {"cisa-kev": {}, "epss": {}, "ghsa": {}} + successful: list[str] = [] + failed: list[str] = [] + try: + with VulnerabilityDatabase(str(temporary)) as database: + for ecosystem in SEED_ECOSYSTEMS: + records = list(osv_records_by_ecosystem.get(ecosystem, []))[:max_records_per_ecosystem] + if not records: + failed.append(ecosystem) + continue + stats = database.import_osv_json(records) + if stats.errors or stats.advisories_imported == 0: + failed.append(ecosystem) + continue + successful.append(ecosystem) + database.correlate_aliases() + source_files = {"cisa-kev": "cisa-kev.json", "epss": "epss.json", "ghsa": "github-advisories.json"} + importers = {"cisa-kev": ("import_kev_json", {"allow_unresolved": True}), "epss": ("import_epss_json", {"allow_unresolved": True}), "ghsa": ("import_ghsa_json", {})} + for source, filename in source_files.items(): + payload = _load_json(cache / filename) + importer, kwargs = importers[source] + stats = getattr(database, importer)(payload, **kwargs) + if stats.errors: + raise ValueError(f"cached {source} import failed: {stats.errors[0]}") + reports[source] = {"status": "complete" if source == "cisa-kev" else "bounded", "records": stats.records_seen, "imported": stats.advisories_imported} + database.correlate_aliases() + if len(successful) < minimum_successful_ecosystems: + raise ValueError(f"seed requires {minimum_successful_ecosystems} successful OSV ecosystems; got {len(successful)}") + if database.integrity_check() != "ok": + raise ValueError("seed SQLite integrity check failed") + database_manifest = database.build_snapshot_manifest() + os.replace(temporary, output) + reports["osv"] = {"status": "partial", "successful_ecosystems": successful, "failed_ecosystems": failed, "records_per_ecosystem": max_records_per_ecosystem} + manifest = build_seed_manifest(reports, database_manifest) + snapshot_id = "seed-" + database_manifest["content_digest"].split(":", 1)[1][:32] + source_digest = "sha256:" + hashlib.sha256(json.dumps(reports, sort_keys=True, separators=(",", ":")).encode("utf-8")).hexdigest() + manifest["snapshot_id"] = snapshot_id + manifest["source_digest"] = source_digest + with VulnerabilityDatabase(str(output)) as database: + database.stage_snapshot(snapshot_id, source_digest, manifest) + manifest["database_sha256"] = "sha256:" + hashlib.sha256(output.read_bytes()).hexdigest() + manifest["manifest_sha256"] = manifest_digest(manifest) + return manifest + except Exception: + try: + temporary.unlink() + except FileNotFoundError: + pass + raise diff --git a/src/vulnerability/update_profiles.py b/src/vulnerability/update_profiles.py index eca0b4f..0695b52 100644 --- a/src/vulnerability/update_profiles.py +++ b/src/vulnerability/update_profiles.py @@ -8,12 +8,13 @@ _PROFILE_LIMITS = { "core": {"minimum_free_bytes": 8 * 1024**3, "max_download_bytes": 6 * 1024**3}, "extended": {"minimum_free_bytes": 32 * 1024**3, "max_download_bytes": 24 * 1024**3}, + "seed": {"minimum_free_bytes": 512 * 1024**2, "max_download_bytes": 256 * 1024**2, "max_records_per_ecosystem": 500, "minimum_successful_osv_ecosystems": 4}, } def validate_profile(profile: str) -> str: if profile not in _PROFILE_LIMITS: - raise ValueError("profile must be core or extended") + raise ValueError("profile must be core, extended, or seed") return profile @@ -24,6 +25,8 @@ def profile_limits(profile: str) -> dict[str, int]: def profile_source_ids(profile: str) -> set[str]: validate_profile(profile) core = {"osv", "github-advisories", "cisa-kev", "epss"} + if profile == "seed": + return core if profile == "core": return core return core | {"cve-v5", "nvd", "cwe", "cpe", "debian-security", "ubuntu-security", "redhat-security", "alpine", "rustsec"} diff --git a/tests/test_seed_bootstrap.py b/tests/test_seed_bootstrap.py new file mode 100644 index 0000000..9897a29 --- /dev/null +++ b/tests/test_seed_bootstrap.py @@ -0,0 +1,26 @@ +import hashlib +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.bootstrap import verify_asset_sha256 + + +class SeedBootstrapTests(unittest.TestCase): + def test_verify_asset_sha256_accepts_exact_bytes(self): + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "seed.sqlite" + path.write_bytes(b"real-seed-bytes") + digest = "sha256:" + hashlib.sha256(b"real-seed-bytes").hexdigest() + self.assertEqual(verify_asset_sha256(path, digest), digest) + + def test_verify_asset_sha256_rejects_tampering(self): + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "seed.sqlite" + path.write_bytes(b"tampered") + with self.assertRaises(ValueError): + verify_asset_sha256(path, "sha256:" + "0" * 64) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_seed_profile.py b/tests/test_seed_profile.py new file mode 100644 index 0000000..68b185a --- /dev/null +++ b/tests/test_seed_profile.py @@ -0,0 +1,36 @@ +import json +import sqlite3 +import tempfile +import unittest +from pathlib import Path + +from src.vulnerability.seed import SEED_ECOSYSTEMS, build_seed_manifest, validate_seed_manifest +from src.vulnerability.update_profiles import annotate_config, profile_source_ids, validate_profile + + +class SeedProfileTests(unittest.TestCase): + def test_seed_profile_is_partial_and_requires_core_sources(self): + self.assertEqual(validate_profile("seed"), "seed") + self.assertEqual( + profile_source_ids("seed"), + {"osv", "github-advisories", "cisa-kev", "epss"}, + ) + self.assertEqual(SEED_ECOSYSTEMS, ("PyPI", "npm", "Go", "crates.io", "Maven", "NuGet", "Packagist")) + + def test_seed_manifest_is_explicitly_partial(self): + manifest = build_seed_manifest( + {"cisa-kev": {"status": "complete", "records": 1}, "epss": {"status": "bounded", "records": 1}, "ghsa": {"status": "bounded", "records": 1}, "osv": {"status": "partial", "successful_ecosystems": ["PyPI", "npm", "Go", "Maven"], "failed_ecosystems": []}}, + {"advisory_count": 2, "affected_package_count": 1, "content_digest": "sha256:" + "a" * 64}, + ) + self.assertEqual(manifest["profile"], "seed") + self.assertEqual(manifest["completeness"], "partial") + self.assertFalse(manifest["production_full_database"]) + validate_seed_manifest(manifest) + + def test_seed_manifest_rejects_missing_required_source(self): + with self.assertRaises(ValueError): + validate_seed_manifest({"profile": "seed", "completeness": "partial", "production_full_database": False, "sources": {}}) + + +if __name__ == "__main__": + unittest.main() From 5da3dad099b1be59b45fd2aeba8d256457fd9625 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 18:35:18 +0000 Subject: [PATCH 64/65] feat: release signed vulnerability seed bootstrap --- .coderisktools-baseline.json | 2 +- CHANGELOG.md | 26 ++- README.md | 4 +- data/vulnerability-seed/README.md | 38 +++- data/vulnerability-seed/manifest.json | 17 +- data/vulnerability-seed/release-keyring.json | 7 + docs/RELEASE-NOTES-3.1.0.md | 42 +++++ pyproject.toml | 2 +- src/__init__.py | 2 +- src/__main__.py | 30 +++- src/scanner.py | 1 + src/vulnerability/bootstrap.py | 174 ++++++++++++++++--- src/vulnerability/seed.py | 25 ++- tests/test_seed_bootstrap.py | 41 ++++- tests/test_seed_profile.py | 11 +- tests/test_stage5_robustness.py | 16 ++ 16 files changed, 390 insertions(+), 48 deletions(-) create mode 100644 data/vulnerability-seed/release-keyring.json create mode 100644 docs/RELEASE-NOTES-3.1.0.md diff --git a/.coderisktools-baseline.json b/.coderisktools-baseline.json index 06e7994..43d9ec3 100644 --- a/.coderisktools-baseline.json +++ b/.coderisktools-baseline.json @@ -18,6 +18,7 @@ "sha256:317334d25e7f63f731739102c0f3324e149163dc9aa89fd062cb56a002c38e90", "sha256:32003d386f4c13bbd8e39554ecf8e790165bf5d8027978c3fd53eedadc18a6a3", "sha256:3e8c5ab6e930af06663435256e3205c0dcc548c366b128138504e64ad0a35340", + "sha256:3fa4350533e8d0b945c36390441343258bcf356aa7f90ffcec205723a48acfbb", "sha256:41a2d2511602221b2e73923b12ec4ed17126a52a1e4eefc457bad128e6cd4582", "sha256:43fbf8cbca5bb69e800d6bad8d2e93e5b0c9782cfd77b1a24e01d7dcaa23cb43", "sha256:44fff6f8123baedbb3805ab5510e8e75ef98479060a1db6814a23c2cadad7f72", @@ -51,7 +52,6 @@ "sha256:95f4fb0457e624269f2e6db5ad54c88942b2d7fe1092c79343b9c2ba0ae0e4f6", "sha256:9912c72fe03e28b66d5b4667c666714d1ba43cc93124187b65a453927d239cbb", "sha256:9f33a910547b5beef79ce1c0aba074f306a966846d1ca608d4a9fb72a2b2c601", - "sha256:a02ba68f0be4d9b78998ae99f3ee9197b26de0762b701a55986d33879d71064c", "sha256:a052f7f69ccc1e3c69286d4b4be5a8b64c951345afdd7a8c3a1568efff22e87a", "sha256:a153a81f7c9c09b188669b04c2e94fb1ab97c6cb257713180938b64bc24292fa", "sha256:a422a63976b0052a6999f2d10c8ad7b270d79c4abcb54b3e87c1b575aec957bc", diff --git a/CHANGELOG.md b/CHANGELOG.md index 115f136..a6863dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,17 +4,27 @@ All notable changes to `coderisktools-scanner` are documented here. ## [Unreleased] -### Vulnerability enrichment +## [3.1.0] — 2026-07-23 -- versioned the local vulnerability database schema with explicit initialization, migration, current-state reporting and fail-closed future-version handling; -- preserved NVD configuration logic instead of flattening it: node `AND`/`OR`, `negate`, nested children and a legacy flat CPE projection are all available; -- preserved NVD references, source tags and CVE change history through parser, SQLite enrichment and normalized reports; -- added deterministic readback tests and documentation for the V5x–V5z contracts. +### Added -### Scanner evidence boundary +- added the opt-in, read-only vulnerability inventory and matching pipeline with explicit local SQLite selection; +- added controlled, user-triggered staging/update, verification, reconciliation, rollback and retention operations; +- added bounded public feed adapters and explicit provenance/quality reports without claiming full-feed coverage; +- added a real partial `seed` snapshot with 187 advisories, 378 affected-package rows and seven represented OSV ecosystems; +- added signed, pinned seed bootstrap and a separate explicit `--profile seed --apply` activation command. -- documented the required distinction between runtime remediation evidence and publication-safe redaction; -- runtime evidence preservation remains an open formatter/pipeline audit finding; checked-in/public artifacts remain synthetic or explicitly redacted. +### Fixed + +- directory self-scan now skips SQLite database artifacts, preventing the real seed from tripping the scanner byte cap in CI; +- bootstrap now verifies the detached Ed25519 manifest envelope, exact database SHA-256, SQLite integrity, foreign keys, snapshot identity and manifest counts before atomic installation. + +### Seed boundary + +- the seed is `completeness=partial` and `production_full_database=false`; +- 1,688 unresolved KEV/EPSS enrichments and 129 exact-alias conflicts are retained and disclosed rather than heuristically merged; +- an empty seed scan is not evidence that a project has no vulnerabilities; +- Core/Full activation remains separate and is never replaced automatically by seed bootstrap. ## [3.0.1] — 2026-07-20 diff --git a/README.md b/README.md index 7960faa..f64911e 100644 --- a/README.md +++ b/README.md @@ -500,7 +500,7 @@ Valid agents: `generic`, `codex`, `claude-code`. This is an explicit input contr ```yaml repos: - repo: https://github.com/9batalion/coderisktools-scanner - rev: v3.0.1 + rev: v3.1.0 hooks: - id: coderisktools-secret-scan ``` @@ -522,7 +522,7 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 - - uses: 9batalion/coderisktools-scanner@v3.0.1 + - uses: 9batalion/coderisktools-scanner@v3.1.0 with: profile: balanced ``` diff --git a/data/vulnerability-seed/README.md b/data/vulnerability-seed/README.md index 53a1962..c9ce1c0 100644 --- a/data/vulnerability-seed/README.md +++ b/data/vulnerability-seed/README.md @@ -10,12 +10,13 @@ This directory contains a real, bounded starter snapshot for local development a - advisories: 187 - affected packages: 378 - SQLite size: approximately 5.6 MB -- OSV: selected records from PyPI, npm, Go, crates.io, Maven, NuGet and Packagist -- CISA KEV: 1,653 source records observed; exact enrichment is stored when the advisory match is unique -- GHSA: bounded 100-record batch -- EPSS: bounded targeted records for CVEs present in the selected seed +- OSV: 87 imported advisories from selected PyPI, npm, Go, crates.io, Maven, NuGet and Packagist records +- CISA KEV: 1,653 source records processed; 2 exact enrichments and 1,651 unresolved records retained +- GHSA: bounded 100-record batch, 100 imported +- EPSS: 54 targeted records; 17 exact enrichments and 37 unresolved records retained +- exact alias index: 129 ambiguous alias conflicts are reported and are not heuristically merged -This is not a complete Core database and must not be used to interpret an empty scan as proof of no vulnerabilities. +This is not a complete Core database and must not be used to interpret an empty scan as proof of no vulnerabilities. The seed intentionally preserves unresolved enrichment and alias conflicts instead of making unsafe automatic merge decisions. ## Verify @@ -30,8 +31,33 @@ python3 scripts/verify_seed_vulndb.py \ The verifier checks the SQLite integrity, foreign-key integrity, database digest, and manifest counts. +## Pinned release bootstrap + +The `v3.1.0` release publishes the exact SQLite, detached manifest, SHA-256 sidecar, signed manifest envelope and public keyring. Bootstrap installs the database as **staged** only: + +```bash +secret-scanner vuln-db bootstrap \ + --asset-url https://github.com/9batalion/coderisktools-scanner/releases/download/v3.1.0/coderisktools-vulndb-seed-2026-07-23.sqlite \ + --manifest-url https://github.com/9batalion/coderisktools-scanner/releases/download/v3.1.0/coderisktools-vulndb-seed-2026-07-23.manifest.json \ + --signature-url https://github.com/9batalion/coderisktools-scanner/releases/download/v3.1.0/coderisktools-vulndb-seed-2026-07-23.sig \ + --keyring data/vulnerability-seed/release-keyring.json \ + --destination "$HOME/.local/share/coderisktools/vuln-db/seed.sqlite" +``` + +Activation is a separate explicit operation and is limited to `--profile seed`: + +```bash +secret-scanner vuln-db activate \ + --database "$HOME/.local/share/coderisktools/vuln-db/seed.sqlite" \ + --manifest data/vulnerability-seed/manifest.json \ + --profile seed \ + --apply +``` + +A seed activation never replaces a Core/Full pointer automatically. + ## Provenance The snapshot was built from verified staged CISA KEV and GHSA source artifacts, targeted EPSS data from FIRST, and OSV vulnerability records obtained through the public OSV API using explicit package probes. Raw source feeds are not committed to this repository. -The release-grade larger Core snapshot belongs in a GitHub Release Asset, not in Git history. Any future replacement must update the manifest, SHA-256 sidecar, and independent verification evidence together. +A larger Core snapshot belongs in a GitHub Release Asset, not in Git history. Any future replacement must update the manifest, SHA-256 sidecar, signed envelope, and independent verification evidence together. diff --git a/data/vulnerability-seed/manifest.json b/data/vulnerability-seed/manifest.json index bb4d5fb..f3d6346 100644 --- a/data/vulnerability-seed/manifest.json +++ b/data/vulnerability-seed/manifest.json @@ -1,8 +1,10 @@ { "advisory_count": 187, "affected_package_count": 378, + "alias_conflict_count": 129, "completeness": "partial", "content_digest": "sha256:8c122da9ffbbe70f677503068382416ad0d9d31adcdff3ceb1a9adf50de48f04", + "correlation": "exact-alias-index-with-unresolved-conflicts", "database": { "advisory_count": 187, "affected_package_count": 378, @@ -18,6 +20,14 @@ "cache_reuse": "CISA KEV and GHSA verified staging cache; EPSS targeted CVEs from FIRST API", "osv_transport": "OSV API per-package probes plus OSV vulnerability records" }, + "release": { + "asset": "coderisktools-vulndb-seed-2026-07-23.sqlite", + "key_id": "coderisktools-seed-2026", + "manifest": "coderisktools-vulndb-seed-2026-07-23.manifest.json", + "sha256": "coderisktools-vulndb-seed-2026-07-23.sha256", + "signature": "coderisktools-vulndb-seed-2026-07-23.sig", + "tag": "v3.1.0" + }, "schema": "coderisktools.vulnerability.seed-manifest.v1", "snapshot_id": "seed-8c122da9ffbbe70f677503068382416a", "source_digest": "sha256:a9499f0d50184de077690431a98027dbb7c52fe916e1dc8879db77f2a2ac4ea9", @@ -25,12 +35,14 @@ "cisa-kev": { "imported": 2, "records": 1653, - "status": "complete" + "status": "complete", + "unresolved": 1651 }, "epss": { "imported": 17, "records": 54, - "status": "bounded" + "status": "bounded", + "unresolved": 37 }, "ghsa": { "imported": 100, @@ -39,6 +51,7 @@ }, "osv": { "failed_ecosystems": [], + "imported": 87, "records_per_ecosystem": 500, "status": "partial", "successful_ecosystems": [ diff --git a/data/vulnerability-seed/release-keyring.json b/data/vulnerability-seed/release-keyring.json new file mode 100644 index 0000000..be197ca --- /dev/null +++ b/data/vulnerability-seed/release-keyring.json @@ -0,0 +1,7 @@ +{ + "keys": { + "coderisktools-seed-2026": "64d79d903860fc16b2adb99d9a8ebe6a05540b9a9a2437d0062ba1c552a380a1" + }, + "schema": "coderisktools.rule-keyring", + "version": 1 +} diff --git a/docs/RELEASE-NOTES-3.1.0.md b/docs/RELEASE-NOTES-3.1.0.md new file mode 100644 index 0000000..6a2bcd5 --- /dev/null +++ b/docs/RELEASE-NOTES-3.1.0.md @@ -0,0 +1,42 @@ +# CodeRiskTools Scanner 3.1.0 — release notes + +CodeRiskTools Scanner 3.1.0 adds a controlled, local-first vulnerability database workflow and publishes a real, verified **partial seed** snapshot for bootstrap and integration testing. + +## What is included + +- opt-in local dependency inventory and vulnerability matching; +- user-triggered staging, verification, reconciliation, rollback and retention commands; +- bounded source adapters and explicit provenance/quality evidence; +- a 5.9 MB SQLite seed with 187 advisories and 378 affected-package rows; +- represented OSV ecosystems: PyPI, npm, Go, crates.io, Maven, NuGet and Packagist; +- signed pinned bootstrap that installs seed as staged only; +- explicit `vuln-db activate --profile seed --apply` activation; +- real lodash `4.17.15` end-to-end matching evidence with stable fingerprints. + +## Release assets + +- Python wheel and source distribution; +- `coderisktools-vulndb-seed-2026-07-23.sqlite`; +- detached seed manifest; +- SHA-256 sidecar; +- Ed25519 signed manifest envelope (`.sig` JSON); +- public release keyring. + +## Verified seed facts + +- `profile=seed`; +- `completeness=partial`; +- `production_full_database=false`; +- SQLite `PRAGMA integrity_check=ok`; +- SQLite `PRAGMA foreign_key_check=0`; +- database SHA-256 `2bf63ca969a56a12551c491a956746d504409f13ea1c006abcf19e52ff0e6b04`; +- CISA KEV: 1,653 processed, 2 exact enrichments, 1,651 unresolved retained; +- EPSS: 54 processed, 17 exact enrichments, 37 unresolved retained; +- GHSA: bounded 100 imported; +- OSV: 87 imported. + +## Important limitations + +This seed is not Core, Full, Production or Complete. It retains 129 exact-alias conflicts rather than heuristically merging advisories. A zero-finding seed scan is not proof that a project has no vulnerabilities. Updates remain user-triggered; ordinary scanner runs do not download feeds. + +A clean scanner result is not proof that code is secure. This release is not a security audit, certification, compliance guarantee or legal opinion. diff --git a/pyproject.toml b/pyproject.toml index 272b342..d212a20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "coderisktools-scanner" -version = "3.0.1" +version = "3.1.0" description = "Local-first open-source scanner for secret-like values and risky configuration changes in code diffs." readme = "README.md" license = "MIT" diff --git a/src/__init__.py b/src/__init__.py index fa4b48c..b0c005a 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,3 +1,3 @@ """Secret/Config Diff Scanner — Local CLI tool for detecting secrets and risky config changes in diffs.""" -__version__ = "3.0.1" +__version__ = "3.1.0" diff --git a/src/__main__.py b/src/__main__.py index 3329b1a..1e54d03 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -139,6 +139,17 @@ def main(): source_status_parser.add_argument("--active", required=True, metavar="PATH") database_info_parser = vuln_db_actions.add_parser("database-info", help="Show verified active database metadata") database_info_parser.add_argument("--active", required=True, metavar="PATH") + activate_seed_parser = vuln_db_actions.add_parser("activate", help="Explicitly activate a verified partial seed database") + activate_seed_parser.add_argument("--database", required=True, metavar="FILE") + activate_seed_parser.add_argument("--manifest", required=True, metavar="FILE") + activate_seed_parser.add_argument("--profile", choices=["seed"], required=True) + activate_seed_parser.add_argument("--apply", action="store_true", help="Actually activate the staged seed snapshot") + bootstrap_seed_parser = vuln_db_actions.add_parser("bootstrap", help="Install one pinned signed seed release as staged") + bootstrap_seed_parser.add_argument("--asset-url", required=True, metavar="URL") + bootstrap_seed_parser.add_argument("--manifest-url", required=True, metavar="URL") + bootstrap_seed_parser.add_argument("--signature-url", required=True, metavar="URL") + bootstrap_seed_parser.add_argument("--destination", required=True, metavar="FILE") + bootstrap_seed_parser.add_argument("--keyring", required=True, metavar="FILE") explain_parser = vuln_db_actions.add_parser("explain", help="Explain one persisted vulnerability match") explain_parser.add_argument("--database", required=True, metavar="FILE") explain_parser.add_argument("--fingerprint", required=True, metavar="FINGERPRINT") @@ -299,7 +310,24 @@ def main(): ) try: emit = True - if args.vuln_db_action == "init-config": + if args.vuln_db_action == "activate": + from .vulnerability.bootstrap import activate_seed_database + manifest_path = Path(args.manifest) + if manifest_path.is_symlink() or not manifest_path.is_file(): + raise ValueError("seed manifest must be a regular non-symlink file") + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + result = activate_seed_database(args.database, manifest, apply=args.apply) + elif args.vuln_db_action == "bootstrap": + from .rulepacks import load_trusted_keyring + from .vulnerability.bootstrap import bootstrap_seed_asset + result = bootstrap_seed_asset( + args.asset_url, + args.manifest_url, + args.signature_url, + args.destination, + trusted_keys=load_trusted_keyring(args.keyring), + ) + elif args.vuln_db_action == "init-config": from .vulnerability.update_config import default_update_config output = Path(args.output).expanduser() if output.exists() or output.is_symlink(): diff --git a/src/scanner.py b/src/scanner.py index 67c3fdb..9363444 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -506,6 +506,7 @@ def scan_directory( ".zip", ".tar", ".gz", ".bz2", ".xz", ".7z", ".mp3", ".mp4", ".avi", ".mov", ".wav", ".pdf", ".doc", ".docx", ".xls", ".xlsx", + ".sqlite", ".sqlite3", ".db", ".woff", ".woff2", ".ttf", ".eot", ): continue diff --git a/src/vulnerability/bootstrap.py b/src/vulnerability/bootstrap.py index c520a94..c6c9615 100644 --- a/src/vulnerability/bootstrap.py +++ b/src/vulnerability/bootstrap.py @@ -1,61 +1,193 @@ -"""Pinned seed asset bootstrap with fail-closed digest verification.""" +"""Pinned seed asset bootstrap with signed-manifest and digest verification.""" from __future__ import annotations import hashlib import json import os +import re import tempfile from pathlib import Path +from typing import Any, Mapping from urllib.parse import urlparse from urllib.request import Request, urlopen +from .manifest_signing import verify_manifest +from .seed import validate_seed_manifest -def _https_url(url: str, allowed_host: str) -> None: +_MAX_METADATA_BYTES = 2 * 1024 * 1024 +_MAX_ASSET_BYTES = 64 * 1024 * 1024 +_SHA256_RE = re.compile(r"sha256:[0-9a-f]{64}") + + +def _https_url(url: str, allowed_hosts: frozenset[str]) -> None: parsed = urlparse(url) - if parsed.scheme != "https" or parsed.username or parsed.password or parsed.hostname != allowed_host: - raise ValueError("bootstrap URL must be HTTPS and use the configured release host") + if ( + parsed.scheme != "https" + or parsed.username + or parsed.password + or parsed.hostname not in allowed_hosts + or parsed.port not in (None, 443) + or not parsed.path + or parsed.fragment + ): + raise ValueError("bootstrap URL must be HTTPS and use an allowlisted release host") + + +def _read_response(response: Any, maximum: int, label: str) -> bytes: + length = response.headers.get("Content-Length") + if length is not None: + try: + if int(length) > maximum: + raise ValueError(f"{label} exceeds byte limit") + except (TypeError, ValueError) as exc: + if isinstance(exc, ValueError) and str(exc).endswith("byte limit"): + raise + raise ValueError(f"{label} has invalid Content-Length") from exc + chunks: list[bytes] = [] + total = 0 + while True: + chunk = response.read(min(1024 * 1024, maximum + 1 - total)) + if not chunk: + break + total += len(chunk) + if total > maximum: + raise ValueError(f"{label} exceeds byte limit") + chunks.append(chunk) + return b"".join(chunks) + + +def _download(url: str, allowed_hosts: frozenset[str], accept: str, maximum: int, label: str, timeout: float) -> bytes: + _https_url(url, allowed_hosts) + request = Request(url, headers={"Accept": accept, "User-Agent": "coderisktools-bootstrap/1"}) + with urlopen(request, timeout=timeout) as response: + final_url = response.geturl() + _https_url(final_url, allowed_hosts) + return _read_response(response, maximum, label) def verify_asset_sha256(path: str | os.PathLike[str], expected: str) -> str: - if not isinstance(expected, str) or not expected.startswith("sha256:"): - raise ValueError("expected SHA-256 must use sha256: format") - actual = "sha256:" + hashlib.sha256(Path(path).read_bytes()).hexdigest() + if not isinstance(expected, str) or _SHA256_RE.fullmatch(expected) is None: + raise ValueError("expected SHA-256 must use sha256:<64 lowercase hex> format") + candidate = Path(path) + if candidate.is_symlink() or not candidate.is_file(): + raise ValueError("seed asset must be a regular non-symlink file") + actual = "sha256:" + hashlib.sha256(candidate.read_bytes()).hexdigest() if actual != expected: raise ValueError("seed asset SHA-256 mismatch") return actual +def validate_signed_release_manifest( + manifest: dict[str, Any], + envelope: dict[str, Any], + trusted_keys: Mapping[str, bytes], +) -> dict[str, Any]: + """Verify a detached signed envelope and exact manifest equality.""" + if not isinstance(envelope, dict): + raise ValueError("signed seed manifest envelope must be an object") + key_id = envelope.get("key_id") + if not isinstance(key_id, str) or key_id not in trusted_keys: + raise ValueError("signed seed manifest uses an untrusted key") + verified = verify_manifest(envelope, trusted_keys[key_id]) + if verified != manifest: + raise ValueError("signed seed manifest does not match detached manifest") + validate_seed_manifest(verified) + expected = verified.get("database_sha256") + if not isinstance(expected, str) or _SHA256_RE.fullmatch(expected) is None: + raise ValueError("signed seed manifest has an invalid database SHA-256") + return dict(verified) + + +def _verify_database_contract(database_path: Path, manifest: dict[str, Any]) -> None: + from .database import VulnerabilityDatabase + + verify_asset_sha256(database_path, manifest["database_sha256"]) + with VulnerabilityDatabase.read_only(str(database_path)) as database: + if database.integrity_check() != "ok": + raise ValueError("seed SQLite integrity check failed") + if database.connection.execute("PRAGMA foreign_key_check").fetchall(): + raise ValueError("seed SQLite foreign-key check failed") + actual = database.build_snapshot_manifest() + for key in ("content_digest", "advisory_count", "affected_package_count"): + if actual.get(key) != manifest.get(key): + raise ValueError(f"seed database manifest mismatch: {key}") + row = database.connection.execute( + "SELECT snapshot_id, state FROM snapshots WHERE snapshot_id = ?", + (manifest.get("snapshot_id"),), + ).fetchone() + if row is None or row["state"] not in {"staged", "active"}: + raise ValueError("seed database does not contain the declared staged snapshot") + + +def activate_seed_database( + database_path: str | os.PathLike[str], + manifest: dict[str, Any], + *, + apply: bool = False, +) -> dict[str, Any]: + """Plan or explicitly activate only a verified partial seed snapshot.""" + from .database import VulnerabilityDatabase + + validate_seed_manifest(manifest) + database = Path(database_path) + _verify_database_contract(database, manifest) + snapshot_id = manifest.get("snapshot_id") + if not isinstance(snapshot_id, str) or not snapshot_id.startswith("seed-"): + raise ValueError("seed snapshot_id is invalid") + if not apply: + return {"state": "activation_planned", "profile": "seed", "snapshot_id": snapshot_id, "database": str(database)} + with VulnerabilityDatabase(str(database)) as handle: + status = handle.activate_snapshot(snapshot_id) + return {"state": status["state"], "profile": "seed", "snapshot_id": snapshot_id, "database": str(database)} + + def bootstrap_seed_asset( asset_url: str, manifest_url: str, + signature_url: str, destination: str | os.PathLike[str], *, - allowed_host: str = "github.com", + trusted_keys: Mapping[str, bytes], + allowed_hosts: frozenset[str] = frozenset({"github.com", "objects.githubusercontent.com", "release-assets.githubusercontent.com"}), timeout: float = 30.0, ) -> dict[str, object]: - """Download one exact asset and manifest, then atomically install after hash verification.""" - _https_url(asset_url, allowed_host) - _https_url(manifest_url, allowed_host) - with urlopen(Request(manifest_url, headers={"Accept": "application/json", "User-Agent": "coderisktools-bootstrap/1"}), timeout=timeout) as response: - manifest = json.loads(response.read().decode("utf-8")) - expected = manifest.get("database_sha256") or manifest.get("database", {}).get("sha256") - if not isinstance(expected, str): - raise ValueError("pinned manifest has no database_sha256") + """Download one exact signed seed release and atomically install it as staged.""" + if timeout <= 0 or timeout > 300: + raise ValueError("bootstrap timeout must be in (0, 300]") + manifest_raw = _download(manifest_url, allowed_hosts, "application/json", _MAX_METADATA_BYTES, "seed manifest", timeout) + signature_raw = _download(signature_url, allowed_hosts, "application/json", _MAX_METADATA_BYTES, "seed signature", timeout) + try: + manifest = json.loads(manifest_raw.decode("utf-8")) + envelope = json.loads(signature_raw.decode("utf-8")) + except (UnicodeError, json.JSONDecodeError) as exc: + raise ValueError("seed release metadata is invalid JSON") from exc + if not isinstance(manifest, dict) or not isinstance(envelope, dict): + raise ValueError("seed release metadata must be JSON objects") + verified_manifest = validate_signed_release_manifest(manifest, envelope, trusted_keys) + asset = _download(asset_url, allowed_hosts, "application/octet-stream", _MAX_ASSET_BYTES, "seed asset", timeout) target = Path(destination) + if target.is_symlink(): + raise ValueError("seed destination must not be a symlink") target.parent.mkdir(parents=True, exist_ok=True) fd, temp_name = tempfile.mkstemp(prefix=f".{target.name}.", dir=str(target.parent)) temporary = Path(temp_name) try: with os.fdopen(fd, "wb") as output: - with urlopen(Request(asset_url, headers={"Accept": "application/octet-stream", "User-Agent": "coderisktools-bootstrap/1"}), timeout=timeout) as response: - while chunk := response.read(1024 * 1024): - output.write(chunk) + output.write(asset) output.flush() os.fsync(output.fileno()) - digest = verify_asset_sha256(temporary, expected) + _verify_database_contract(temporary, verified_manifest) os.replace(temporary, target) - return {"state": "installed", "profile": manifest.get("profile"), "completeness": manifest.get("completeness"), "path": str(target), "database_sha256": digest} + return { + "state": "installed_staged", + "profile": "seed", + "completeness": "partial", + "path": str(target), + "snapshot_id": verified_manifest["snapshot_id"], + "database_sha256": verified_manifest["database_sha256"], + "signing_key_id": envelope["key_id"], + } except BaseException: try: temporary.unlink() diff --git a/src/vulnerability/seed.py b/src/vulnerability/seed.py index bca50c1..ee81265 100644 --- a/src/vulnerability/seed.py +++ b/src/vulnerability/seed.py @@ -41,10 +41,27 @@ def validate_seed_manifest(manifest: dict[str, Any]) -> None: for source in _REQUIRED_SOURCES: if not isinstance(sources[source], dict): raise ValueError(f"seed source report is invalid: {source}") + expected_status = {"cisa-kev": "complete", "epss": "bounded", "ghsa": "bounded", "osv": "partial"} + for source, status in expected_status.items(): + report = sources[source] + if report.get("status") != status: + raise ValueError(f"seed source status is invalid: {source}") + if type(report.get("imported")) is not int or report["imported"] <= 0: + raise ValueError(f"seed source imported count must be positive: {source}") + if source != "osv" and (type(report.get("records")) is not int or report["records"] < report["imported"]): + raise ValueError(f"seed source record count is invalid: {source}") osv = sources["osv"] successful = osv.get("successful_ecosystems", []) - if not isinstance(successful, list) or len(successful) < 4: - raise ValueError("seed requires at least four successful OSV ecosystems") + failed = osv.get("failed_ecosystems", []) + if ( + not isinstance(successful, list) + or len(successful) < 4 + or len(successful) != len(set(successful)) + or any(ecosystem not in SEED_ECOSYSTEMS for ecosystem in successful) + or not isinstance(failed, list) + or set(successful) & set(failed) + ): + raise ValueError("seed requires at least four unique successful OSV ecosystems") if int(manifest.get("advisory_count", 0)) <= 0: raise ValueError("seed must contain at least one advisory") digest = manifest.get("content_digest") @@ -98,6 +115,7 @@ def build_seed_database( reports: dict[str, Any] = {"cisa-kev": {}, "epss": {}, "ghsa": {}} successful: list[str] = [] failed: list[str] = [] + osv_imported = 0 try: with VulnerabilityDatabase(str(temporary)) as database: for ecosystem in SEED_ECOSYSTEMS: @@ -110,6 +128,7 @@ def build_seed_database( failed.append(ecosystem) continue successful.append(ecosystem) + osv_imported += stats.advisories_imported database.correlate_aliases() source_files = {"cisa-kev": "cisa-kev.json", "epss": "epss.json", "ghsa": "github-advisories.json"} importers = {"cisa-kev": ("import_kev_json", {"allow_unresolved": True}), "epss": ("import_epss_json", {"allow_unresolved": True}), "ghsa": ("import_ghsa_json", {})} @@ -127,7 +146,7 @@ def build_seed_database( raise ValueError("seed SQLite integrity check failed") database_manifest = database.build_snapshot_manifest() os.replace(temporary, output) - reports["osv"] = {"status": "partial", "successful_ecosystems": successful, "failed_ecosystems": failed, "records_per_ecosystem": max_records_per_ecosystem} + reports["osv"] = {"status": "partial", "imported": osv_imported, "successful_ecosystems": successful, "failed_ecosystems": failed, "records_per_ecosystem": max_records_per_ecosystem} manifest = build_seed_manifest(reports, database_manifest) snapshot_id = "seed-" + database_manifest["content_digest"].split(":", 1)[1][:32] source_digest = "sha256:" + hashlib.sha256(json.dumps(reports, sort_keys=True, separators=(",", ":")).encode("utf-8")).hexdigest() diff --git a/tests/test_seed_bootstrap.py b/tests/test_seed_bootstrap.py index 9897a29..cfd323c 100644 --- a/tests/test_seed_bootstrap.py +++ b/tests/test_seed_bootstrap.py @@ -1,9 +1,16 @@ import hashlib +import json +import shutil import tempfile import unittest from pathlib import Path +from unittest.mock import patch -from src.vulnerability.bootstrap import verify_asset_sha256 +from src.vulnerability.bootstrap import ( + activate_seed_database, + validate_signed_release_manifest, + verify_asset_sha256, +) class SeedBootstrapTests(unittest.TestCase): @@ -21,6 +28,38 @@ def test_verify_asset_sha256_rejects_tampering(self): with self.assertRaises(ValueError): verify_asset_sha256(path, "sha256:" + "0" * 64) + def test_verify_asset_sha256_rejects_malformed_digest(self): + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "seed.sqlite" + path.write_bytes(b"seed") + for value in ("sha256:abc", "sha256:" + "A" * 64, "md5:" + "0" * 32): + with self.subTest(value=value), self.assertRaises(ValueError): + verify_asset_sha256(path, value) + + def test_signed_release_manifest_must_match_detached_manifest(self): + manifest = json.loads((Path(__file__).parents[1] / "data/vulnerability-seed/manifest.json").read_text(encoding="utf-8")) + envelope = {"key_id": "coderisktools-seed-2026", "manifest": manifest} + with patch("src.vulnerability.bootstrap.verify_manifest", return_value=dict(manifest)): + actual = validate_signed_release_manifest(manifest, envelope, {"coderisktools-seed-2026": b"k" * 32}) + self.assertEqual(actual, manifest) + tampered = dict(manifest) + tampered["advisory_count"] += 1 + with patch("src.vulnerability.bootstrap.verify_manifest", return_value=dict(manifest)): + with self.assertRaises(ValueError): + validate_signed_release_manifest(tampered, envelope, {"coderisktools-seed-2026": b"k" * 32}) + + def test_seed_activation_is_explicit_and_profile_bound(self): + source_root = Path(__file__).parents[1] / "data/vulnerability-seed" + with tempfile.TemporaryDirectory() as tmp: + database = Path(tmp) / "seed.sqlite" + shutil.copy2(source_root / "seed-vulndb.sqlite", database) + manifest = json.loads((source_root / "manifest.json").read_text(encoding="utf-8")) + state = activate_seed_database(database, manifest, apply=False) + self.assertEqual(state["state"], "activation_planned") + state = activate_seed_database(database, manifest, apply=True) + self.assertEqual(state["state"], "active") + self.assertEqual(state["profile"], "seed") + if __name__ == "__main__": unittest.main() diff --git a/tests/test_seed_profile.py b/tests/test_seed_profile.py index 68b185a..a833302 100644 --- a/tests/test_seed_profile.py +++ b/tests/test_seed_profile.py @@ -19,7 +19,7 @@ def test_seed_profile_is_partial_and_requires_core_sources(self): def test_seed_manifest_is_explicitly_partial(self): manifest = build_seed_manifest( - {"cisa-kev": {"status": "complete", "records": 1}, "epss": {"status": "bounded", "records": 1}, "ghsa": {"status": "bounded", "records": 1}, "osv": {"status": "partial", "successful_ecosystems": ["PyPI", "npm", "Go", "Maven"], "failed_ecosystems": []}}, + {"cisa-kev": {"status": "complete", "records": 1, "imported": 1}, "epss": {"status": "bounded", "records": 1, "imported": 1}, "ghsa": {"status": "bounded", "records": 1, "imported": 1}, "osv": {"status": "partial", "imported": 4, "successful_ecosystems": ["PyPI", "npm", "Go", "Maven"], "failed_ecosystems": []}}, {"advisory_count": 2, "affected_package_count": 1, "content_digest": "sha256:" + "a" * 64}, ) self.assertEqual(manifest["profile"], "seed") @@ -31,6 +31,15 @@ def test_seed_manifest_rejects_missing_required_source(self): with self.assertRaises(ValueError): validate_seed_manifest({"profile": "seed", "completeness": "partial", "production_full_database": False, "sources": {}}) + def test_seed_manifest_rejects_zero_imported_required_source(self): + manifest = build_seed_manifest( + {"cisa-kev": {"status": "complete", "records": 1, "imported": 1}, "epss": {"status": "bounded", "records": 1, "imported": 1}, "ghsa": {"status": "bounded", "records": 1, "imported": 1}, "osv": {"status": "partial", "imported": 4, "successful_ecosystems": ["PyPI", "npm", "Go", "Maven"], "failed_ecosystems": []}}, + {"advisory_count": 2, "affected_package_count": 1, "content_digest": "sha256:" + "a" * 64}, + ) + manifest["sources"]["ghsa"]["imported"] = 0 + with self.assertRaises(ValueError): + validate_seed_manifest(manifest) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_stage5_robustness.py b/tests/test_stage5_robustness.py index 965f21d..777971b 100644 --- a/tests/test_stage5_robustness.py +++ b/tests/test_stage5_robustness.py @@ -540,6 +540,22 @@ def test_scan_directory_skips_binary_extensions(self): import shutil shutil.rmtree(temp_dir, ignore_errors=True) + def test_scan_directory_skips_sqlite_database_files(self): + """Directory scan should skip SQLite database artifacts, including large seed snapshots.""" + temp_dir = tempfile.mkdtemp() + with open(os.path.join(temp_dir, "seed-vulndb.sqlite"), "wb") as handle: + handle.truncate(6 * 1024 * 1024) + with open(os.path.join(temp_dir, "app.py"), "w") as handle: + handle.write("print('safe')\n") + + try: + scanner = SecretScanner() + result = scanner.scan_directory(temp_dir) + self.assertEqual([], result.findings) + finally: + import shutil + shutil.rmtree(temp_dir, ignore_errors=True) + def test_scan_directory_includes_security_dotfiles(self): """Directory scan should include security-relevant dotfiles.""" temp_dir = tempfile.mkdtemp() From e6ed8b986d9015fca53c2be992d75b164ca385a2 Mon Sep 17 00:00:00 2001 From: CodeRiskTools Date: Thu, 23 Jul 2026 18:48:27 +0000 Subject: [PATCH 65/65] build: normalize sdist release metadata --- scripts/normalize_sdist.py | 93 +++++++++++++++++++++ tests/test_release_sdist_reproducibility.py | 44 ++++++++++ 2 files changed, 137 insertions(+) create mode 100644 scripts/normalize_sdist.py create mode 100644 tests/test_release_sdist_reproducibility.py diff --git a/scripts/normalize_sdist.py b/scripts/normalize_sdist.py new file mode 100644 index 0000000..0a9e673 --- /dev/null +++ b/scripts/normalize_sdist.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +"""Normalize a Python sdist tar.gz to deterministic release bytes.""" +from __future__ import annotations + +import argparse +import copy +import gzip +import os +import tarfile +import tempfile +from pathlib import Path, PurePosixPath + +MAX_MEMBERS = 10_000 +MAX_TOTAL_BYTES = 256 * 1024 * 1024 + + +def _safe_name(name: str) -> None: + path = PurePosixPath(name) + if not name or path.is_absolute() or ".." in path.parts or "\\" in name or "\x00" in name: + raise ValueError("sdist contains an unsafe member path") + + +def normalize_sdist(source: str | os.PathLike[str], destination: str | os.PathLike[str], *, epoch: int) -> None: + """Rewrite a regular-file/directory sdist with fixed metadata and gzip header.""" + if type(epoch) is not int or epoch < 0: + raise ValueError("epoch must be a non-negative integer") + source_path = Path(source) + destination_path = Path(destination) + if source_path.is_symlink() or not source_path.is_file(): + raise ValueError("source sdist must be a regular non-symlink file") + if destination_path.is_symlink() or source_path.resolve() == destination_path.resolve(strict=False): + raise ValueError("destination must be a distinct non-symlink path") + destination_path.parent.mkdir(parents=True, exist_ok=True) + fd, temp_name = tempfile.mkstemp(prefix=f".{destination_path.name}.", dir=str(destination_path.parent)) + os.close(fd) + temporary = Path(temp_name) + seen: set[str] = set() + total = 0 + try: + with tarfile.open(source_path, "r:gz") as input_archive: + members = input_archive.getmembers() + if not members or len(members) > MAX_MEMBERS: + raise ValueError("sdist member count is outside the allowed range") + with temporary.open("wb") as raw_output: + with gzip.GzipFile(filename="", mode="wb", fileobj=raw_output, compresslevel=9, mtime=epoch) as gzip_output: + with tarfile.open(fileobj=gzip_output, mode="w", format=tarfile.PAX_FORMAT) as output_archive: + for original in members: + _safe_name(original.name) + if original.name in seen: + raise ValueError("sdist contains duplicate member paths") + seen.add(original.name) + if not (original.isfile() or original.isdir()): + raise ValueError("sdist contains an unsupported member type") + total += original.size + if total > MAX_TOTAL_BYTES: + raise ValueError("sdist payload exceeds the byte limit") + member = copy.copy(original) + member.mtime = epoch + member.uid = 0 + member.gid = 0 + member.uname = "" + member.gname = "" + member.pax_headers = {} + if member.isfile(): + stream = input_archive.extractfile(original) + if stream is None: + raise ValueError("sdist regular member cannot be read") + output_archive.addfile(member, stream) + else: + output_archive.addfile(member) + raw_output.flush() + os.fsync(raw_output.fileno()) + os.replace(temporary, destination_path) + except BaseException: + try: + temporary.unlink() + except FileNotFoundError: + pass + raise + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("source") + parser.add_argument("destination") + parser.add_argument("--epoch", type=int, required=True) + args = parser.parse_args() + normalize_sdist(args.source, args.destination, epoch=args.epoch) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_release_sdist_reproducibility.py b/tests/test_release_sdist_reproducibility.py new file mode 100644 index 0000000..473874a --- /dev/null +++ b/tests/test_release_sdist_reproducibility.py @@ -0,0 +1,44 @@ +import gzip +import io +import tarfile +import tempfile +import unittest +from pathlib import Path + +from scripts.normalize_sdist import normalize_sdist + + +class ReproducibleSdistTests(unittest.TestCase): + @staticmethod + def _source(path: Path, mtime: int) -> None: + with tarfile.open(path, "w:gz") as archive: + info = tarfile.TarInfo("package/file.txt") + info.size = 7 + info.mode = 0o640 + info.mtime = mtime + archive.addfile(info, io.BytesIO(b"payload")) + + def test_normalization_removes_build_time_without_changing_payload(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + first_source = root / "first.tar.gz" + second_source = root / "second.tar.gz" + first = root / "first.normalized.tar.gz" + second = root / "second.normalized.tar.gz" + self._source(first_source, 100) + self._source(second_source, 200) + + normalize_sdist(first_source, first, epoch=123456789) + normalize_sdist(second_source, second, epoch=123456789) + + self.assertEqual(first.read_bytes(), second.read_bytes()) + with gzip.open(first, "rb") as stream: + with tarfile.open(fileobj=stream, mode="r:") as archive: + member = archive.getmember("package/file.txt") + self.assertEqual(member.mtime, 123456789) + self.assertEqual(member.mode, 0o640) + self.assertEqual(archive.extractfile(member).read(), b"payload") + + +if __name__ == "__main__": + unittest.main()