Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted URL with bypass hostname to Thumbor unsafe endpoint
-
Exploitvalidate() matches attacker hostname via unescaped dot wildcard
-
ExecutionHTTP loader fetches content from attacker-controlled or internal host
-
ImpactThumbor returns response to attacker
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires two conditions, both of which match Thumbor's default and documented deployment profile. First, ALLOWED_SOURCES must contain at least one plain-string hostname entry; this is the overwhelmingly common configuration because all official documentation examples use plain strings and the configuration description prior to 7.8.0 described entries as 'regular expressions,' encouraging users to write domain names directly. Second, the attacker must be able to influence the image source URL submitted to Thumbor, which is true by default when ALLOW_UNSAFE_URL=True (Thumbor's default) or when the application forwards user-controlled input to a signed URL endpoint. Instances where ALLOWED_SOURCES is empty (no allowlist enforced) are not protected by this check regardless. Instances where ALLOWED_SOURCES is populated exclusively with pre-compiled re.Pattern objects are not affected by the bypass, as compiled patterns are handled via a separate code path. Exploitation is scoped to Thumbor versions prior to 7.8.0 on the pip/thumbor package. |
| Impact | The CVSS 3.1 score of 8.2 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L) reflects unauthenticated remote exploitation with high confidentiality impact, consistent with SSRF enabling access to internal network resources and metadata services. The base vector metrics are accurate given that Thumbor's default configuration (ALLOW_UNSAFE_URL=True, plain-string ALLOWED_SOURCES) satisfies both preconditions for exploitation without any non-default setup. EPSS data was not provided, so statistical exploitation probability cannot be quantified. The vulnerability is not listed in the CISA KEV catalog, meaning active widespread exploitation is not confirmed, but a detailed proof-of-concept with working Python code is vendor-published in the GitHub advisory, significantly lowering the bar for exploitation. The combination of a trivial bypass mechanism, default-on preconditions, and published PoC makes this a genuine priority for any public-facing Thumbor deployment, despite the absence of KEV confirmation. The partial A:L impact likely reflects potential for resource exhaustion by directing Thumbor to fetch large payloads from internal hosts. |
| Exploit ScenarioDerived | An attacker targets a public-facing Thumbor instance running a version prior to 7.8.0 with its default ALLOW_UNSAFE_URL=True setting and an ALLOWED_SOURCES list containing 's.glbimg.com'. They submit a request to Thumbor's unsafe endpoint specifying an image URL hosted at 'sXglbimgYcom' - an attacker-controlled domain whose name satisfies the unescaped dot regex - causing Thumbor's HTTP loader to fetch and proxy content from that host, potentially including responses that probe internal network topology or cloud metadata endpoints. A working proof-of-concept demonstrating this bypass is included verbatim in the vendor's GitHub security advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 31, 2026
Server-side request forgery in Thumbor prior to 7.8.0 allows unauthenticated remote attackers to bypass the ALLOWED_SOURCES hostname allowlist - the service's primary SSRF defense - and cause Thumbor to fetch images from arbitrary hosts, including internal network resources. The bypass exploits Python's regex engine treating unescaped dots as wildcards: an allowlist entry of 's.glbimg.com' silently matches attacker-controlled hostnames like 'sXglbimgYcom'. Because ALLOW_UNSAFE_URL defaults to True and all official documentation examples use plain-string patterns, the preconditions for exploitation match the default deployment profile. No public KEV listing, but a vendor-confirmed proof-of-concept is embedded in GitHub security advisory GHSA-6x26-6r6f-m537.
RemediationAI
Upgrade to Thumbor 7.8.0 or later via 'pip install --upgrade thumbor'; this is the definitive fix confirmed by the vendor release at https://github.com/thumbor/thumbor/releases/tag/7.8.0 and the patch commit at https://github.com/thumbor/thumbor/commit/68876715350c6c8f49c324e5515e64908830aed7. As a pre-patch workaround, replace all plain-string entries in ALLOWED_SOURCES with compiled re.Pattern objects (e.g., re.compile(r'https?://s\.glbimg\.com/.*')); note that compiled patterns match against the full normalized URL rather than just the hostname, so existing configurations must be updated accordingly to avoid both over-blocking and under-blocking. A secondary mitigation is to set ALLOW_UNSAFE_URL=False and enforce strict URL signing, which removes the ability for unauthenticated users to supply arbitrary image URLs; however, this does not fix the regex bypass and may break application functionality that relies on unsigned URLs. Do not rely on network-layer blocking alone as a substitute for patching, since Thumbor may be used to proxy requests to internal segments not protected by perimeter controls.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Thumbor (cpe:2.3:a:thumbor:thumbor:*:*:*:*:*:*:*:*) is a Python-based open-source HTTP image proxy and on-the-fly thumbnail service by globo.com. Its HTTP loader (thumbor/loaders/http_loader.py) exposes a validate() function that enforces an ALLOWED_SOURCES allowlist by matching a requested image URL's hostname against configured entries. Plain-string entries are wrapped with '^' and '$' anchors but passed directly to re.match() without re.escape(), so Python's regex engine treats every dot character as 'match any character.' CWE-918 (Server-Side Request Forgery) applies precisely: the allowlist check - the sole boundary between Thumbor and arbitrary outbound HTTP requests - is undermined, enabling the service to be directed to fetch from unintended internal or external hosts. The fix, applied in commit 68876715350c6c8f49c324e5515e64908830aed7, wraps plain-string patterns with re.escape() before compilation, restoring literal dot matching.
Know when Thumbor gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L
Default ALLOW_UNSAFE_URL=True means no authentication required; SSRF yields high confidentiality via internal resource access with no integrity impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Thumbor is an open-source photo thumbnail service by globo.com. Prior to 7.8.0, the ALLOWED_SOURCES configuration passes plain strings to re.match() without escaping dots, so a hostname differing at dot positions can match the allowlist. This issue is fixed in 7.8.0.
Blast Radius
ecosystem impact- 24 pypi packages depend on thumbor (24 direct, 0 indirect)
Ecosystem-wide dependent count for version 7.8.0.
Executive ViewAI
Thumbor image service versions below 7.8.0 contain a critical vulnerability allowing unauthenticated attackers to bypass security controls and access internal networks; publicly available exploit code exists. The default production configuration is vulnerable across most deployments, creating immediate risk of data breach and unauthorized access to internal systems.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
EUVD-2026-51597
GHSA-6x26-6r6f-m537
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB