Most recent
navigate open esc close Corpus index built 2026-06-07 23:58 UTC

← All research

Survey May 9, 2026

SurrealDB, Typesense, and LanceDB: Exposure Survey

NuClide Research · 2026-05-09


Summary

Three additional vector-capable databases surveyed as part of the 2026-05-09 vector DB series. Combined Shodan pull → asyncio probe across 995 IPs (431 SurrealDB + 354 Typesense + 210 LanceDB).

DCWF KSAT coverage

Auto-derived from DCWF AI work-role rule files (ksat-tag).

  • 672 (AI Test & Evaluation Specialist): K7003, S7068, S7075, T5904
  • 733 (AI Risk & Ethics Specialist): T5868
  • overlap (Common AI KSATs (all 5 roles)): K1158, K22, K6311, K6900, K6935, K7003

SurrealDB is the notable finding: 262 reachable, 34 unauthenticated (13% open rate). Auth-off instances heavily skewed toward older 1.x versions, consistent with SurrealDB’s auth posture tightening across versions. Typesense (60 reachable) enforces API key auth universally. 0 unauth. LanceDB Shodan hits are almost entirely web applications embedding the library, not standalone REST servers. 7 web app surfaces found, 0 LanceDB REST API endpoints confirmed.


SurrealDB

Methodology

shodan download '"surrealdb"' → 431 unique IPs
asyncio probe: GET /health → 200 confirms reachable
               GET /version → version string
               POST /sql (no auth header) → 200 = unauth, 401 = auth required

Results

MetricValue
IPs probed431
Reachable (/health 200)262
Unauthenticated (SQL executes)34
Auth-gated (401)228

Version distribution (top 8)

VersionCount
2.6.531
3.0.529
2.3.1019
2.4.017
3.0.413
2.6.011
2.6.39
unknown11

Auth posture by version era

The 34 unauth instances cluster heavily in the 1.x era (betas through 1.5.x). SurrealDB tightened auth defaults significantly between v1.0 (beta) and v2.x:

  • v1.0 betas / v1.x (pre-2023): Auth optional, many ship with --user root --pass root defaults or no auth at all
  • v2.x+: Auth required by default; --unauthenticated flag needed to disable
  • v3.x: Auth enforced, no bypass flag

Unauth instances confirmed (selection):

142.44.211.206:8000  v=surrealdb-3.0.4   ← anomalous: v3 unauth
106.15.196.17:8000   v=surrealdb-2.6.5   ← v2.6 unauth (misconfigured)
168.119.239.48:8000  v=surrealdb-2.3.10
146.190.50.35:8000   v=surrealdb-1.0.0+20230913
116.202.33.62:8000   v=surrealdb-1.0.0-beta.9
173.230.150.151:8000 v=surreal-1.0.0-beta.8

The surrealdb-3.0.4 unauth instance (142.44.211.206) is the most anomalous. V3 shipped with strict auth defaults. Likely deployed with explicit --unauthenticated flag or a custom surreal.toml disabling auth.

Impact

SurrealDB is a multi-model database (document + graph + relational + vector) with a SQL-like query language. An unauthenticated POST /sql endpoint means:

  • SELECT * FROM <table>: full table dump
  • SELECT * FROM <table> WHERE vector::similarity::cosine($embedding, vector_field) > 0.8. Vector search
  • CREATE <table> SET ...: data injection
  • DELETE <table>: data destruction
  • DEFINE USER ...: privilege escalation if DEFINE is permitted without auth

Typesense

Results

MetricValue
IPs probed354
Reachable (/health 200)60
Unauthenticated0
Auth-gated (API key required)60

Typesense requires an X-TYPESENSE-API-KEY header for all collection operations. The /health endpoint returns {"ok":true} without a key (confirming reachability) but /collections returns 401 without the key. Typesense has the best auth posture of any vector DB surveyed to date: 0% unauthenticated.

Auth posture note: Typesense’s API key is set at startup and baked into application code. The key itself may be discoverable via other means (JS source, exposed env files, public repos) but the Typesense server layer is consistently gated.


LanceDB

Results

MetricValue
IPs probed210
Web apps with “lancedb” in HTML7
Standalone LanceDB REST servers0
Tables accessible0

The http.html:"lancedb" Shodan signal captures web applications that embed the lancedb Python library (appear in page source, dependency lists, or error messages) rather than standalone LanceDB REST API servers. The 7 confirmed apps are generic web applications (Jupyter, Streamlit, Flask, FastAPI frontends) that reference lancedb in their HTML. None expose the LanceDB REST API directly.

LanceDB REST server note: LanceDB’s standalone REST server (lancedb-server) is a newer addition and less commonly deployed publicly. The library is most often used embedded within Python applications, not as a standalone HTTP service. Shodan cannot distinguish “this app uses lancedb” from “this is a lancedb REST server”. Live probing of /v1/table/ is required. None of the 7 confirmed apps returned valid LanceDB REST responses.

Assessment: LanceDB as a standalone database does not appear in meaningful numbers on the public internet at this time. It is primarily an embedded/local library. The Shodan signal for it is noise from web apps that import the package.


Comparative Auth Posture Summary

DatabaseReachableUnauthUnauth %Default auth posture
ChromaDB (prior survey)9292100%Off by default (< v0.6)
Weaviate (this series)69443563%Off by default
Milvus/Attu (this series)76359378%RBAC opt-in
SurrealDB (this survey)2623413%On by default (v2+), off in 1.x
Typesense (this survey)6000%Required, no bypass
LanceDB (this survey)700%Embedded library, N/A

Typesense is the clear outlier: mandatory API key auth with no opt-out path. SurrealDB’s improvement from 1.x to 2.x/3.x is visible in the data. The unauth instances are disproportionately old versions.


Discovery Context

Survey conducted 2026-05-09. Shodan pulls: "surrealdb" (454 hits), "typesense" (416 hits), http.html:"lancedb" (420 hits). Asyncio probe with 2s connect / 4s read / 80 concurrent.

Companion surveys: weaviate-cloud-survey-2026-05.md, milvus-attu-survey-2026-05.md.