Skip to content

v0.5.0 — security and release hardening

Latest

Choose a tag to compare

@cotdp cotdp released this 20 Oct 15:00
· 4 commits to main since this release
5bca55c

0.5.0 — security and release readiness

Status: released and deployed after owner-authorized merge and successful validation. Residual upstream OS and native-library advisories remain disclosed in issue #11; no scan exclusions were added.

Changes

  • Refresh the locked dependency graph and enforce patched minimums. Retain the
    MCP 1.x API and remove the unpatched DiskCache dependency.
  • Store cached values as validated JSON in SQLite, with TTL, LRU eviction,
    statistics, and concurrent process support. Never deserialize pickle.
  • Require an admin token for dashboard and API access. Reject cross-origin
    browser mutations, malformed headers, and invalid or oversized JSON.
  • Mask proxy URLs and preserve existing credentials when masked configuration
    values are saved back. Apply valid configuration updates atomically.
  • Verify TLS certificates by default and bind the local CLI and Compose host
    ports to loopback. Keep results fetched without certificate verification
    separate from verified cache entries.
  • Escape dashboard attributes and reject unsafe citation URL schemes.
  • Update the image installer, remove unused bootstrap pip, apply available OS updates, and
    remove unused native build dependencies. Keep application code and installed
    dependencies owned by root while the service runs as an unprivileged user.
  • Enforce lint, formatting, typing, tests, dependency auditing, package builds,
    and Python code scanning. Group routine dependency updates.
  • Validate release provenance from merged main, matching versions, and a
    container smoke test before image publication. Historical tags cannot move
    the production latest image backwards.

This release also includes the previously merged OpenRouter backend and locked
Docker build, which were not present in the last recorded published image.

Upgrade

  1. Inject SCRAPER_ADMIN_TOKEN if administration is needed. Browser sign-in uses
    username admin and the token as password; APIs use Bearer authentication.
    With no token, admin/dashboard routes are disabled with HTTP 503.
  2. Keep MCP access restricted to trusted clients. The admin token does not
    authenticate MCP requests. Use an authenticated gateway for remote clients.
  3. Use HTTPS for remote administration. If a reverse proxy changes the scheme
    or host, configure its exact public origin in SCRAPER_ADMIN_ALLOWED_ORIGINS.
  4. Configure trusted CA certificates for private or intercepted TLS. Scraping
    no longer silently accepts invalid certificates by default.
  5. Expect a cold cache. The new cache-v1.sqlite3 never opens old cache.db or
    pickle value files. Those old files remain untouched. Cache size metrics now
    measure encoded keys and values, excluding SQLite overhead.
  6. Update custom scripts that access the dashboard or /api/* to authenticate
    and send Content-Type: application/json on mutations. When saving config,
    omit unchanged secrets or retain their returned mask; "" clears a value.

The supplied Compose files publish 127.0.0.1:8000:8000. A container still binds
internally to 0.0.0.0:8000. Explicitly configure a trusted interface if remote
connectivity is required.

Publication and rollback

Follow RELEASE.md. Publish v0.5.0 from merged main, verify
the multi-architecture image digest, and deploy by an immutable digest or version.
The preparation branch must not be tagged or published as production.

Retain the previously deployed image digest and configuration for rollback.
The prior image can read its original cache files because this upgrade does not
modify them. Rolling back also restores the older security behavior; use it only
as a temporary operational measure with network access restricted.

Publication and live verification

Publication workflow passed all quality checks and container smoke tests. Both Docker Hub and GHCR publish 0.5.0 for amd64 and arm64 with SBOMs and provenance.

Immutable digest: sha256:a49d0758342fc4649d5668ecd498958baa40641d28af161d30b4ac7c117c84b7.

The existing production service is healthy on that digest. Live agent-browser desktop/mobile, configuration, authentication, MCP, static/Chromium scraping, cache, and Sonar checks passed. A verified rollback container uses the previous image and preserved settings; legacy cache files remain intact. See the attached verification addendum for the correction to the initial container-retention record.

The attached verification record and complete architecture-specific image scans describe the residual findings. The wheel and source archive were built by the successful release workflow; checksum files are attached. OpenRouter account behavior was not live-tested without an injected credential.