← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
tenable:101025 · Disclosed 2017-06-01

Elasticsearch Unrestricted Access Information Disclosure

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is leaving the warehouse door open because the lock used to be optional and the loading bay faces the street

This finding is not a neat version-bounded code bug; it is an exposure condition. Any self-managed Elasticsearch node or cluster that is remotely reachable and has security disabled can leak cluster metadata and, in many deployments, the indexed data itself over the HTTP API. The risk is concentrated in older operational patterns: versions before 8.0 did not auto-enable security, and versions before 6.8.0 / 7.1.0 did not include core security features in the free tier, so insecure deployments were historically common. Even on 8.x, you can still end up exposed if security auto-configuration was skipped or explicitly disabled.

Tenable calling this MEDIUM underrates what actually happens on a reachable host. The exploit is not sophisticated at all: if the service answers unauthenticated requests, the attacker can enumerate indices and often dump sensitive data with curl or standard Elasticsearch tooling. The real friction is reachability—you must be on a network path to the node—but once that condition is met, this behaves more like a ready-made data breach than a garden-variety informational finding.

"If Nessus can read your Elasticsearch without creds, an attacker can too; this is a misconfig with breach-level impact."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a reachable node

Attackers use internet-wide discovery tools like Shodan, Censys, or simple masscan sweeps to identify hosts speaking Elasticsearch on TCP/9200 or on alternate HTTP ports. Because the service advertises itself clearly, fingerprinting is easy once a TCP path exists.
Conditions required:
  • The Elasticsearch HTTP interface is reachable from the attacker's network position
  • A firewall, proxy, or load balancer forwards requests to the node
Where this breaks in practice:
  • By default Elasticsearch binds to localhost, so someone had to intentionally expose it
  • A modern NGFW, private VPC design, or VPN-only access usually kills this step
Detection/coverage: External ASM tools, Shadowserver open Elasticsearch reporting, and Tenable plugin 101025 all cover this class well when the scanner has network reachability.
STEP 02

Confirm missing authentication

The attacker sends unauthenticated requests with curl or a browser to endpoints like /, /_cluster/health, or /_cat/indices. If the server returns 200 and cluster data instead of 401, the lock is off.
Conditions required:
  • Security is disabled, misconfigured, or anonymous access is effectively over-permissive
  • HTTP requests reach the Elasticsearch API directly
Where this breaks in practice:
  • Reverse proxies can require auth even if Elasticsearch itself does not
  • Some deployments leak only metadata while blocking broader index reads
Detection/coverage: HTTP access logs, reverse-proxy logs, and unusual unauthenticated /_cat/* or /_search requests are high-signal. Vulnerability scanners detect the open condition, but not always the full blast radius.
STEP 03

Enumerate and read data

Using curl, httpie, or elasticdump, the attacker lists indices, mappings, shard state, and then pulls documents via _search, scroll APIs, or bulk export tooling. In logging and observability stacks, that often means credentials, tokens, internal hostnames, PII, or operational telemetry are one API call away.
Conditions required:
  • The exposed node stores sensitive indices or permits cluster-wide reads
  • The attacker can issue standard Elasticsearch read APIs
Where this breaks in practice:
  • Least-privilege proxy rules, IP allowlists, or segmentation can limit accessible data
  • Large clusters may slow bulk exfiltration and create noisy traffic
Detection/coverage: Look for spikes in _search, scroll, _mget, _cat/indices, or atypical data volumes from unknown source IPs. DLP and egress monitoring help here; many vuln scanners stop at exposure confirmation.
STEP 04

Exploit the business impact

Once data is readable, the attacker can exfiltrate it, mine it for credentials and lateral movement, or—if write/delete APIs are available—wipe indices and leave ransom or vandalism markers. Historical campaigns against exposed Elasticsearch have done exactly that.
Conditions required:
  • Read access exists for exfiltration, or write/delete access exists for destruction
  • The stored data has operational, privacy, or credential value
Where this breaks in practice:
  • Snapshot backups and immutable logging reduce the damage from wiping
  • Network egress controls and alerting can interrupt bulk theft
Detection/coverage: High-fidelity signals include DELETE on indices, sudden index count drops, unexpected snapshot actions, and abnormal outbound transfer from the cluster or proxy tier.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusYes, exposed Elasticsearch is a repeatedly exploited target. CERT-EU documented automated wiping activity against internet-exposed Elasticsearch starting 2020-03-24, and noted earlier destructive/extortion patterns as well.
Proof-of-concept availabilityTrivial; no exploit kit required. A browser or curl is enough to verify the condition, and common tooling like elasticdump can export data at scale.
EPSSN/A. This is not tied to a single CVE, so there is no authoritative EPSS entry.
KEV statusNot KEV-listed. There is no CVE-backed KEV entry for this exposure condition, but that does not mean low operational risk.
Vendor severity / CVSSTenable: MEDIUM. No CVSS vector or score is published on the plugin page, which is part of why the default label undersells the breach potential.
Affected versionsAny self-managed Elasticsearch deployment that is reachable and does not enforce authentication. Practically, older fleets are riskier: pre-8.0 did not auto-enable security, and pre-6.8.0 / 7.1.0 lacked free core security features in the default distribution.
Fixed version / backportsNo single fixed build. This is primarily a configuration exposure. Elastic made core security free in 6.8.0 and 7.1.0, and enables security automatically on first start in 8.0+.
Scanning / exposure realityBroad exposure history. Shodan's own guidance says searching for the Elasticsearch service by port yields nearly a million results, and Shadowserver classifies open Elasticsearch exposure as HIGH severity.
Disclosure / publicationTenable lists the vulnerability publication date as 2017-06-01 and published plugin 101025 on 2017-06-23.
Reporting / research contextDetection is documented by Tenable; broader exposure and abuse patterns are documented by Elastic, Shadowserver, Censys, and CERT-EU.
04 · The Call

noisgate verdict.

Final Verdict
UPGRADED to HIGH (8.1/10)

The deciding factor is exploit simplicity after reachability: if an attacker can hit the HTTP API, this often collapses straight into data exposure with no exploit development, no credentials, and sometimes no special tooling beyond curl. I did not push this to CRITICAL because the main prerequisite—network reachability to Elasticsearch—removes a large fraction of real enterprise deployments from direct attack, especially where clusters are private or fronted by controls.

HIGH Impact if the service is reachable without authentication
HIGH Historical exploitation interest in exposed Elasticsearch
MEDIUM Population-wide prevalence inside a typical enterprise fleet

Why this verdict

  • Upgrade from MEDIUM: once reachable, the attacker often needs nothing more than unauthenticated HTTP requests to enumerate and read data
  • Real-world amplifier: Elasticsearch frequently contains logs, telemetry, PII, tokens, internal hostnames, and other high-value material that accelerates lateral movement
  • Internet-exposed population is non-trivial: Shadowserver actively reports open Elasticsearch and Shodan has historically shown enormous exposure volume
  • Exploit chain is short: no memory corruption, gadget chain, or auth bypass research is needed; this is direct API abuse
  • Active abuse history matters: exposed Elasticsearch has been hit by automated wipe and extortion campaigns, so this is not a theoretical red-team-only condition
  • Downward pressure applied: the attacker still needs network position to the API, which means private VPC placement, VPN gating, and firewalling materially reduce exposure

Why not higher?

This is not a universal unauthenticated internet RCE. The attacker needs a route to the Elasticsearch HTTP interface, and well-run enterprises usually keep clusters off the public internet or behind access controls. Also, some exposed nodes leak metadata more readily than full document contents, so the blast radius is deployment-dependent.

Why not lower?

Scoring this as MEDIUM treats it like a mild informational leak, which is not how these incidents play out. On a reachable cluster, the path from detection to bulk data theft is short, cheap, and historically abused at scale.

05 · Compensating Control

What to do — in priority order.

  1. Block direct access to the HTTP API — Put Elasticsearch behind private networking, security groups, or an allowlist-only reverse proxy and remove broad reachability to port 9200. Because there is active exploitation history against exposed Elasticsearch, do this immediately, within hours, not on the normal HIGH timeline.
  2. Enforce authentication — Enable xpack.security and require authenticated access for all API calls unless a narrowly defined anonymous profile is absolutely required. Treat this as the primary compensating control and deploy immediately, within hours.
  3. Require TLS and authenticated proxies — Terminate only through a controlled proxy or load balancer that enforces auth, source restrictions, and logging before traffic reaches Elasticsearch. Deploy within hours as a fast containment layer if native security cannot be turned on the same day.
  4. Audit for data exposure and destructive APIs — Review HTTP/API logs for unauthenticated /_cat/*, _search, scroll, snapshot, and DELETE activity, and alert on unknown source IPs. Start the hunt immediately because prior exposure may already have resulted in silent reads.
  5. Snapshot and harden backups — Create verified snapshots and ensure backup storage is separately protected so a wipe or ransom event does not become an outage crisis. For a HIGH verdict this should be completed within 30 days, but exposure containment still comes first within hours.
What doesn't work
  • A WAF alone does not solve this if Elasticsearch is directly exposed or reachable on alternate paths; the API is legitimate HTTP and easy to abuse.
  • Host EDR alone won't stop data reads through valid REST endpoints; this is an application exposure problem, not a malware signature problem.
  • Relying on obscurity or non-default ports fails because scanners fingerprint the service, not just 9200.
  • Only patching the OS or Java runtime does nothing here if authentication remains off and the API is still reachable.
06 · Verification

Crowdsourced verification payload.

Run this on an auditor workstation or scanner host that has the same network path an attacker would have; that matters more than local shell access. Invoke it as bash check_es_open.sh http://es-node.example.com:9200 or against https:// if applicable. No root is required; the script performs only unauthenticated read-only HTTP checks and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_es_open.sh
# Read-only exposure check for unauthenticated Elasticsearch access.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN, 3=USAGE

set -u

TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
  echo "Usage: $0 <http[s]://host:port>"
  exit 3
fi

CURL_OPTS=(--silent --show-error --location --max-time 10 --connect-timeout 5)
TMP_BODY="$(mktemp)"
trap 'rm -f "$TMP_BODY"' EXIT

request() {
  local url="$1"
  local code
  code=$(curl "${CURL_OPTS[@]}" -o "$TMP_BODY" -w '%{http_code}' "$url" 2>/dev/null) || return 99
  echo "$code"
  return 0
}

looks_like_es_root() {
  grep -Eq 'cluster_name|cluster_uuid|version|tagline' "$TMP_BODY"
}

# 1) Root endpoint: tells us whether the API is exposed and if auth is enforced.
code=$(request "$TARGET/")
rc=$?
if [[ $rc -ne 0 ]]; then
  echo "UNKNOWN - could not connect to $TARGET/"
  exit 2
fi

if [[ "$code" == "401" || "$code" == "403" ]]; then
  echo "PATCHED - root endpoint requires authentication or is blocked ($code)"
  exit 0
fi

if [[ "$code" == "200" ]] && looks_like_es_root; then
  # 2) Try a common read endpoint to confirm unauthenticated data/metadata access.
  code2=$(request "$TARGET/_cat/indices?format=json")
  rc2=$?
  if [[ $rc2 -eq 0 && "$code2" == "200" ]]; then
    echo "VULNERABLE - unauthenticated Elasticsearch API access confirmed; _cat/indices returned 200"
    exit 1
  fi

  code3=$(request "$TARGET/_cluster/health")
  rc3=$?
  if [[ $rc3 -eq 0 && "$code3" == "200" ]]; then
    echo "VULNERABLE - unauthenticated cluster metadata access confirmed; _cluster/health returned 200"
    exit 1
  fi

  # Root exposed but deeper reads blocked: still an exposure condition, but impact may be reduced.
  echo "VULNERABLE - Elasticsearch root endpoint is accessible without authentication; deeper read endpoints were not confirmed"
  exit 1
fi

if [[ "$code" == "301" || "$code" == "302" || "$code" == "307" || "$code" == "308" ]]; then
  echo "UNKNOWN - request redirected; retest the final URL or proxy target"
  exit 2
fi

if [[ "$code" == "000" ]]; then
  echo "UNKNOWN - no HTTP response received"
  exit 2
fi

echo "UNKNOWN - unexpected response code $code from $TARGET/"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, treat every hit on this finding as exposure triage, not routine vuln cleanup. Because exposed Elasticsearch has a real history of automated abuse, patch / mitigate immediately, within hours by removing broad network reachability and enforcing authentication; that is the override to the normal noisgate mitigation SLA for a HIGH. There is no single vendor patch for the condition, so your durable fix is configuration hardening and, where practical, moving to versions and deployment patterns with secure defaults; complete that within the noisgate remediation SLA for HIGH, ≤ 180 days.

Sources

  1. Tenable Plugin 101025
  2. Elastic Docs - Minimal security setup
  3. Elastic Docs - Networking settings
  4. Elastic Blog - Security for Elasticsearch is now free
  5. Elastic Docs - Automatic security setup
  6. Shadowserver - Open Elasticsearch Report
  7. Censys - How to Make Sure Your Elasticsearch Databases Aren’t Exposed
  8. CERT-EU Threat Memo - Attacks on Elasticsearch databases
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.