COVERAGE
What I check
29 AI services. Read-only GETs. Same host → same grade.
How a host is graded
| scanner severity | meaning | grade |
|---|---|---|
| CRITICAL | unauthenticated write/exec surface | F |
| HIGH | unauthenticated read surface | D |
| MEDIUM | info leak (versions, banners) | C |
| no findings | every probe refused or walled | A |
| INFO | auth-walled service I fingerprinted | observation · never graded |
the letter is the worst open severity. Same host, same answers, same grade. The grader is a lookup table, not an LLM.
a partial scan (some probes unanswered) says so on the report. A clean grade there is not proof of clean.
Fingerprint detections 17 services
Additive GET fingerprints. Primary checkers own the grade when they fire first. Data derived from Zhuque Lab / Tencent’s AI-Infra-Guard fingerprint set (Apache-2.0; see NOTICE.md). No write, exploit, or LLM-keyed rules.
Ollama 1 detection
MEDIUM Ollama fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
vLLM 1 detection
MEDIUM vLLM fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
n8n 1 detection
MEDIUM n8n fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Jupyter 3 detections
MEDIUM Jupyter fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
MEDIUM Jupyter fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
MEDIUM Jupyter fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
MLflow 1 detection
MEDIUM MLflow fingerprinted via unauthenticated GET
GET fingerprint — the scanner's detection for this service.
LiteLLM 1 detection
MEDIUM LiteLLM fingerprinted via unauthenticated GET
GET fingerprint — the scanner's detection for this service.
Ray 1 detection
MEDIUM Ray fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Kubeflow 1 detection
MEDIUM Kubeflow fingerprinted via unauthenticated GET
GET fingerprint — the scanner's detection for this service.
Dify 1 detection
MEDIUM Dify fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Flowise 1 detection
MEDIUM Flowise fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Open WebUI 1 detection
MEDIUM Open WebUI fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
MCP 1 detection
MEDIUM MCP fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Gradio 1 detection
MEDIUM Gradio fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
LM Studio 1 detection
MEDIUM LM Studio fingerprinted via unauthenticated GET
GET fingerprint — the scanner's detection for this service.
Qdrant 1 detection
MEDIUM Qdrant fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Chroma 1 detection
MEDIUM Chroma fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
Weaviate 1 detection
MEDIUM Weaviate fingerprinted via unauthenticated GET
Additive GET fingerprint. Skipped when the primary checker already fired.
What I don't check the actual boundary
The list above is the whole list. Anything not on it passes as clean. These are the known gaps, so you can decide what this tool is one layer of, instead of the only thing you run.
- Custom and internal AI services. I fingerprint named products. Your in-house inference server or vendor fork is invisible unless it answers like one of these.
- Non-standard ports. I probe the well-known ports per product plus a :443 alias. Most exposed services I count sit on default ports, but a service moved to :8443 is out of scope by design, not by accident.
- Raw binary protocols. Redis RESP on :6379 and gRPC data planes are not HTTP GET territory. The optional Class B data-plane pack covers three gRPC ports (Milvus, Qdrant, Weaviate) for customer-run sweeps; the hosted scanner never runs it.
- Auth-walled versions of known products. A fingerprinted service behind a login is an observation (INFO), not a finding. Weak or default credentials are out of scope; I never try to log in.
- What models do. Prompt injection, jailbreaks, model behavior, agent actions. I check whether the service answers strangers, not what it says to them.
- Internet reachability from CI. A scan from your runner sees what the runner sees. Your firewall and proxy are invisible from inside; the hosted scanner covers the outside-in view, your ASM covers the rest.
- Not yet fingerprinted. LocalAI, text-generation-webui, Oobabooga, and a long tail of smaller tools. New checkers land as real deployments justify them, validated against live banners first.
If a gap on this list matters to you, that is a conversation worth having: hello@unauth.dev. The worst outcome is not a missing checker. It is a wrong assumption about coverage.