CVE-2026-53505
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
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
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
CVE-2026-53505- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
EUVDEUVD-2026-51611
7.5
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
EUVD-2026-51611- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-phj3-59pf-cp83
7.5
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Summary
Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service.
Details
- Filter implementation:
thumbor/filters/proportion.pyvalueis parsed as a float (BaseFilter.DecimalNumber) with no maximum.- The filter computes
new_width = source_width * valueandnew_height = source_height * valueand then callsengine.resize(new_width, new_height).
- Execution phase:
proportionruns in the default POST_TRANSFORM phase (after the main transform pipeline). This means it can effectively bypass request-level size clamping that happens earlier in the request lifecycle (e.g.,MAX_WIDTH/MAX_HEIGHTapplied toreq.width/req.height).
Documentation states the percentage argument should be 0.0 to 1.0 (docs/proportion.rst), but the implementation does not enforce this constraint.
PoC
Preconditions
- The
proportionfilter is enabled (it is enabled by default viaBUILTIN_FILTERS). - Either:
/unsafe/URLs are allowed (ALLOW_UNSAFE_URL=True, common default in some deployments), OR/unsafe/is disabled, and the attacker has a valid signed URL (i.e., the attacker is an authorized user/partner, or otherwise can obtain signed URLs issued by a trusted signing service).
Example request 1 (signed URL)
The following request was used to reproduce the issue and causes severe resource exhaustion:
http://<host>:<port>/<url-sign>/100x100/filters:proportion(10000)/example.jpg
Example request 2 (/unsafe/)
If /unsafe/ is enabled:
http://<host>:<port>/unsafe/100x100/filters:proportion(10000)/example.jpg
Impact
- Remote Denial of Service via CPU and/or memory exhaustion (and potentially process crash / OOM kill).
- Exploitability depends on deployment:
- If
/unsafe/is enabled: unauthenticated remote DoS. - If
/unsafe/is disabled: the attacker needs a valid signed URL (i.e., the attacker can legitimately request signed URLs, or has access to signed URLs issued for other users/partners). If signed URLs are not exposed to untrusted parties, exploitability is reduced but the risk still applies to any party who can generate/use signed URLs.
- If
Suggested remediation
- Enforce a strict bound on the
proportionparameter (e.g.,0.0 < value <= 1.0as documented), or define a safe maximum based on intended semantics.
- Record
GHSA-phj3-59pf-cp83- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
NVD
7.5
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
CVE-2026-53505- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSV
7.5
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
CVE-2026-53505- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-53505
7.5
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
DEBIAN-CVE-2026-53505- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVGHSA-phj3-59pf-cp83
7.5
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Summary
Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service.
Details
- Filter implementation:
thumbor/filters/proportion.pyvalueis parsed as a float (BaseFilter.DecimalNumber) with no maximum.- The filter computes
new_width = source_width * valueandnew_height = source_height * valueand then callsengine.resize(new_width, new_height).
- Execution phase:
proportionruns in the default POST_TRANSFORM phase (after the main transform pipeline). This means it can effectively bypass request-level size clamping that happens earlier in the request lifecycle (e.g.,MAX_WIDTH/MAX_HEIGHTapplied toreq.width/req.height).
Documentation states the percentage argument should be 0.0 to 1.0 (docs/proportion.rst), but the implementation does not enforce this constraint.
PoC
Preconditions
- The
proportionfilter is enabled (it is enabled by default viaBUILTIN_FILTERS). - Either:
/unsafe/URLs are allowed (ALLOW_UNSAFE_URL=True, common default in some deployments), OR/unsafe/is disabled, and the attacker has a valid signed URL (i.e., the attacker is an authorized user/partner, or otherwise can obtain signed URLs issued by a trusted signing service).
Example request 1 (signed URL)
The following request was used to reproduce the issue and causes severe resource exhaustion:
http://<host>:<port>/<url-sign>/100x100/filters:proportion(10000)/example.jpg
Example request 2 (/unsafe/)
If /unsafe/ is enabled:
http://<host>:<port>/unsafe/100x100/filters:proportion(10000)/example.jpg
Impact
- Remote Denial of Service via CPU and/or memory exhaustion (and potentially process crash / OOM kill).
- Exploitability depends on deployment:
- If
/unsafe/is enabled: unauthenticated remote DoS. - If
/unsafe/is disabled: the attacker needs a valid signed URL (i.e., the attacker can legitimately request signed URLs, or has access to signed URLs issued for other users/partners). If signed URLs are not exposed to untrusted parties, exploitability is reduced but the risk still applies to any party who can generate/use signed URLs.
- If
Suggested remediation
- Enforce a strict bound on the
proportionparameter (e.g.,0.0 < value <= 1.0as documented), or define a safe maximum based on intended semantics.
- Record
GHSA-phj3-59pf-cp83- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSVPYSEC-2026-3621
7.5
Thumbor proportion filter allows unbounded post-transform resize leading to remote DoS
Summary
Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service.
Details
- Filter implementation:
thumbor/filters/proportion.pyvalueis parsed as a float (BaseFilter.DecimalNumber) with no maximum.- The filter computes
new_width = source_width * valueandnew_height = source_height * valueand then callsengine.resize(new_width, new_height).
- Execution phase:
proportionruns in the default POST_TRANSFORM phase (after the main transform pipeline). This means it can effectively bypass request-level size clamping that happens earlier in the request lifecycle (e.g.,MAX_WIDTH/MAX_HEIGHTapplied toreq.width/req.height).
Documentation states the percentage argument should be 0.0 to 1.0 (docs/proportion.rst), but the implementation does not enforce this constraint.
PoC
Preconditions
- The
proportionfilter is enabled (it is enabled by default viaBUILTIN_FILTERS). - Either:
/unsafe/URLs are allowed (ALLOW_UNSAFE_URL=True, common default in some deployments), OR/unsafe/is disabled, and the attacker has a valid signed URL (i.e., the attacker is an authorized user/partner, or otherwise can obtain signed URLs issued by a trusted signing service).
Example request 1 (signed URL)
The following request was used to reproduce the issue and causes severe resource exhaustion:
http://<host>:<port>/<url-sign>/100x100/filters:proportion(10000)/example.jpg
Example request 2 (/unsafe/)
If /unsafe/ is enabled:
http://<host>:<port>/unsafe/100x100/filters:proportion(10000)/example.jpg
Impact
- Remote Denial of Service via CPU and/or memory exhaustion (and potentially process crash / OOM kill).
- Exploitability depends on deployment:
- If
/unsafe/is enabled: unauthenticated remote DoS. - If
/unsafe/is disabled: the attacker needs a valid signed URL (i.e., the attacker can legitimately request signed URLs, or has access to signed URLs issued for other users/partners). If signed URLs are not exposed to untrusted parties, exploitability is reduced but the risk still applies to any party who can generate/use signed URLs.
- If
Suggested remediation
- Enforce a strict bound on the
proportionparameter (e.g.,0.0 < value <= 1.0as documented), or define a safe maximum based on intended semantics.
- Record
PYSEC-2026-3621- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-53505
7.5
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, Thumbor's filters:proportion(<value>) filter does not enforce an upper bound on <value> and runs in the post-transform phase. An attacker can trigger extremely large resizes (CPU/memory exhaustion) and cause denial of service. This issue is fixed in 7.8.0.
- Record
UBUNTU-CVE-2026-53505- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
thumborPyPI |
through 7.7.7 | 7.8.0 |
thumborDebian:14 |
before 7.8.0-1, plus listed versions 6.3.2-36.3.2-46.5.1-16.5.1-26.5.1-3 Show 11 moreShow less6.5.1-46.5.1-56.5.1-66.5.1-76.7.0-17.7.7-17.7.7-27.7.7-37.7.7-47.7.7-57.7.7-6 |
7.8.0-1 |
thumborPyPI |
before 7.8.0, plus listed versions 4.1.34.10.04.10.14.10.24.10.3 Show 45 moreShow less4.11.04.11.14.12.04.12.14.12.24.4.14.5.34.5.44.6.04.7.04.7.14.8.04.8.14.8.24.8.34.8.44.8.54.8.64.9.04.9.15.0.05.0.0rc15.0.0rc25.0.15.0.25.0.35.0.45.0.55.0.65.1.05.2.05.2.16.0.06.0.0b16.0.0b26.0.0b36.0.0b46.0.0b56.0.16.0.26.1.06.1.16.1.26.1.36.1.4 |
7.8.0 |
thumborUbuntu:26.04:LTS |
All versions, plus listed versions 7.7.7-47.7.7-5 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-53505 is a high vulnerability (CVSS 7.5) in Thumbor, published July 31, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.61%, the 49th percentile. Fixed in thumbor 7.8.0.
References
github.com/thumbor/thumbor/security/advisories/GHSA-phj3-59pf-cp83
github.com/thumbor/thumbor/commit/2c716119de986cfc68c7071af52a98187e006023
github.com/thumbor/thumbor/releases/tag/7.8.0
github.com/advisories/GHSA-phj3-59pf-cp83
github.com/CVEProject/cvelistV5/tree/main/cves/2026/53xxx/CVE-2026-53505.json
nvd.nist.gov/vuln/detail/CVE-2026-53505
Left out here: 68 versions. The JSON record has them.