Severity by source
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
DNS rebinding requires attacker DNS control and timing (AC:H); any authenticated user can trigger via API (PR:L); only confidentiality is impacted through response reflection (C:H, I:N, A:N).
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
2DescriptionCVE.org
Mealie's AsyncSafeTransport SSRF guard (mealie/pkgs/safehttp/transport.py) resolves a target hostname once, checks the resolved IP against private-range rules, but then issues the actual outbound HTTP request using the original hostname, which the underlying async transport re-resolves independently. Because the validated IP is never pinned to the actual connection, a DNS-rebinding attacker (returning a public IP to the validation lookup and a private/metadata IP to the real connection) defeats the guard. This is reachable by any authenticated user via /api/recipes/create/url, /api/recipes/test-scrape-url, and /api/recipes/{slug}/image, and the scraper reflects fetched content back to the requester, allowing an authenticated user to read internal HTTP services and cloud-metadata endpoints.
AnalysisAI
DNS rebinding defeats the SSRF guard in Mealie's AsyncSafeTransport, allowing any authenticated user to read internal HTTP services and cloud metadata endpoints via three recipe API endpoints. The guard resolves a hostname once for validation, passes the check using the public IP returned, but the underlying async transport independently re-resolves the hostname for the actual connection - an attacker controlling DNS can flip the record to a private or metadata IP between these two events. No public exploit code has been identified at time of analysis, and this vulnerability is not listed in the CISA KEV catalog.
Technical ContextAI
Mealie is a self-hosted recipe management application (cpe:2.3:a:mealie-recipes:mealie) written in Python. The flaw resides in mealie/pkgs/safehttp/transport.py, which implements AsyncSafeTransport as an application-layer SSRF guard. The root cause is CWE-367 (Time-of-check Time-of-use, TOCTOU): the guard resolves the target hostname once to validate the resulting IP against private-range blocklists, but because the validated IP is never pinned to the socket-level connection, the underlying async transport performs its own independent resolution when opening the actual TCP connection. This split-resolution architecture is the structural precondition for DNS rebinding: an attacker who controls a DNS domain can return a publicly-routable IP during the validation lookup (passing the guard) and then flip the DNS record - exploiting low TTLs - so the real connection resolves to a private RFC1918 address or a cloud metadata endpoint such as 169.254.169.254. The scraper reflects the full HTTP response body back to the requester, completing the data exfiltration path. Reachable endpoints include /api/recipes/create/url, /api/recipes/test-scrape-url, and /api/recipes/{slug}/image.
RemediationAI
No vendor-released patch has been identified at time of analysis - the fix version is not confirmed from available data; monitor https://github.com/mealie-recipes/mealie for a tagged release addressing this issue and apply promptly. The correct code-level fix is to pin the resolved IP address to the actual socket connection after the validation step, preventing the async transport from performing an independent re-resolution - this eliminates the TOCTOU window entirely. As a network-layer compensating control, deploy egress filtering on the host running Mealie that blocks outbound HTTP/S connections to all private RFC1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8) and the link-local metadata range (169.254.0.0/16); this is more reliable than application-layer guards because it operates at a layer the application cannot bypass, though it may break legitimate integrations with internal services. For AWS deployments, enforce IMDSv2 (requiring a session-oriented token) to prevent unauthenticated metadata reads even if SSRF succeeds - note this requires instance configuration and does not protect other cloud metadata patterns. Restricting access to the affected endpoints to trusted user roles within Mealie (if role-based controls are available) reduces the attack surface without breaking functionality.
Mealie 1.0.0beta3 contains an arbitrary file upload vulnerability which allows attackers to execute arbitrary code via a
A Broken Object Level Authorization vulnerability in the component /api/users/{user-id} of hay-kot mealie v2.2.0 allows
Mealie1.0.0beta3 was discovered to contain a Server-Side Template Injection vulnerability, which allows attackers to exe
Mealie is a self hosted recipe manager and meal planner. Rated medium severity (CVSS 6.5), this vulnerability is low att
A stored cross-site scripting (XSS) vulnerability in the recipe asset upload and media serving component in Mealie 3.3.1
Mealie 1.0.0beta3 employs weak password requirements which allows attackers to potentially gain unauthorized access to t
A Broken Object Level Authorization vulnerability in the component /api/users/{user-id} of hay-kot mealie v2.2.0 allows
A stored HTML injection vulnerability in the Recipe Notes rendering component in Mealie 3.3.1 allows remote authenticate
A stored cross-site scripting (XSS) vulnerability in Mealie v0.5.5 allows attackers to execute arbitrary web scripts or
A stored cross-site scripting (XSS) vulnerability in Mealie 1.0.0beta3 allows attackers to execute arbitrary web scripts
A Broken Object Level Authorization vulnerability in the component /households/permissions of hay-kot mealie v2.2.0 allo
Mealie is a self hosted recipe manager and meal planner. Rated medium severity (CVSS 6.5), this vulnerability is remotel
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53207
GHSA-q2c2-jwjg-8cxx