{"items":[{"id":"NVI-00012920","kind":"vulnerability","title":"Thumbor has HMAC validation bypass via multiple .replace() calls when removing URL signature","revision":3,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-mw3h-qjxj-6xg9","CVE-2026-53501"],"plain_summary":"GitHub lists this reviewed advisory for thumbor. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-000471e0b174630d69811717728f7ad4"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-09-30T18:44:07.000Z","value":"8.2 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"},{"kind":"EPSS","as_of":"2026-11-06T12:00:23.000Z","value":"0.352%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.29032. Missing scores are unknown.","source_id":"sr-000471e0b174630d69811717728f7ad4"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8","url":"https://github.com/advisories/GHSA-mw3h-qjxj-6xg9","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-mw3h-qjxj-6xg9","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T07:22:52.960Z"},{"id":"sr-000471e0b174630d69811717728f7ad4","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-53501","publisher":"FIRST EPSS","observed_at":"2026-11-07T00:50:47.038Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"],"technology":"thumbor","known_exclusions":[],"conditions_summary":"# HMAC validation bypass via multiple `.replace()` calls when removing URL signature\n\n## Summary\n\nThumbor’s HMAC validation can be bypassed due to the use of Python’s `.replace()` when removing the signature from the URL before validation. Since `.replace()` removes **all occurrences** of the substring, an attacker can insert the same signature multiple times in the URL and manipulate the final URL used for validation.\n\nThis allows crafting URLs where the validated string differs from the actual requested resource, enabling loading images from unintended domains or paths.\n\n## Details\n\nThumbor signs URLs using **HMAC-SHA1** to prevent abuse such as loading arbitrary external images or invoking filters without authorization.\n\nDuring request validation, Thumbor removes the signature from the request URL before recalculating the HMAC. The relevant code:\n\n```python\nurl_signature = self.context.request.hash\nif url_signature:\n    signer = self.context.modules.url_signer(\n        self.context.server.security_key\n    )\n\n    try:\n        quoted_hash = quote(self.context.request.hash)\n    except KeyError:\n        self._error(400, f\"Invalid hash: {self.context.request.hash}\")\n        return\n\n ","public_affected_ranges":["<= 7.7.7"]}],"null_published_at":"2026-11-07T22:29:23.464Z","source_updated_at":"2026-09-30T18:44:07.000Z","source_disclosed_at":"2026-07-31T18:51:54.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-11-01T07:22:52.960Z"},{"id":"NVI-00012920","kind":"vulnerability","title":"Thumbor has HMAC validation bypass via multiple .replace() calls when removing URL signature","revision":2,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-mw3h-qjxj-6xg9","CVE-2026-53501"],"plain_summary":"GitHub lists this reviewed advisory for thumbor. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-053afe1bb1fab99e0d0e83d99172fc92"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-09-30T18:44:07.000Z","value":"8.2 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"},{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.352%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.29024. Missing scores are unknown.","source_id":"sr-053afe1bb1fab99e0d0e83d99172fc92"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8","url":"https://github.com/advisories/GHSA-mw3h-qjxj-6xg9","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-mw3h-qjxj-6xg9","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T07:22:52.960Z"},{"id":"sr-053afe1bb1fab99e0d0e83d99172fc92","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-53501","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.331Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"],"technology":"thumbor","known_exclusions":[],"conditions_summary":"# HMAC validation bypass via multiple `.replace()` calls when removing URL signature\n\n## Summary\n\nThumbor’s HMAC validation can be bypassed due to the use of Python’s `.replace()` when removing the signature from the URL before validation. Since `.replace()` removes **all occurrences** of the substring, an attacker can insert the same signature multiple times in the URL and manipulate the final URL used for validation.\n\nThis allows crafting URLs where the validated string differs from the actual requested resource, enabling loading images from unintended domains or paths.\n\n## Details\n\nThumbor signs URLs using **HMAC-SHA1** to prevent abuse such as loading arbitrary external images or invoking filters without authorization.\n\nDuring request validation, Thumbor removes the signature from the request URL before recalculating the HMAC. The relevant code:\n\n```python\nurl_signature = self.context.request.hash\nif url_signature:\n    signer = self.context.modules.url_signer(\n        self.context.server.security_key\n    )\n\n    try:\n        quoted_hash = quote(self.context.request.hash)\n    except KeyError:\n        self._error(400, f\"Invalid hash: {self.context.request.hash}\")\n        return\n\n ","public_affected_ranges":["<= 7.7.7"]}],"null_published_at":"2026-11-06T07:24:11.256Z","source_updated_at":"2026-09-30T18:44:07.000Z","source_disclosed_at":"2026-07-31T18:51:54.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-11-01T07:22:52.960Z"},{"id":"NVI-00012920","kind":"vulnerability","title":"Thumbor has HMAC validation bypass via multiple .replace() calls when removing URL signature","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-mw3h-qjxj-6xg9","CVE-2026-53501"],"plain_summary":"GitHub lists this reviewed advisory for thumbor. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-09-30T18:44:07.000Z","value":"8.2 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-0b134e4b76dc737bd2a30bd2c2fcf8b8","url":"https://github.com/advisories/GHSA-mw3h-qjxj-6xg9","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-mw3h-qjxj-6xg9","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T07:22:52.960Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-0b134e4b76dc737bd2a30bd2c2fcf8b8"],"technology":"thumbor","known_exclusions":[],"conditions_summary":"# HMAC validation bypass via multiple `.replace()` calls when removing URL signature\n\n## Summary\n\nThumbor’s HMAC validation can be bypassed due to the use of Python’s `.replace()` when removing the signature from the URL before validation. Since `.replace()` removes **all occurrences** of the substring, an attacker can insert the same signature multiple times in the URL and manipulate the final URL used for validation.\n\nThis allows crafting URLs where the validated string differs from the actual requested resource, enabling loading images from unintended domains or paths.\n\n## Details\n\nThumbor signs URLs using **HMAC-SHA1** to prevent abuse such as loading arbitrary external images or invoking filters without authorization.\n\nDuring request validation, Thumbor removes the signature from the request URL before recalculating the HMAC. The relevant code:\n\n```python\nurl_signature = self.context.request.hash\nif url_signature:\n    signer = self.context.modules.url_signer(\n        self.context.server.security_key\n    )\n\n    try:\n        quoted_hash = quote(self.context.request.hash)\n    except KeyError:\n        self._error(400, f\"Invalid hash: {self.context.request.hash}\")\n        return\n\n ","public_affected_ranges":["<= 7.7.7"]}],"null_published_at":"2026-11-01T07:29:12.902Z","source_updated_at":"2026-09-30T18:44:07.000Z","source_disclosed_at":"2026-07-31T18:51:54.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-01T07:22:52.960Z"}],"next_cursor":null,"snapshot_revision":"42594"}