SECURITY

What we send, what we keep

The short version: read-only GETs, aggregate-only telemetry, no accounts. The details below are the honest version, not the marketing one.

Probe policy

A scan sends HTTP GET requests to metadata endpoints only — version banners, model lists, config pings. No logins, no POST/PUT/DELETE to the target, no exploit verification, no model pulls. Bodies are truncated at 64 KiB; timeouts are 3s connect, 5s per request. The full contract is PROBES.md; what we probe per product is on /coverage.

Target validation — DNS pinning & SSRF

Targets are resolved once and the scan pins those IPs for every request; redirects that leave the host are blocked, so DNS cannot be rebound mid-scan. The guard is an allowlist, not a blocklist: a target is scanned only if every resolved address is globally routable unicast IPv4. Private, loopback, link-local, CGNAT, benchmarking, and cloud-metadata ranges are rejected — as literals and as DNS answers.

Data retention

Per scan we store the grade, the findings, and the target you submitted. The target feeds lifecycle telemetry (time-to-fix) under a one-way hash — SHA-256, unsalted and target-specific. That defeats casual browsing, but a hash of a low-entropy value like a hostname is obfuscation, not anonymization; we treat it that way and you should too. Scan pages are served no-store. Honeypot telemetry on /botwatch never stores full source IPs — at most a truncated first octet (65.x.x.x).

Accounts & tracking

No accounts, no tracking cookies, no analytics pixels. Fonts are self-hosted (OFL-licensed IBM Plex Sans, JetBrains Mono, Syne) — no request to Google Fonts or any font CDN. The one third-party call left is Cloudflare Turnstile, the bot check on the scan form; it loads only on that form, nowhere else on the site.

Rate limits

5 scans per hour per client IP; the same target within 10 minutes returns the recent scan instead of re-running. The API endpoints (gallery, speedrun) cap at 10 submissions per hour per IP. X-Forwarded-For is trusted only from configured proxies. There is no bulk API, and there never will be.

CLI supply chain

The aicheck-scan CLI is published to PyPI with OIDC trusted publishing — no long-lived API tokens — plus an SBOM and build provenance, and each release ships SHA256 sums. The monthly data releases on this site carry SHA256SUMS too (see /releases). Details: docs/trust.md.

Disclosure

Report vulnerabilities to security@unauth.dev. We acknowledge within 72 hours, triage within 7 days, and aim to fix within 30 days (SECURITY.md). Machine-readable: /.well-known/security.txt.