Summary
Tandoor Recipes contains a server-side request forgery vulnerability in its Pestle importer, where authenticated low-privileged users can cause the server to send GET requests to attacker-selected internal or external hosts. If a crafted image URL is accepted during JSON import, the attacker may probe internal services and retrieve responses through the stored recipe image.
Tandoor Recipes contains a server-side request forgery vulnerability in its Pestle importer, where authenticated low-privileged users can cause the server to send GET requests to attacker-selected internal or external hosts. If a crafted image URL is accepted during JSON import, the attacker may probe internal services and retrieve responses through the stored recipe image.
Affected context
The vulnerability occurs in Tandoor Recipes deployments that enable the Pestle JSON importer and process recipe image URLs through the affected import path. It becomes risky when low-privileged authenticated users can submit or influence imported recipe data, while the importer performs outbound requests without applying the application's centralized SSRF protections.
The vulnerability occurs in Tandoor Recipes deployments that enable the Pestle JSON importer and process recipe image URLs through the affected import path. It becomes risky when low-privileged authenticated users can submit or influence imported recipe data, while the importer performs outbound requests without applying the application's centralized SSRF protections.
Exploit preconditions
- Attack surface: Pestle JSON recipe import functionality
- Required access: An authenticated account with permission to submit or import Pestle recipe data
- Trigger point: Processing of a recipe image URL during import
- Why exploitation is possible: The importer issues a raw outbound HTTP GET request that can bypass centralized SSRF filtering and permits attacker-controlled destinations
- Target condition: The server must be able to reach the selected internal or external host
- Attack surface: Pestle JSON recipe import functionality
- Required access: An authenticated account with permission to submit or import Pestle recipe data
- Trigger point: Processing of a recipe image URL during import
- Why exploitation is possible: The importer issues a raw outbound HTTP GET request that can bypass centralized SSRF filtering and permits attacker-controlled destinations
- Target condition: The server must be able to reach the selected internal or external host
Why this happens
The underlying flaw is an inconsistent outbound-request trust boundary. The Pestle importer directly invokes an HTTP request operation using a URL supplied through imported content, rather than routing the request through a consistently enforced SSRF-safe request layer.
This maps to CWE-918: Server-Side Request Forgery, because server-side network access is influenced by untrusted user input. The resulting behavior can allow requests to destinations that should be inaccessible to the submitting user, including internal services or loopback endpoints.
The underlying flaw is an inconsistent outbound-request trust boundary. The Pestle importer directly invokes an HTTP request operation using a URL supplied through imported content, rather than routing the request through a consistently enforced SSRF-safe request layer.
This maps to CWE-918: Server-Side Request Forgery, because server-side network access is influenced by untrusted user input. The resulting behavior can allow requests to destinations that should be inaccessible to the submitting user, including internal services or loopback endpoints.
Potential impact
- Internal services could be probed for open ports or exposed protocols.
- Cloud metadata or other internal-only endpoints could be queried.
- Sensitive internal responses could be disclosed through stored recipe images.
- Network segmentation controls could be bypassed from the application server's position.
- Internal services could be exposed to request-based abuse or reconnaissance.
- Internal services could be probed for open ports or exposed protocols.
- Cloud metadata or other internal-only endpoints could be queried.
- Sensitive internal responses could be disclosed through stored recipe images.
- Network segmentation controls could be bypassed from the application server's position.
- Internal services could be exposed to request-based abuse or reconnaissance.
General mitigation guidance
Mitigation generally focuses on applying a single, well-defined SSRF defense policy to every server-side outbound request.
Common defensive patterns include:
- Routing importer requests through a hardened, centrally enforced HTTP client.
- Allowlisting permitted URL schemes, destinations, ports, and network ranges.
- Blocking loopback, link-local, private, reserved, and metadata-service address spaces after DNS resolution.
- Rechecking resolved addresses to reduce DNS rebinding and redirect-based bypasses.
- Limiting or disabling remote image fetching for low-privilege imports where it is not required.
- Validating redirects, enforcing response-size and timeout limits, and avoiding storage of unrestricted remote responses.
- Running application components with restricted egress and least-privilege network access.
- Treating imported URLs as untrusted data regardless of the user's authenticated status.
Mitigation generally focuses on applying a single, well-defined SSRF defense policy to every server-side outbound request.
Common defensive patterns include:
- Routing importer requests through a hardened, centrally enforced HTTP client.
- Allowlisting permitted URL schemes, destinations, ports, and network ranges.
- Blocking loopback, link-local, private, reserved, and metadata-service address spaces after DNS resolution.
- Rechecking resolved addresses to reduce DNS rebinding and redirect-based bypasses.
- Limiting or disabling remote image fetching for low-privilege imports where it is not required.
- Validating redirects, enforcing response-size and timeout limits, and avoiding storage of unrestricted remote responses.
- Running application components with restricted egress and least-privilege network access.
- Treating imported URLs as untrusted data regardless of the user's authenticated status.
How teams detect issues like this
Organizations can look for SSRF exposure through:
- Static analysis rules identifying direct HTTP client calls that consume imported or request-controlled URLs.
- Code review checks for outbound request paths that bypass centralized network-safety wrappers.
- Tests using private, loopback, link-local, metadata, and redirecting destinations to verify policy enforcement.
- Network telemetry correlating application processes with unexpected internal address access.
- Alerts for recipe imports followed by requests to sensitive address ranges or unusual ports.
- Policy enforcement requiring approved HTTP clients and explicit destination validation for server-side fetches.
Automated security scanners and code review tools may help identify direct request calls and missing SSRF controls, but runtime network monitoring remains useful for detecting bypasses.
Organizations can look for SSRF exposure through:
- Static analysis rules identifying direct HTTP client calls that consume imported or request-controlled URLs.
- Code review checks for outbound request paths that bypass centralized network-safety wrappers.
- Tests using private, loopback, link-local, metadata, and redirecting destinations to verify policy enforcement.
- Network telemetry correlating application processes with unexpected internal address access.
- Alerts for recipe imports followed by requests to sensitive address ranges or unusual ports.
- Policy enforcement requiring approved HTTP clients and explicit destination validation for server-side fetches.
Automated security scanners and code review tools may help identify direct request calls and missing SSRF controls, but runtime network monitoring remains useful for detecting bypasses.

