Skip to content

Artifact Keeper 1.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 16:25
caaaad8

Highlights

Know who did what. A functional audit log now records security-relevant events (artifact upload/download/delete, user/role/repository changes, and permission denials), queryable through a new admin endpoint with filters and pagination.

Know who pulled what, and from where. Every download across all 40+ formats now captures the real client IP (proxy-aware) and the user, into per-download telemetry with new admin views by IP and by user. This also closes a trusted-proxy header-spoofing gap on the download path.

Answer "who is affected by this CVE?" New CVE blast-radius endpoints join a vulnerability to the users and IPs that actually downloaded the affected artifact, plus a per-repository exposure classification that flags "public repo, everyone exposed" without enumerating unbounded populations.

First-class artifact versioning. Opt-in per-repository versioning for generic and mlmodel artifacts. Re-uploading to an existing path appends an immutable revision instead of overwriting, with a version selector on download and full revision history. Off by default; existing artifacts and release-immutability are unaffected.

Tighter access control. Repository RBAC now enforces action-specific permissions (a read-only grantee can no longer write or delete), and sensitive admin surfaces (dependency-track, CVE status, webhook creation, scan triggers, cache invalidation) are gated to admins, with each denial recorded in the audit log.

A coherent SSRF story. Internal-service clients reach their private-network endpoints through a dedicated trusted path, webhook and SSO fetches honor their private-IP toggles at connect time, and attacker-influenceable upstream/proxy paths stay fail-closed. Cloud-metadata, loopback, and link-local addresses remain hard-blocked everywhere.

Security housekeeping. The Trivy code-scanning backlog was burned down (scanner tool bumps on a patched Go toolchain, base-image refresh, and cache-busting so OS errata re-resolve on every publish), and filesystem/incus scans are back to first-class Trivy coverage on the hardened CLI-free image.

Upgrade notes

  • New audit-log and download-telemetry tables are populated by the included migrations; no manual action required.
  • Artifact versioning is opt-in per repository (versioning_enabled), defaults off. Turning it on changes re-upload behavior from overwrite to append-revision for that repo.
  • If you previously hit the #2354 SSRF over-block on private-network scanner adapters or toggle-enabled webhook/SSO targets, this release resolves it. Review WEBHOOK_ALLOW_PRIVATE_IPS / SSO_ALLOW_PRIVATE_IPS if you rely on private targets.

Full detail for every item is in CHANGELOG.md under 1.5.0. The complete PR-by-PR breakdown is below.


What's Changed

  • ci: add docs-only shim workflow for path-filtered required checks by @brandonrc in #2379
  • docs(changelog): reconstruct 1.2.1 through 1.4.1 from GitHub Releases by @brandonrc in #2375
  • ci(release): require a CHANGELOG entry for the release version; add RELEASING.md by @brandonrc in #2377
  • feat(audit): functional audit log — emit events + admin query endpoint (#2366) by @brandonrc in #2373
  • feat(rpm): Phase-1 proxy hardening — SSRF connect-time IP check, RPM cache classification, content integrity, mirrorlist rejection by @brandonrc in #2354
  • docs(changelog): record 1.5.0 Unreleased entries (audit log, RPM + private-IP caveat) by @brandonrc in #2381
  • feat(telemetry): capture real client IP + user for downloads across all formats by @brandonrc in #2384
  • feat(scanner): route filesystem & incus scans through the scanner-adapter by @brandonrc in #2387
  • feat(security): CVE blast-radius — users who downloaded a vulnerable artifact + per-repo access exposure by @brandonrc in #2388
  • feat(artifacts): first-class versioning for generic/mlmodel artifacts (retain history, no overwrite) by @brandonrc in #2385
  • security: burn down Trivy code-scanning CVE backlog (scanner bumps, Go 1.26.5, base refresh, cache-bust) by @brandonrc in #2393
  • fix(telemetry): record download statistics for virtual content serves via /artifacts/{path} by @brandonrc in #2396
  • fix(scanner): exempt operator-configured internal-service clients from the connect-time SSRF private-IP gate by @brandonrc in #2395
  • fix(authz): action-specific write/delete gate on generic REST + OCI artifact paths (#2321 G2) by @brandonrc in #2399
  • fix(authz): deny-by-default admin gates for dependency-track, CVE-status, webhook-create, scan-trigger, cache-invalidate (#2321) by @brandonrc in #2400
  • feat(audit): embed actor username in the admin audit response by @brandonrc in #2401
  • fix(versions): serialize uploaded_by in ArtifactVersionResponse by @brandonrc in #2402
  • fix(telemetry): record downloads on download_artifact virtual-member-local branch by @brandonrc in #2403
  • fix(ssrf): honor per-target private-IP toggles for webhook and SSO connect-time checks by @brandonrc in #2404
  • fix: de-duplicate path/query param name on downloads by-ip/by-user by @brandonrc in #2409
  • chore(release): bump version to 1.5.0 by @brandonrc in #2411

Full Changelog: v1.4.2...v1.5.0