Skip to main content

LF Edge eKuiper CVE-2025-24979

MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-09-09 https://github.com/lf-edge/ekuiper GHSA-pqqc-8v73-9gg2
5.5
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
5.5 MEDIUM
AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:L/A:N
vuln.today AI
5.5 MEDIUM

Network-accessible management API requires high-privilege authentication (PR:H); SSRF leaks internal credentials (C:H) and may interact with writable internal APIs (I:L); no availability impact.

3.1 AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
Low
Availability
None

Lifecycle Timeline

3
Metadata Corrected
Sep 09, 2026 - 18:40 vuln.today
tag: Authentication Bypass removed
Source Code Evidence Fetched
Sep 09, 2026 - 18:36 vuln.today
Analysis Generated
Sep 09, 2026 - 18:36 vuln.today

DescriptionGitHub Advisory

Summary

Server-side request forgery (SSRF) vulnerability in eKuiper allows an attacker with permissions to register external services or create rules to induce the eKuiper server to make requests to unintended network locations, such as internal services, loopback interfaces (localhost), or cloud metadata endpoints.

Details

Prior to v2.4.0, eKuiper external service registrations and HTTP invocations did not validate destination IP addresses. An attacker with access to the eKuiper management API could register an external service pointing to an internal address (such as http://127.0.0.1:9081 or other internal network services) and trigger queries using service functions (e.g. SELECT tsschemaless(...) FROM demo). This allows probing internal networks, leaking sensitive information (such as internal endpoints/credentials), or interacting with internal APIs accessible to the eKuiper host.

PoC

  1. Create an external service with an address pointing to an internal network / localhost:
json
{
  "interfaces": {
    "tsschemaless": {
      "address": "http://127.0.0.1:9081",
      "protocol": "rest",
      "options": {
        "insecureSkipVerify": true,
        "headers": {
          "Accept-Charset": "utf-8"
        }
      },
      "schemaless": true
    }
  }
}
  1. Load it to eKuiper and create a rule invoking it, e.g.: SELECT tsschemaless("get", "/metadata/sources/yaml/mqtt", *) FROM demo.
  2. Run the rule. When data flows through the stream, the response from the internal service is retrieved and can be routed to an external sink or inspected.

Impact

Server-Side Request Forgery (SSRF) allowing unauthorized access / probing of internal network services.

Remediation & Patches

  • Upgrade to eKuiper >= 2.4.0: Starting with v2.4.0, SSRF protection (httpx.GetSSRFDialContext) is enabled by default across HTTP clients, blocking requests to private, loopback, link-local, multicast, and unspecified IP addresses.

Workarounds (for versions < 2.4.0)

If unable to upgrade immediately:

  1. Restrict Management API Access: Restrict access to the eKuiper REST API (port 9081) and CLI using network firewalls, reverse proxies, and authentication so only trusted administrators can create or update services and rules.
  2. Egress Network Filtering: Use firewall / iptables rules or container network isolation to block outbound requests from eKuiper to private subnets, loopback addresses, and cloud metadata endpoints (169.254.169.254).
  3. Audit Service Definitions: Regularly review registered external services (GET /services or bin/kuiper show services) to verify target hosts.

Notes for Users Upgrading to >= 2.4.0

  • In v2.4.0 and later, basic.enablePrivateNet in kuiper.yaml defaults to false (blocking private network access).
  • If a developer's deployment legitimately requires eKuiper to communicate with internal REST services or private networks, they can explicitly opt in by setting basic.enablePrivateNet: true (or via environment variable KUIPER__BASIC__ENABLEPRIVATENET=true). Ensure eKuiper's API is protected before enabling this setting.

Reported by Alexey Kosmachev, Bi.Zone

AnalysisAI

Server-Side Request Forgery in LF Edge eKuiper (all versions prior to 2.4.0) allows authenticated high-privilege users with management API access to register external service definitions targeting internal network addresses - including loopback (127.0.0.1), RFC1918 private subnets, and cloud metadata endpoints (169.254.169.254) - and trigger outbound requests to those addresses by executing SQL processing rules. Successful exploitation enables probing internal services, exfiltrating sensitive configuration data such as MQTT credentials exposed via eKuiper's own REST API, and interacting with internal APIs reachable from the eKuiper host. No public exploit or CISA KEV listing exists at time of analysis, but a detailed proof-of-concept is embedded in the GitHub security advisory GHSA-pqqc-8v73-9gg2.

Technical ContextAI

eKuiper is an LF Edge project providing an edge-native SQL stream processing engine used in IoT and industrial edge deployments. Its external service registration feature allows users to define REST endpoints callable as SQL user-defined functions (e.g., SELECT tsschemaless(...) FROM demo). Prior to v2.4.0, neither the service registration subsystem nor the HTTP invocation clients validated destination IP addresses against private, loopback, link-local, multicast, or unspecified address ranges - a textbook CWE-918 (SSRF) root cause. The fix in v2.4.0 introduces httpx.GetSSRFDialContext applied globally across all HTTP clients, blocking such address classes by default. A new configuration key basic.enablePrivateNet in kuiper.yaml (also settable via KUIPER__BASIC__ENABLEPRIVATENET=true) allows explicit opt-in for deployments that legitimately communicate with internal REST services. The affected package identifier is pkg:go/github.com_lf-edge_ekuiper_v2 for versions prior to 2.4.0.

RemediationAI

Upgrade to eKuiper >= 2.4.0, which enables SSRF protection via httpx.GetSSRFDialContext by default, blocking all outbound requests to private, loopback, link-local, multicast, and unspecified IP address ranges; see the release at https://github.com/lf-edge/ekuiper/releases/tag/v2.4.0. If immediate upgrade is not feasible, apply three compensating controls: first, restrict access to the eKuiper REST API (port 9081) and CLI using network firewalls, reverse proxies, or authentication middleware so only trusted administrators can register external services or create rules (this is the highest-impact workaround); second, apply egress iptables or container network policy rules on the eKuiper host blocking outbound connections to 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and ::1/128 (note: this may break legitimate internal connectivity); third, regularly audit registered external services via GET /services or bin/kuiper show services and alert on any registration targeting non-public IP addresses. After upgrading to v2.4.0, if the deployment legitimately requires eKuiper to reach internal REST services, enable basic.enablePrivateNet: true in kuiper.yaml only after ensuring the management API is protected.

Share

CVE-2025-24979 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy