CVE-2026-103006
Executive Summary
CVE-2026-103006 is an uncontrolled recursion (CWE-674) vulnerability in the Elasticsearch search API aggregation feature. An authenticated user with read access to a single index can submit a request containing deeply nested aggregation definitions, causing unbounded recursive execution that exhausts server resources and terminates the affected node. The node does not self-recover and requires manual operator intervention, making this a high-availability risk for any organization running an exposed or multi-tenant Elasticsearch cluster.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the search API's aggregation processing logic. Elasticsearch aggregations support nested structures — sub-aggregations may be defined within parent aggregations, forming a tree that is parsed and executed recursively. The NVD description states that the search aggregation processing path contains an "uncontrolled recursion weakness" that permits "unbounded recursive execution." Because there is no effective depth or recursion guard on the aggregation nesting consumed during request processing, a request enumerating aggregation levels beyond the intended limit drives the parser/evaluator deeper with each nesting tier.
Key characteristics derivable from the source data:
- Vulnerability class: Uncontrolled Recursion (CWE-674). The recursion terminates only when the stack or thread resources are exhausted, not by an explicit boundary check.
- Attack vector: Network (AV:N), via the aggregation feature of the search API.
- Authentication requirement: The attacker must be authenticated and hold read access to at least one index (PR:L). This is a low but non-trivial privilege — any user with a valid credential scoped to a single readable index qualifies.
- Complexity: Low (AC:L). No race condition, no memory-layout grooming, no special conditions described.
- Impact: Availability only (C:N/I:N/A:H). The affected node terminates and — critically — "does not recover automatically and requires manual intervention to restore service."
The precise code-level mechanism (the specific class, method, or recursion depth threshold) is not disclosed in the NVD description or CNA title. No function names, file paths, or internal identifiers are provided, and none are asserted here. What can be stated with confidence is the class of defect: a recursive traversal over user-supplied nested aggregation definitions without a ceiling on recursion depth, leading to resource exhaustion (e.g., stack or heap exhaustion) and process termination rather than controlled error handling.
Elasticsearch runs on the JVM. An uncaught stack overflow or heap exhaustion within an aggregation evaluation thread is the plausible mechanism by which "the server process's available resources" are exhausted and the node terminates. The precise failure mode (StackOverflowError propagation, OOM, or hard process exit) is not specified in the available data.
Exploitation Scenarios
The following attack chain is inferred strictly from the vulnerability class and the NVD description. No public PoC, exploit code, or Nuclei template exists for this CVE. All steps below are described at the vulnerability-class level; no specific function names, endpoints, or payload parameters are invented.
1) Reconnaissance / target identification
The attacker identifies an Elasticsearch cluster reachable over the network (default REST interface commonly exposed on port 9200). Exposure can be discovered via service fingerprinting (product:"Elasticsearch", http.title:"Elasticsearch"). The attacker then needs valid credentials with read access to at least one index — obtainable through credential reuse, leaked keys, a low-privileged service account, or a separate access-control weakness. Note: because PR:L is required, this is not an unauthenticated remote DoS; the barrier is credential possession, not exploit skill.
2) Triggering the flaw class Once authenticated with read access to a single index, the attacker issues a search request that invokes the aggregation feature, constructing aggregation definitions that nest deeper and deeper — each level containing another aggregation beneath it. The recursion depth of the request is the attacker-controlled input. Because the aggregation processing path lacks an effective depth bound on such nesting, the server recurses proportionally to the supplied nesting depth.
3) Payload / execution method (class-level) The payload is a deeply nested aggregation definition embedded in a search API request. The attacker need not exploit memory corruption or inject code; the malformed-but-valid request itself is the weapon. The attacker simply increases nesting depth until the processing path exhausts the node's available resources. This is a classic resource-exhaustion DoS achieved through legitimate API surface abuse.
4) Post-exploitation impact Per the NVD description, resource exhaustion causes the affected node to terminate. The node does not recover automatically and requires manual intervention. In a multi-node cluster this may trigger shard reallocation and cascading load on remaining nodes; in a single-node deployment it is a full outage. Because one low-privileged authenticated user can reach this path, any tenant or service account with read access to one index becomes a potential denial-of-service actor against the whole node.
Impact Assessment
The CVSS 3.1 base score is 6.5 (Medium), vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H. Subscore interpretation:
- AV:N (Network): Exploitable remotely across a network.
- AC:L (Low): No special conditions or timing required.
- PR:L (Low): Requires only authenticated read access to a single index.
- UI:N (None): No user interaction needed.
- S:U (Unchanged): Impact confined to the vulnerable component.
- C:N / I:N: No confidentiality or integrity impact.
- A:H (High): The node terminates and needs manual recovery — a complete availability loss for that node.
Business impact: Denial of service against Elasticsearch nodes — which frequently back search, logging/observability, and analytics platforms — causes outages of dependent applications. The "no automatic recovery / manual intervention required" property amplifies operational cost: on-call teams must detect and manually restart the node. In shared or multi-tenant clusters, a single low-privilege user degrades or takes down service for all tenants. In single-node deployments, the entire service is lost. Cascading effects are possible if health checks or monitoring trigger further reallocation/retry storms.
Blast radius: At minimum, one node per successful trigger. In clusters using automatic shard reallocation, remaining nodes absorb load and may become unstable. Recovery requires manual operator action — extended downtime.
Detection Guidance
Sigma Rule
title: Potential Elasticsearch Aggregation Recursion DoS (CVE-2026-103006)
id: 8f3c1b2a-4d5e-4f6a-9b7c-1a2b3c4d5e6f
status: experimental
description: Detects search API aggregation requests with abnormally deep nesting that may indicate CWE-674 exploitation.
author: valtersit.com
date: 2026-01-01
logsource:
product: elasticsearch
service: audit
detection:
selection_endpoint:
event.action: 'uri_request'
url.path|contains: '/_search'
selection_aggregation:
request.body|contains: '"aggs"'
filter_deep:
request.body|re: '("aggs"\s*:\s*\{[\s\S]*?){20,}'
condition: selection_endpoint and selection_aggregation and filter_deep
falsepositives:
- Legitimate analytics workloads with very deep nesting (uncommon)
level: high
tags:
- attack.t1499
- cve.2026-103006
YARA Rule
rule CVE_2026_103006_Elasticsearch_Nested_Aggs
{
meta:
description = "Detects deeply nested aggregation definitions in request bodies targeting Elasticsearch search API (CWE-674)"
author = "valtersit.com"
date = "2026-01-01"
cve = "CVE-2026-103006"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-103006"
strings:
$agg1 = "\"aggs\""
$agg2 = "\"aggregations\""
$nested = "aggs"
condition:
(($agg1 or $agg2) and filesize < 5MB)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-103006 Elasticsearch Deeply Nested Aggregation Recursion DoS Attempt"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"_search"; http.request_body; content:"\"aggs\""; pcre:"/(\"aggs\"\s*:\s*\{.*){\s*10,}/sRi"; threshold:type both, track by_src, count 1, seconds 60; classtype:attempted-dos; sid:9001030; rev:1; metadata:cve CVE-2026-103006;)
Elastic Detection
sequence by user.name with maxspan=30s
[ network where network.protocol == "http" and
http.request.method == "POST" and
url.path : "*_search" and
http.request.body.text : "*\"aggs\"*" ]
[ log where event.category == "process" and
message : "*OutOfMemory*" or message : "*StackOverflowError*" ]
Splunk SPL Query
index=elasticsearch sourcetype=elasticsearch:audit OR sourcetype=elasticsearch:server
| search uri_path="*/_search*" OR event.action="uri_request"
| rex field=request_body "(?<agg_count>\"aggs\")"
| eval nesting_depth = mvcount(split(request_body, "\"aggs\""))
| where nesting_depth > 5
| stats count min(_time) as first_seen max(_time) as last_seen by user, src_ip, uri_path
| where count >= 1
| table first_seen, last_seen, user, src_ip, uri_path, nesting_depth, count
Wazuh OSSEC Rule
<group name="elasticsearch,web,attack,">
<rule id="100301" level="12">
<decoded_as>json</decoded_as>
<field name="url.path">\/_search</field>
<field name="http.request.method">POST</field>
<regex field="http.request.body.text">"aggs"\s*:\s*\{.*"aggs"\s*:\s*\{.*"aggs"\s*:\s*\{.*"aggs"\s*:\s*\{.*"aggs"</regex>
<description>CVE-2026-103006: Deeply nested aggregation request to Elasticsearch search API (possible CWE-674 recursion DoS)</description>
<mitre>
<id>T1499</id>
</mitre>
</rule>
<rule id="100302" level="14">
<if_sid>100301</if_sid>
<field name="event.outcome">failure</field>
<description>CVE-2026-103006: Nested aggregation request followed by node failure indicator</description>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 — UNPATCHED. No patch evidence exists from any tracked source; no vendor fix or affected version range is available.
1) Immediate mitigations
- Restrict network access to the Elasticsearch REST interface. Do not expose port 9200 publicly; bind to internal interfaces and front it with an authenticated proxy.
- Enforce least privilege on Elasticsearch role mappings: minimize which users/roles hold read access to any index, since PR:L (read on a single index) is sufficient to trigger the flaw.
- Apply upstream ingress controls (reverse proxy, API gateway, WAF) that reject or rate-limit search requests whose aggregation nesting depth exceeds an operational threshold. Because the exact limit is undocumented, choose conservative caps and monitor for false positives.
- Enable audit logging and alerting on deep-nesting search requests and on node termination / OOM indicators.
- Configure restart-on-failure supervision for Elasticsearch processes so operators are notified immediately when a node terminates unexpectedly.
2) Patch / upgrade steps
- No patch is currently available. Monitor the vendor (Elastic) security advisories and the NVD entry for CVE-2026-103006 for a fixed release.
- When a patched version becomes available, schedule an upgrade and verify the affected version range published with the fix. Until then, treat all versions as potentially affected.
3) Long-term hardening
- Adopt a defense-in-depth posture for cluster availability: multi-node clusters with health monitoring, resource limits, and automated alerting on shard reallocation and node loss.
- Enforce strict authentication and authorization; audit service accounts that hold read access to indices.
- Add request-depth and complexity validation at the gateway layer as a durable control against recursion/resource-exhaustion classes (CWE-674, CWE-400).
- Maintain current Elasticsearch versions and subscribe to vendor security bulletins.
References
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-103006
- CWE-674: Uncontrolled Recursion — https://cwe.mitre.org/data/definitions/674.html
- MITRE ATT&CK T1499: Endpoint Denial of Service — https://attack.mitre.org/techniques/T1499/
- Elastic Security Advisories — https://www.elastic.co/community/security
- CISA KEV: Not applicable — CVE-2026-103006 is NOT listed in the CISA Known Exploited Vulnerabilities catalog.
No public proof-of-concept, exploit code, or Nuclei template was identified. No exploit-in-the-wild activity or associated threat actor campaign is documented for this CVE. EPSS has not yet assigned a score.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.