/

CVE-2026-59970

Severity:

HIGH RISK

(7.7)

Server-Side Request Forgery (CWE-918) in Tandoor AI

CVE-2026-59970

Deferred

Vulnerability type

Category:

Server-Side Request Forgery

CWE:

CWE-918

Impact:

Internal Network Reconnaissance and Service Access

Severity:

HIGH RISK

(7.7)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Tandoor Recipes contains a server-side request forgery vulnerability in AI provider handling, where a configured provider URL can bypass outbound-request protections. An authenticated user who can configure an AI provider and invoke an AI action may cause the server to connect to internal services, other hosts, or cloud metadata endpoints and infer network reachability from the connection result.

Tandoor Recipes contains a server-side request forgery vulnerability in AI provider handling, where a configured provider URL can bypass outbound-request protections. An authenticated user who can configure an AI provider and invoke an AI action may cause the server to connect to internal services, other hosts, or cloud metadata endpoints and infer network reachability from the connection result.

Affected context

The issue affects Tandoor Recipes deployments that allow an administrator-controlled AI provider URL to be passed to LiteLLM through the affected AI actions. The vulnerable request paths are associated with AI import and AI step-sorting operations, where the supplied URL is used without the server's normal outbound-request validation. Risk depends on the server's network access, available credentials, and the permissions of the authenticated users who can configure Spaces or AI providers.

The issue affects Tandoor Recipes deployments that allow an administrator-controlled AI provider URL to be passed to LiteLLM through the affected AI actions. The vulnerable request paths are associated with AI import and AI step-sorting operations, where the supplied URL is used without the server's normal outbound-request validation. Risk depends on the server's network access, available credentials, and the permissions of the authenticated users who can configure Spaces or AI providers.

Exploit preconditions

  • Attack surface: Tandoor Recipes AI provider configuration and AI action endpoints
  • Required access: An authenticated account with permission to create or configure a Space and set an AI provider URL
  • Trigger point: Invocation of an affected AI action, such as AI import or step sorting
  • Network condition: The Tandoor server must be able to initiate outbound connections to the targeted address
  • Why exploitation is possible: The configured provider URL is sent to the underlying AI client without applying the server's outbound SSRF checks, while connection success, refusal, or timeout can reveal network reachability
  • Attack surface: Tandoor Recipes AI provider configuration and AI action endpoints
  • Required access: An authenticated account with permission to create or configure a Space and set an AI provider URL
  • Trigger point: Invocation of an affected AI action, such as AI import or step sorting
  • Network condition: The Tandoor server must be able to initiate outbound connections to the targeted address
  • Why exploitation is possible: The configured provider URL is sent to the underlying AI client without applying the server's outbound SSRF checks, while connection success, refusal, or timeout can reveal network reachability

Why this happens

The vulnerability results from a server-side HTTP client trusting an administrator-controlled provider URL without consistently enforcing outbound destination policies. The affected AI actions call the configured endpoint directly instead of routing the request through the application's safe-request controls. This behavior maps to CWE-918: Server-Side Request Forgery, because attacker-influenced input determines a request made from the server's network position.

The vulnerability results from a server-side HTTP client trusting an administrator-controlled provider URL without consistently enforcing outbound destination policies. The affected AI actions call the configured endpoint directly instead of routing the request through the application's safe-request controls. This behavior maps to CWE-918: Server-Side Request Forgery, because attacker-influenced input determines a request made from the server's network position.

Potential impact

  • Internal hosts and service ports may be mapped through connection behavior
  • Internal administrative or application services could receive unintended requests
  • Cloud instance metadata endpoints may be reachable from the server environment
  • Network topology and service availability information could be disclosed
  • Follow-on compromise may be possible if an accessible internal service accepts sensitive or privileged requests
  • Internal hosts and service ports may be mapped through connection behavior
  • Internal administrative or application services could receive unintended requests
  • Cloud instance metadata endpoints may be reachable from the server environment
  • Network topology and service availability information could be disclosed
  • Follow-on compromise may be possible if an accessible internal service accepts sensitive or privileged requests

General mitigation guidance

Mitigation generally focuses on making outbound destinations explicit, validated, and independent of untrusted URL input.

Common defensive patterns include:

  • Apply one centralized SSRF-safe request policy to every AI action and provider integration
  • Permit only approved schemes, hosts, ports, and resolved address ranges
  • Re-check DNS resolution and reject loopback, private, link-local, multicast, and metadata address spaces
  • Prefer server-side provider identifiers or allowlisted connection profiles over arbitrary URLs
  • Restrict outbound network access with egress firewalls, proxies, and workload-specific policies
  • Avoid exposing detailed connection outcomes when they are not required by the user interface
  • Run the application with minimal network privileges and cloud metadata protections

Mitigation generally focuses on making outbound destinations explicit, validated, and independent of untrusted URL input.

Common defensive patterns include:

  • Apply one centralized SSRF-safe request policy to every AI action and provider integration
  • Permit only approved schemes, hosts, ports, and resolved address ranges
  • Re-check DNS resolution and reject loopback, private, link-local, multicast, and metadata address spaces
  • Prefer server-side provider identifiers or allowlisted connection profiles over arbitrary URLs
  • Restrict outbound network access with egress firewalls, proxies, and workload-specific policies
  • Avoid exposing detailed connection outcomes when they are not required by the user interface
  • Run the application with minimal network privileges and cloud metadata protections

How teams detect issues like this

Detection can combine code analysis, runtime monitoring, and policy enforcement:

  • Use static analysis to identify user-controlled URLs passed to HTTP clients or AI provider libraries without a shared validation wrapper
  • Review all AI actions and integration paths for inconsistent use of safe-request or egress-control functions
  • Flag URL configuration fields that accept arbitrary hosts, schemes, ports, or redirects
  • Monitor outbound connections from the application for requests to private, loopback, link-local, and cloud metadata ranges
  • Alert on unusual provider changes followed by repeated connection attempts across internal address ranges
  • Enforce CI and code-review policies requiring centralized SSRF validation for server-side network requests

Detection can combine code analysis, runtime monitoring, and policy enforcement:

  • Use static analysis to identify user-controlled URLs passed to HTTP clients or AI provider libraries without a shared validation wrapper
  • Review all AI actions and integration paths for inconsistent use of safe-request or egress-control functions
  • Flag URL configuration fields that accept arbitrary hosts, schemes, ports, or redirects
  • Monitor outbound connections from the application for requests to private, loopback, link-local, and cloud metadata ranges
  • Alert on unusual provider changes followed by repeated connection attempts across internal address ranges
  • Enforce CI and code-review policies requiring centralized SSRF validation for server-side network requests

Sources

SourceLink
github.comgithub.com/TandoorRecipes/recipes/commit/79e783578a5b198a988eb9b486ba19f93df4cfa4
github.comgithub.com/TandoorRecipes/recipes/releases/tag/2.6.10
github.comgithub.com/TandoorRecipes/recipes/security/advisories/GHSA-wq4h-2r8x-cv65

Frequently asked

questions

It can be reached through the application's authenticated interface when a user has sufficient permissions to configure an AI provider and invoke an affected AI action. It does not require direct access to the Tandoor host, but the attacker must interact with a reachable application instance.

The relevant account must be able to create or configure a Space and provide an AI provider URL. The practical scope depends on Tandoor's authorization configuration and how those permissions are delegated.

Route every server-side provider request through a centralized SSRF-safe networking layer that uses strict allowlists, validates resolved addresses, limits redirects, and blocks private or metadata networks by default.

Treat all configurable URLs as untrusted, enforce egress controls at both the application and network layers, minimize server privileges, and monitor application-originated traffic to sensitive network ranges.

It can be reached through the application's authenticated interface when a user has sufficient permissions to configure an AI provider and invoke an affected AI action. It does not require direct access to the Tandoor host, but the attacker must interact with a reachable application instance.

The relevant account must be able to create or configure a Space and provide an AI provider URL. The practical scope depends on Tandoor's authorization configuration and how those permissions are delegated.

Route every server-side provider request through a centralized SSRF-safe networking layer that uses strict allowlists, validates resolved addresses, limits redirects, and blocks private or metadata networks by default.

Treat all configurable URLs as untrusted, enforce egress controls at both the application and network layers, minimize server privileges, and monitor application-originated traffic to sensitive network ranges.

Find out what's already
exploitable in your codebase.