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

← All reference

Reference

25. Elasticsearch / OpenSearch

Source: https://github.com/nuclide-research/AI-LLM-Infrastructure-OSINT/blob/main/shodan/queries/25-elasticsearch

Section created: 2026-05-09

Elasticsearch and OpenSearch are the canonical unstructured-data search engines in the AI stack: they back RAG pipelines, LLM observability stores (MLflow artifact logs, Phoenix traces), AML/KYC compliance databases, and AI-generated content indexes. Elasticsearch 7.x and earlier shipped with security disabled by default; 8.x flipped the default to auth-on. The population-scale finding is that a substantial fraction of 7.x deployments remain deployed and unpatched in the 8.x era.

Survey result (2026-05-03): 313 masscan hits on port 9200 across 28 cloud /16 ranges (partial, ~40% coverage) → 42 confirmed unauthenticated ES/OpenSearch instances (38 ES, 4 OpenSearch). ~18 ransomed/wiped (only read_me index). ~16 with production data. Notable: AML/KYC compliance SaaS with 79 million KYB records + 6.2 million individual sanctions-list entries at 168.119.90.62:9200 (Hetzner). Vietnamese AI image service API logs with customer credentials. Nepal government procurement notices.

Auth posture: T1 for pre-8.x deployments (auth disabled by default). T2 for 8.x (auth on by default, but xpack.security.enabled: false is a documented workaround that operators apply to “simplify” deployment).

CVE watch:

  • CVE-2021-22145 — Elasticsearch < 7.14.0: node crash via malformed log request (DoS).
  • CVE-2023-31419 — Elasticsearch < 8.9.0: stack overflow in Painless scripting (pre-auth DoS in some configurations).
  • CVE-2024-23445 — Elasticsearch: unauthenticated RCE in JNDI lookup via vulnerable log4j (if unpatched node runs old log4j).
  • Ransomware: unauth Elasticsearch has been a primary ransomware target since 2017 (“Meow” bot, “READ_ME_TO_RECOVER_YOUR_DATA” pattern observed in ~18 survey instances).

Core fingerprints

Shodan QueryNotes
port:9200 "elasticsearch"Elasticsearch on default HTTP port
port:9200 http.html:"elasticsearch"HTML-scoped
port:9200 "cluster_name"Elasticsearch root response field; highest precision
port:9200 "cluster_name" "version"Root response JSON structure
port:9200 "tagline"Elasticsearch root response always includes "tagline": "You Know, for Search"
port:9200 "You Know, for Search"Exact tagline; very high precision
port:9200 http.status:200Open (no auth redirect)
port:9200 -port:443Non-HTTPS direct exposure
elasticsearch port:9200Bare-string on default port
"elasticsearch" port:9200 -port:443Non-HTTPS; higher misconfiguration probability
product:"Elastic"Shodan service fingerprint
product:"Elastic" port:9200Service fingerprint + default port
product:"Elastic" -port:443Non-HTTPS service fingerprint
http.html:"/_cat/indices"Cat indices endpoint path in source
http.html:"/_cluster/health"Cluster health endpoint path
http.html:"/_cat/nodes"Cat nodes endpoint path

OpenSearch

Shodan QueryNotes
port:9200 "opensearch"OpenSearch on default port
port:9200 http.html:"opensearch"HTML-scoped
port:9200 "OpenSearch"Capitalized form
"opensearch" port:9200 "cluster_name"OpenSearch with cluster name field
port:9200 "distribution":"opensearch"OpenSearch distribution field in root response
hostname:"opensearch"rDNS pattern

Shodan indexing note: JSON field syntax queries ("number":"7.") return 0 — Shodan’s basic plan does not parse JSON field paths with escaped quotes. Use substring matching on the version string directly. port:9200 "7.17" (1,542) is the working ES 7.17 query.

Version targeting (auth-off era)

Shodan QueryVerified hitsNotes
port:9200 "7.17"1,542ES 7.17.x (latest 7.x, auth-off default); version string in response body
port:9200 "7.10"13ES 7.10.x
port:9200 "version" "cluster_name"91Generic ES structure; any version with both fields indexed
port:9200 "lucene_version"70Lucene version field in ES root response
port:9200 "cluster_uuid"60Cluster UUID field in ES root response
port:9200 "number":"7."0JSON field syntax not supported; use substring form above
port:9200 "number":"6."0Same; ES 6.x indexed via port:9200 "6.8" etc.

Ransomware / wiped instances

Shodan QueryNotes
port:9200 "read_me"”Read me to recover data” ransomware index pattern
port:9200 "READ_ME"Uppercase variant
port:9200 "RECOVER"Ransom recovery message
port:9200 "Meow"”Meow” bot attack remnant (wipes data, renames indices)
port:9200 "read_me_to_recover"Full ransomware index name pattern

AI/ML-specific indices (high-value targeting)

Shodan QueryVerified hitsNotes
port:9200 "mlflow"MLflow artifact logs in ES
port:9200 "kyb_data"0KYB/KYC compliance data — not Shodan-indexed; masscan-only discovery (79M record AML platform found via direct /16 sweep)
port:9200 "kyb_data_index"0Index name variant; same — masscan required
port:9200 "sanctions"Sanctions database indices
port:9200 "aml"AML-related indices
port:9200 "embeddings"Vector embedding storage in ES
port:9200 "langchain"LangChain ES integration indices
port:9200 "openai"OpenAI-integrated ES deployment
port:9200 "vector"Vector search indices
port:9200 "semantic"Semantic search ES deployment

Cloud-provider scoped

Shodan QueryNotes
port:9200 "You Know, for Search" org:"hetzner"Hetzner (KYC SaaS finding at 168.119.90.62)
port:9200 "You Know, for Search" org:"digitalocean"DigitalOcean
port:9200 "You Know, for Search" org:"amazon"AWS (often Elasticsearch Service instances misconfigured)
port:9200 "You Know, for Search" org:"ovh"OVH
port:9200 "You Know, for Search" org:"linode"Linode
port:9200 "You Know, for Search" org:"scaleway"Scaleway
port:9200 "You Know, for Search" country:USUS-scoped
port:9200 "You Know, for Search" country:DEGermany
port:9200 "You Know, for Search" country:CNChina
port:9200 "You Know, for Search" country:INIndia
port:9200 "You Know, for Search" country:BRBrazil
port:9200 "You Know, for Search" org:"university"Academic research clusters
port:9200 "You Know, for Search" org:"hospital"Healthcare (EHR/medical data risk)

Elasticsearch combined with AI stack

Shodan QueryNotes
port:9200 "cluster_name" org:"amazon"AWS ES — high-value, often misconfigured IAM
port:9200 "cluster_name" -port:443 org:"hetzner"Hetzner unauth ES
port:9200 "number":"7." org:"digitalocean"DigitalOcean ES 7.x (auth-off default tier)
(port:9200 OR port:9243) "elasticsearch"ES HTTP + HTTPS alt port
port:9200 "You Know, for Search" -port:443All unauth ES, non-HTTPS
port:9200 "You Know, for Search" http.status:200HTTP 200 (no auth redirect) — directly accessible

Kibana (ES companion, sometimes exposes index data via UI)

Shodan QueryNotes
http.title:"Kibana"Kibana UI; broadest
http.title:"Kibana" port:5601Default Kibana port
http.title:"Kibana" -port:443Non-HTTPS Kibana
"Kibana" port:5601Bare-string on default port
http.html:"kibana" port:5601HTML-scoped
port:5601 http.status:200Live Kibana without auth redirect
http.title:"Kibana" org:"hetzner"Hetzner-hosted
http.title:"Kibana" org:"digitalocean"DigitalOcean-hosted
http.title:"Kibana" org:"amazon"AWS-hosted