CVE-2026-49089
Executive Summary
CVE-2026-49089 is a denial-of-service (DoS) vulnerability in Kibana, Elastic's web-based data visualization and exploration interface. The flaw resides in the connector reporting operation, where a query expression is processed without any size limit, allowing an authenticated user with read-only privileges to send a single oversized request that consumes unbounded CPU resources and renders Kibana unusable until the process is restarted. The vulnerability has been assigned a CVSS score of 6.5 (High availability impact), affects the entire Kibana deployment (confidentiality and integrity are unaffected), and as of this writing there is no vendor patch available, no public exploit code, and no known exploitation in the wild.
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 root cause of CVE-2026-49089 is rooted in CWE-770 — Allocation of Resources Without Limits or Throttling. In the context of Kibana, a connector reporting operation accepts a query expression as part of its input. The vulnerability is that this expression is evaluated without any constraint on its length, complexity, or nesting depth. The NVD description states that "an oversized expression caused the Kibana process to spend an unbounded amount of time evaluating it."
Vulnerability Mechanism: The flaw exploits Kibana's expression evaluation engine. When a user submits a reporting request (e.g., generating a report from a data view), the request carries a query expression in a structured format (likely a JSON-based expression tree used by Kibana's expression language). The backend processor takes this expression and runs it through an evaluation pipeline. If the expression is sufficiently large — whether due to deep nesting, a high number of operands, or an extremely large literal value — the evaluation engine enters a high-complexity path that takes an unbounded amount of CPU time to complete. Because the operation is synchronous (the request handler blocks until evaluation finishes), the Kibana Node.js process's event loop becomes saturated. This has a "single request" cascading effect: once the event loop is blocked, Kibana cannot process any subsequent requests, including those from legitimate users. The only recovery is a full process restart.
Attack Surface:
- Authentication Required: The attacker must be an authenticated Kibana user with at least read-only privileges.
- Network Vector: The attack is delivered over HTTP/HTTPS to the Kibana web interface.
- No User Interaction: The attack does not require any interaction from a victim user.
- No Privilege Escalation: The vulnerability does not grant additional privileges — it is a pure availability attack.
Attack Complexity: The CVSS vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) indicates the attack is simple to execute (no special conditions required), requires only low-level privileges, and causes a high availability impact.
Code-Level Considerations: The NVD description does not disclose specific function names, code paths, or internal API names within Kibana. It is known, however, that Kibana's reporting feature uses a server-side script/expression system to collect and format data for reports. The vulnerable input point is the query expression field accepted by a reporting connector. "Connector" in Elastic terminology typically refers to integrations with third-party data sources (e.g., databases, document stores) that Kibana can query. In this case, the reporting connector accepts a query expression from the authenticated user and evaluates it server-side.
Why It Escapes Standard Throttling:
Standard request-rate-limiting or body-size limitations (e.g., server.maxPayloadBytes) may not apply because the expression is passed as a structured payload rather than a raw string, and because the evaluation cost is not linear with payload size. A small compressed payload with deep nesting can cause exponential evaluation time.
Exploitation Scenarios
Attack Chain (Inferred from Vulnerability Class — CWE-770):
Step 1 — Reconnaissance/Target Identification: The attacker first identifies a publicly accessible Kibana instance. This can be accomplished via Shodan or Censys searches for open Kibana ports (default TCP 5601) or via specific HTTP banners that Kibana exposes (e.g., the login page title "Kibana"). The attacker also needs to identify or guess an account with read-only privileges. If the Kibana instance uses default credentials or weak password policies, compromising a low-privileged account is feasible.
Step 2 — Authentication and Feature Discovery: The attacker logs in with a read-only account. They then navigate to the reporting section of the Kibana UI (e.g., "Reporting" → "Generate Report" or the reporting API endpoints). The attacker must identify the "connector" reporting operation that accepts a custom query expression. This could be a report generation for a search or a visualization that includes user-supplied query parameters.
Step 3 — Constructing the Oversized Expression:
The attacker crafts an extremely large query expression. The exact format depends on Kibana's expression language. In Elastic's ecosystem, Kibana uses the "exp" expression language (part of the @kbn/expressions package). The expression is typically a JSON object tree. The attacker can maximize evaluation time by building a deeply nested chain of functions (e.g., nested arithmetic or string manipulation operations) or by including a very large payload in a single expression node. Since there is no size limit check, the attacker simply grows the expression until evaluation time exceeds acceptable thresholds.
Step 4 — Sending the Single DoS Request: The attacker submits the expression via the reporting API (e.g., a POST request to a report generation endpoint). Because the evaluation is synchronous, the Kibana process stalls. The event loop is blocked, and Kibana cannot serve any other requests — all dashboards, visualizations, API calls, and even the login page become unresponsive. Administrative users cannot stop the process via the UI; the only remediation is to kill and restart the Kibana process (or the container/pod running it).
Step 5 — Post-Exploitation Impact: No data is exfiltrated (confidentiality is not impacted), and no data is modified (integrity is not impacted). The business impact is purely availability — the entire Kibana deployment is offline for all users until a manual process restart occurs. In a containerized environment, orchestrators may automatically restart the pod, but if the expression re-evaluates on startup with a cached job, the DoS can recur.
Additional Scenario — Persistent DoS: If the reporting operation persists the oversized expression (e.g., in a saved report object), the DoS might resume every time the report is scheduled to run, forcing an administrator to delete the report from a backend database (e.g., Elasticsearch) to break the loop.
Public Exploit Status: No public proof-of-concept, exploit code, or Nuclei template has been identified. The attack chain above is inferred from the vulnerability class (CWE-770, CAPEC-130) and Kibana's known reporting architecture. It is plausible that a skilled security researcher could craft a working exploit using Kibana's documented expression API, but no such tool is publicly available at the time of writing.
Impact Assessment
CVSS-Based Impact:
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Base Score: 6.5 (Medium severity)
- Availability Impact (A:H): The vulnerability completely disrupts service availability. A single request renders Kibana unusable until process restart.
- Confidentiality (C:N) and Integrity (I:N): These are unaffected.
Business Impact: Kibana is the primary visualization and exploration interface for Elasticsearch data. Organizations use it for:
- Operational dashboards (system monitoring, security operations, SOC analysis)
- Business intelligence and reporting
- Log analysis and debugging
- Scheduled report distribution to stakeholders
A successful exploitation of CVE-2026-49089 results in:
- Loss of visibility for security operations (if Kibana is used in a SIEM/SOC context)
- Inability to perform data analysis or interactive searches
- Loss of automated scheduled reporting (if reports are critical for compliance or billing)
- Operational overhead from incident response and process restart
Affected Systems and Blast Radius:
- Directly affected: Kibana node(s) processing the malicious request — typically the primary Kibana instance or all nodes in an HA cluster (if they share the same load balancer and the request can be distributed).
- Indirectly affected: Any Elasticsearch cluster that Kibana fronts (read load stops), downstream consumers of generated reports, and any microservices that depend on Kibana's API.
- Scope (S:U): The impact is confined to the Kibana process; Elasticsearch itself remains functional (as it processes only the queries that were already dispatched).
Attack Recurrence: If the report is scheduled or cached, the DoS may recur after restart — requiring deletion of the malicious report object from Elasticsearch backend.
Credential Requirement: The attack requires an authenticated account with only read-only privileges. In many organizations, read-only accounts are shared across teams, or default demo accounts are left enabled. This lowers the barrier to entry and expands the pool of potential attackers beyond highly privileged insiders.
Exploit Potential: As of the report date, there are no known exploitation attempts in the wild, no PoC, and no inclusion in CISA's Known Exploited Vulnerabilities (KEV) catalog. However, the simplicity of the attack (one HTTP request, no complex payload) and the fact that the vulnerability is unpatched makes it an attractive target for threat actors. The "single request" nature means it is highly weaponizable for a quick, low-effort DoS campaign.
Detection Guidance
The following rules are designed to detect attempts to exploit CVE-2026-49089. Since no public exploit exists, these rules focus on the anomaly patterns that a successful attack must generate: oversized query payloads to reporting endpoints, unusually high CPU consumption per session, or long-running request durations.
Sigma Rule
title: Kibana Connector Reporting Oversized Expression - DoS Attempt
id: 7f3c9a1e-4b2a-4d6e-8f1c-5a6b7c8d9e0f
status: experimental
description: Detects requests to Kibana reporting endpoints with abnormally large query expressions, potentially exploiting CWE-770 (Allocation of Resources Without Limits).
author: Valters IT Threat Intelligence Team
date: 2026/01/15
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-49089
logsource:
category: web
product: kibana
detection:
selection_method:
cs-method: POST
selection_path:
cs-uri-path|contains:
- '/api/reporting'
- '/internal/reporting'
selection_content_length:
cs-body-bytes|gte: 1048576 # 1 MB - base threshold for oversized expressions
selection_response_time:
# Flag requests with an unusually long processing time (suggestive of unbounded evaluation)
cs-request-duration|gte: 30000 # 30 seconds
condition: selection_method and selection_path and (selection_content_length or selection_response_time)
level: high
falsepositives:
- Legitimate bulk report generation with large datasets (rare, but possible)
- Organizations that routinely send multi-MB payloads to reporting endpoints
fields:
- clientip
- cs-uri-path
- cs-body-bytes
- cs-request-duration
tags:
- attack.t1499
- attack.t1499.004
- cve.2026-49089
- cwe.770
- capcec.130
YARA Rule
rule Kibana_Connector_Oversized_Expression {
meta:
author = "Valters IT Threat Intelligence"
description = "Detects Kibana reporting request payloads containing nested expression structures that could trigger CPU exhaustion (CVE-2026-49089, CWE-770)"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-49089"
date = "2026-01-15"
severity = "high"
tags = "CVE-2026-49089"
strings:
// Known Kibana expression language function names (from public Kibana documentation)
$exp_func1 = "kibana" ascii nocase
$exp_func2 = "vis" ascii nocase
$exp_func3 = "esaggs" ascii nocase
$exp_func4 = "agg" ascii nocase
$exp_func5 = "query" ascii nocase
$exp_func6 = "filter" ascii nocase
// Patterns indicating deep nesting (brace/array nesting beyond normal limits)
$deep_nest1 = /(\{){20,}/ ascii // 20+ consecutive opening braces
$deep_nest2 = /(\[){20,}/ ascii // 20+ consecutive opening brackets
// Patterns for nested object chains in JSON
$obj_chain = /"key"\s*:\s*\{/ ascii
condition:
(uint32(0) == 0x5B7B7B7B or uint32(0) == 0x7B7B7B7B) or
(
filesize > 500KB and
3 of ($exp_func*) and
(1 of ($deep_nest*) or #obj_chain > 30)
)
}
Note: The first condition in the YARA rule is intentionally improbable (checking file header for opening braces) to avoid false positives on legitimate HTTP bodies. The primary detection relies on file size + expression indicators.
Suricata IDS Rule
alert http any any -> any any (msg:"ET EXPLOIT Kibana Connector Reporting Oversized Expression - Potential DoS (CVE-2026-49089)"; flow:to_server,established; content:"POST"; http_method; content:"/api/reporting/"; http_uri; content:"/internal/reporting/"; http_uri; content:"Content-Length"; http_header; content:!"Content-Length: [0-9]{1,5}"; pcre:!/Content-Length:\s+[0-9]{1,5}\r\n/H; threshold:type limit, track by_src, count 2, seconds 60; classtype:attempted-dos; sid:2026089089; rev:1; metadata:created_at 2026_01_15, updated_at 2026_01_15, cve CVE-2026-49089;)
Explanation: This rule alerts on HTTP POST requests to Kibana reporting API endpoints where the Content-Length header indicates a payload larger than 99999 bytes (i.e., the regex fails to match a 1-5 digit length). The threshold condition limits alerts to 2 per source IP per 60 seconds to reduce noise.
Elastic Detection
// EQL Rule to detect potential CVE-2026-49089 exploitation attempts
// Target: Kibana server logs (audit or access logs)
sequence by source.ip with maxspan=5m
[ network where event.type == "connection" and destination.port == 5601 and network.protocol == "http" ]
[ http where event.type == "request" and
http.request.method == "POST" and
(url.path contains "/api/reporting/" or url.path contains "/internal/reporting/") and
http.request.body.bytes > 1048576 // 1 MB
]
[ process where event.type == "end" and
process.name == "node" and
process.args contains "kibana" and
process.parent.args contains "kibana"
]
This EQL rule looks for a sequence: a network connection to the Kibana port, followed by an oversized HTTP POST to a reporting endpoint, followed by a Kibana node process termination (which suggests the process crashed or was restarted due to the DoS). Reduce the http.request.body.bytes threshold if your baseline traffic is smaller.
Splunk SPL Query
sourcetype=access_combined OR sourcetype=o365:management:api
| where like(uri_path, "%/api/reporting/%") OR like(uri_path, "%/internal/reporting/%")
| where method = "POST"
| eval bytes_threshold = 1048576
| where bytes > bytes_threshold
| table _time, clientip, uri_path, bytes, status, response_time
| sort - _time
| eventstats avg(response_time) as avg_rt, max(response_time) as max_rt by clientip
| where max_rt > 30000 OR bytes > 52428800
| eval severity = case(
bytes > 52428800 OR max_rt > 120000, "CRITICAL",
bytes > 20971520 OR max_rt > 60000, "HIGH",
bytes > 1048576 OR max_rt > 30000, "MEDIUM",
"LOW")
| table _time, clientip, uri_path, bytes, status, method, response_time, severity
This query identifies HTTP POST requests to Kibana reporting endpoints with payload sizes exceeding 1 MB, and flags those that also have unusually long response times (>30 seconds). It further categorizes severity based on the size/duration magnitude.
Wazuh OSSEC Rule
<group name="kibana, dos, cve-2026-49089,">
<!-- Rule to detect Kibana reporting API requests with oversized payloads -->
<rule id="342719" level="10">
<decoded_as>json</decoded_as>
<field name="url" type="pcre2">/api/reporting/|/internal/reporting/</field>
<field name="http_method" type="pcre2">^POST$</field>
<field name="size" type="pcre2">^[1-9][0-9]{6,}$</field>
<description>Kibana reporting endpoint received a request with an abnormally large payload (potential CVE-2026-49089 DoS attempt)</description>
<group>access_control,attack,kibana,</group>
<mitre>
<id>T1499</id>
</mitre>
<options>no_full_log</options>
</rule>
<!-- Rule to detect a Kibana process restart shortly after the oversized request -->
<rule id="342720" level="12">
<if_sid>1000890</if_sid>
<field name="event_type" type="pcre2">process_terminated|process_started</field>
<description>Kibana process termination/restart observed after oversized reporting request — likely successful DoS exploitation (CVE-2026-49089)</description>
<group>dos,impact,</group>
<mitre>
<id>T1499</id>
</mitre>
<options>no_full_log</options>
</rule>
</group>
The first rule fires when a POST to a Kibana reporting endpoint contains a payload size of 1,000,000 bytes or more (regex ^[1-9][0-9]{6,}$). The second rule is a chained rule that elevates severity if a Kibana process termination or startup event is observed shortly after the triggering event.
Mitigation & Patch Guidance
Patch Status
Confidence: 0/4 — UNPATCHED — No patch evidence identified from any tracked source.
The vulnerability remains open at the time of this report. Elastic has not released a fixed version, and no vendor advisory is available. The Affected Versions list is empty, meaning the exact version range is unknown, but it is plausible that all currently supported Kibana versions are affected.
1. Immediate Mitigations (No Patch Available)
| Mitigation | Description | Effectiveness | Operational Impact |
|---|---|---|---|
| Restrict Reporting API Access | Disable or restrict access to reporting connector endpoints via Kibana role-based access control (RBAC). Only grant reporting permissions to trusted, high-privileged users. | High — removes the attack surface entirely. | Acceptable for most organizations; reporting becomes limited. |
| Disable Connector Features | If reporting connectors (e.g., to external data sources) are not business-critical, disable them entirely via Kibana configuration. | High | May break report generation workflows. |
| Network-Level Filtering | Use a WAF or reverse proxy to block POST requests to /api/reporting/ or /internal/reporting/ with a Content-Length exceeding a configured threshold (e.g., 500 KB). |
Medium — force-limits payload size. | Minimal; legitimate reports rarely exceed this size. |
| Resource Limits (Container Deployments) | If Kibana runs in Kubernetes, configure CPU limits and memory limits on the Kibana pod. This does not prevent the CPU sink, but reduces blast radius if the pod is forcibly restarted. |
Low-Medium — CPU limits trigger OOMKill but the node still stalls until the limit is enforced. | Slight availability degradation; auto-restart handles recovery. |
| Rate Limiting | Apply per-user rate limiting on Kibana's reporting endpoints (e.g., 1 request per minute). This prevents multiple rapid attempts but does NOT stop a single oversized request. | Low — the described attack is a single request. | Acceptable. |
| Authentication Hardening | Immediately audit read-only accounts. Disable default accounts (e.g., elastic, kibana) and enforce strong passwords. Rotate credentials for any compromised account. |
Medium — reduces attacker pool. | None. |
2. Patch/Upgrade Steps
Since no patch exists:
- Monitor Elastic Security Advisories — Subscribe to Elastic's security advisory mailing list (https://www.elastic.co/security/advisories). Await a CVE advisory that assigns an affected version range and a fixed version.
- Plan for Emergency Upgrade — When a patch is released, prioritize upgrading Kibana. Typically, Elastic releases patches that are backward-compatible within the same major version. Budget for a rapid testing cycle.
- Apply Interim Security Vulnerability Hotfixes — If Elastic releases a hotfix branch (e.g.,
7.17.x) rather than a full version, apply it in a staging environment first. - Check Elastic Cloud — If Kibana is hosted on Elastic Cloud, monitor for automatic updates from the provider; Elastic Cloud often patches faster than on-premises deployments.
3. Long-Term Hardening
- Least Privilege Enforcement: Review all Kibana role definitions. Ensure read-only users cannot access the reporting feature or any "connector" plugin. Use Elastic's built-in
kibana_adminor custom roles with explicit deny clauses for reporting. - Input Validation: If the reporting connector accepts arbitrary expressions, implement a whitelist of allowed expression functions and a size limit on expression depth. This may require code-level changes or a custom plugin.
- Kibana Configuration: Set a strict payload size limit in
kibana.yml(e.g.,server.maxPayloadBytes: 262144). This limits HTTP request bodies but does not affect expression complexity — still valuable. - Orchestration-Level Protection: Deploy Kibana behind a reverse proxy that enforces deep packet inspection (regExp filters) on the JSON body of reporting requests. Block any JSON node with a string length exceeding a threshold (e.g., 10,000 characters per string value).
- Monitoring and Alerting Baseline: Establish a baseline of normal reporting request sizes, durations, and per-user request counts. Alert on anomalies — a 10x deviation in response time or a 100x deviation in payload size is a strong indicator.
- Kibana Process Watchdog: Implement a process supervisor (systemd, supervisord) that automatically restarts Kibana on high CPU usage or on HTTP 500 responses. This reduces MTTR from hours to minutes.
References
- NVD Entry for CVE-2026-49089 – https://nvd.nist.gov/vuln/detail/CVE-2026-49089
- Official NVD record with CWE-770 classification, CVSS vector, and the NVD description used in this report.
- Elastic Security Advisories – https://www.elastic.co/security/advisories
- Monitor this page for a future advisory that will specify affected versions and patch releases.
- CAPEC-130: Excessive Allocation – https://capec.mitre.org/data/definitions/130.html
- MITRE CAPEC classification that corresponds to this vulnerability.
- MITRE ATT&CK T1499: Endpoint Denial of Service – https://attack.mitre.org/techniques/T1499/
- Technique mapping used in detection guidance.
- Elastic Kibana Reporting Documentation – https://www.elastic.co/guide/en/kibana/current/reporting.html
- Public documentation for Kibana reporting features; referenced to understand attack surface.
- CISA KEV Catalog – https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- CVE-2026-49089 is NOT listed in the KEV — no known exploitation in the wild.
Report Version: 1.0 | Date: 2026-01-15 | Classification: TLP:CLEAR | Author: Valters IT Threat Intelligence Team
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.