Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAttacker hosts crafted robots.txt with many `*` wildcards
-
DeliveryVictim crawler fetches attacker-controlled domain
-
Exploitprotego.Protego.parse() ingests malicious directive
-
Installprotego.Protego.can_fetch() compiles exponential regex
-
C2Python re engine enters catastrophic backtracking on near-miss URL
-
ExecuteCrawler thread hangs indefinitely
-
ImpactDenial of service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the target application uses protego <= 0.6.1 to parse robots.txt; (2) the application fetches robots.txt from a domain the attacker controls or can influence (e.g., via DNS poisoning or by simply operating the target domain); and (3) the application subsequently calls |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P/VA:H, score 7.1) accurately models the threat: a remote attacker with no credentials can cause complete availability loss in the vulnerable component, but only after the target application fetches the attacker-controlled robots.txt - captured by UI:P. No EPSS score was included in the intelligence package, so exploitation probability cannot be independently quantified; however, the published PoC (requiring only 12 wildcard pairs to trigger an indefinite freeze) substantially lowers the exploitation bar. There is no CISA KEV listing, indicating no confirmed widespread exploitation at time of analysis. Risk is moderate-to-high for web-crawling applications that routinely fetch robots.txt from arbitrary external servers - a standard operational pattern for Scrapy-based crawlers - because those deployments are structurally exposed to attacker-controlled robots.txt content as a matter of normal function. Risk is low for deployments restricted to known, trusted domains, since the crawler must initiate contact with the attacker's server for the exploit to trigger. |
| Exploit ScenarioDerived | An attacker operates a web server and serves a crafted robots.txt containing a Disallow directive with many consecutive |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Aug 28, 2026
Exponential backtracking ReDoS in Protego (pip/protego <= 0.6.1) allows any party who can serve a crafted robots.txt to freeze the can_fetch() call indefinitely, denying service to any application using this library for robots.txt compliance. A working proof-of-concept is publicly available in the GitHub security advisory GHSA-wjmf-p669-5m5p; the CVSS 4.0 score of 7.1 (VA:H) reflects meaningful availability risk for web-crawling deployments. No public exploit identified at time of analysis beyond the published PoC, and no CISA KEV listing exists.
Earlier versions of this analysis (1)
Exponential backtracking in protego (pip/protego <= 0.6.1) allows any web server operator to cause indefinite denial of service in crawlers that fetch robots.txt from untrusted sources. The root cause is that * wildcards in robots.txt Allow/Disallow directives are naively compiled into lazy .*? regex quantifiers; a directive with many consecutive wildcards matched against a sufficiently long near-miss URL triggers catastrophic regex backtracking, freezing can_fetch() indefinitely. A proof-of-concept is publicly documented in the GitHub advisory GHSA-wjmf-p669-5m5p, and a vendor-released patch replacing the regex engine with a safe linear string-search algorithm is available in version 0.6.2.
RemediationAI
Vendor-released patch: 0.6.2. Upgrade immediately via pip install --upgrade protego to version 0.6.2 or later; this release replaces the vulnerable regex-based wildcard matching with a linear string-search algorithm confirmed in commit https://github.com/scrapy/protego/commit/785940181659bf440ba82f1da148fade5087e858. If an immediate upgrade is blocked, a targeted compensating control is to validate fetched robots.txt before parsing: reject or strip any Disallow or Allow directive containing more than a conservative threshold of * characters (e.g., 4 or fewer per line). Trade-off: overly strict filtering may suppress legitimate complex directives, causing the crawler to access paths the site owner intended to disallow - which could have legal or ToS implications. A second option is to wrap can_fetch() calls in a thread with a hard timeout and treat expiry as disallowed; this avoids a frozen thread but adds per-call latency overhead. Neither workaround is a substitute for patching.
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
Protego is a Python library (pkg:pip/protego) that parses robots.txt files and evaluates URL fetch permissions for web crawlers, used most widely as the robots.txt backend for the Scrapy framework. The vulnerable code path is protego._urlpattern._URLPattern._prepare_pattern_for_regex(), which converts each * wildcard in an Allow or Disallow directive into the lazy regex fragment .*?. When a directive contains many consecutive wildcards (e.g., /*1*1*1...*Z), Python's re module must explore an exponentially growing number of partial-match paths before determining a near-miss URL does not match - classic catastrophic backtracking. CWE-400 (Uncontrolled Resource Consumption) is the precise root-cause class: attacker-supplied input drives unbounded CPU time with no internal resource limit. The fix in 0.6.2 eliminates the regex engine entirely, replacing it with a linear str.find()-based wildcard matcher (_match_wildcard) that runs in O(n·m) time and is immune to backtracking.
Know when Python 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Attacker serves robots.txt over the network (AV:N, AC:L, PR:N), but the crawling application must actively fetch it (UI:R); impact is availability-only with no scope change.
Primary rating from Vendor (https://github.com/scrapy/protego).
CVSS VectorVendor: https://github.com/scrapy/protego
Lifecycle Timeline
2DescriptionCVE.org
Problem description
Protego constructs regular expressions to match URLs against robots.txt Allow: and Disallow: directives, see protego._urlpattern._URLPattern._prepare_pattern_for_regex(). Every * in the directive value is translated into a lazy .*? regex piece, thus a specially crafted directive value with many asterisks may produce a regex that freezes the parser due to exponential backtracking.
Impact
Parsing a specially crafted robots.txt with protego.Protego.parse() and then trying to match an URL with protego.Protego.can_fetch() results in the latter call not returning for a period dependent on the length of the URL.
Proof of concept
from protego import Protego
robotstxt = f"""
User-agent: *
Disallow: /{"*1" * 12}*Z
"""
rp = Protego.parse(robotstxt)
url = "/" + "1" * 60
rp.can_fetch(url, "mybot")
# freezesArticles & Coverage 1
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption; MITRE also assigns CWE-1333, Inefficient Regular Expression Complexity).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Protego library versions 0.6.1 and earlier contain a denial-of-service vulnerability where publicly available exploit code exists. The vulnerability can be remotely triggered through malformed robots.txt files, causing application operations to freeze indefinitely. Organizations relying on Protego for web crawler compliance should prioritize patching to protect search indexing and automated discovery service availability.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same weakness CWE-400 – Uncontrolled Resource Consumption
View allSame technique Denial Of Service
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| openSUSE Tumbleweed | Fixed |
EUVD-2026-67865
GHSA-wjmf-p669-5m5p
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB