CVE-2026-53505
Python vulnerability analysis and mitigation

Overview

CVE-2026-53505 is an Uncontrolled Resource Consumption (CWE-400) vulnerability in Thumbor, an open-source photo thumbnail service by globo.com. The filters:proportion(<value>) filter does not enforce an upper bound on its input and executes in the post-transform phase, allowing an attacker to trigger arbitrarily large image resizes that exhaust CPU and memory, resulting in denial of service. All versions up to and including 7.7.7 are affected; the issue is fixed in version 7.8.0. It carries a CVSS v3.1 base score of 7.5 (High) (Github Advisory, Thumbor Release).

Technical details

The root cause lies in thumbor/filters/proportion.py, where the filter parameter is parsed as a float (BaseFilter.DecimalNumber) with no enforced maximum value. The filter computes new_width = source_width * value and new_height = source_height * value, then calls engine.resize(new_width, new_height) — meaning a value like 10000 would attempt to resize an image to 10,000× its original dimensions. Critically, the proportion filter runs in the POST_TRANSFORM phase, after the main transform pipeline, effectively bypassing any MAX_WIDTH/MAX_HEIGHT request-level clamping applied earlier in the request lifecycle. While documentation specifies the argument should be in the range 0.0 to 1.0, this constraint was never enforced in code (Github Advisory, Fix Commit).

Impact

Successful exploitation results in remote denial of service through severe CPU and/or memory exhaustion, potentially causing process crashes or OOM kills on the Thumbor server. There is no confidentiality or integrity impact — the vulnerability is purely an availability concern. The severity of exploitability depends on deployment configuration: if /unsafe/ URLs are enabled (a common default in some deployments), the attack is fully unauthenticated; if disabled, an attacker still only needs a valid signed URL, which may be obtainable by any authorized user or partner (Github Advisory).

Exploitation steps

  1. Reconnaissance: Identify internet-facing Thumbor instances running versions ≤ 7.7.7 using tools like Shodan (search for thumbor in HTTP headers or response bodies) or by probing known Thumbor URL patterns.
  2. Determine deployment mode: Check whether the target allows /unsafe/ URLs by sending a test request such as http://<target>/unsafe/100x100/filters:proportion(1.0)/example.jpg. A valid response indicates ALLOW_UNSAFE_URL=True.
  3. Craft malicious request (unsafe mode): Send an HTTP GET request with an extreme proportion value: http://<target>/unsafe/100x100/filters:proportion(10000)/example.jpg. The server will attempt to resize the image to 10,000× its dimensions.
  4. Craft malicious request (signed URL mode): If /unsafe/ is disabled but the attacker has access to a signing service or valid signed URLs, construct a signed URL incorporating filters:proportion(10000) and submit it to the Thumbor endpoint.
  5. Trigger DoS: Send the crafted request repeatedly (or in parallel) to maximize CPU and memory exhaustion, potentially causing the Thumbor process to crash or be OOM-killed, rendering the image service unavailable (Github Advisory, Fix Commit).

Indicators of compromise

  • Network: Repeated HTTP GET requests to Thumbor endpoints containing filters:proportion(<large_value>) in the URL path (e.g., proportion(10000), proportion(9999), or any value significantly greater than 1.0); high-volume requests from a single or small set of source IPs targeting the image service.
  • Logs: Thumbor access logs showing requests with filters:proportion values far exceeding 1.0; HTTP 500 errors or timeout responses following such requests; OOM killer log entries in system logs (/var/log/syslog or dmesg) referencing the Thumbor process.
  • Process: Sudden spikes in CPU and memory usage by the Thumbor worker process; Thumbor process termination or restart events; unusually long image processing times correlated with specific filter requests.
  • File System: Core dump files generated by a crashed Thumbor process in the working directory or configured crash dump location.

Mitigation and workarounds

Upgrade Thumbor to version 7.8.0 or later, which enforces that the proportion filter value must be in the range (0.0, 1.0] — any value outside this range is silently rejected before any arithmetic is performed (Thumbor Release, Fix Commit). As an interim workaround, disable the proportion filter by removing it from BUILTIN_FILTERS in the Thumbor configuration, or disable ALLOW_UNSAFE_URL to require signed URLs and limit access to trusted parties only. Additionally, consider implementing rate limiting and request-level resource controls (e.g., CPU/memory limits via cgroups or container resource constraints) on the Thumbor service to reduce the blast radius of any DoS attempt.

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-53502HIGH8.7
  • Python logoPython
  • thumbor
NoYesJul 31, 2026
CVE-2026-53505HIGH7.5
  • Python logoPython
  • thumbor
NoYesJul 31, 2026
CVE-2026-53504HIGH7.5
  • Python logoPython
  • thumbor
NoYesJul 31, 2026
CVE-2026-53503HIGH7.5
  • Python logoPython
  • thumbor
NoYesJul 31, 2026
CVE-2026-54785MEDIUM6.2
  • Python logoPython
  • gemini-bridge
NoYesJul 31, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management