Fact-checked by Grok 2 weeks ago

ReDoS

Regular expression denial of service (ReDoS) is a form of attack that exploits vulnerabilities in the implementation of s, causing software to consume excessive computational resources—often exponentially more than expected—and leading to denial-of-service conditions such as system hangs or crashes. This vulnerability arises primarily from mechanisms in (NFA) regex engines, which are common in languages like , , and .NET, where certain input strings trigger an explosion of evaluation paths. Attackers craft short, malicious inputs to force this behavior, making ReDoS a low-bandwidth that can disrupt applications, servers, and even client-side processing without requiring large payloads. The broader concept of algorithmic denial-of-service attacks traces back to 2003, while ReDoS specifically was first formally outlined in 2009 at the Israel Conference, where researchers highlighted its practical risks in web applications. In practice, ReDoS manifests through catastrophic backtracking, where nested quantifiers or overlapping alternatives in a regex pattern—such as (a+)+$—lead to repeated failures and retries for inputs like repeated 'a's followed by a non-matching character (e.g., "aaaaaaaaaaaaaaaa!"). For instance, a seemingly simple pattern like ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$ for email validation can take seconds or hours to process crafted strings due to the engine exploring thousands of paths. As of 2018, empirical studies revealed ReDoS as a widespread issue, with super-linear regex patterns appearing in thousands of software modules across ecosystems like (e.g., ) and (e.g., PyPI), affecting over 10,000 packages and potentially enabling attacks on diverse applications from web servers to input validators. More recent analyses as of 2024 show continued widespread impact, with a 143% increase in reported ReDoS vulnerabilities in the ecosystem and approximately 400 related CVEs since 2014. The impact includes resource exhaustion at multiple layers—client-side (e.g., browser hangs), server-side (e.g., CPU spikes in ), and even in security tools like firewalls—often without detection until exploited. Mitigation strategies emphasize avoiding vulnerable patterns, such as nested repetitions or ambiguous quantifiers, and adopting safer engines like deterministic finite automata (DFA) where possible, alongside techniques like input length limits, timeouts, and automated tools to test for risks. Despite advances in detection tools, developers often revise regexes manually rather than overhaul parsing logic, underscoring ongoing challenges in preventing ReDoS at scale.

Fundamentals

Definition

Regular expressions, often abbreviated as regex, are formal patterns used in programming languages and tools to match, search, and manipulate strings of text through operations like concatenation, alternation, and repetition. These patterns enable efficient text processing in applications such as input validation, data extraction, and search functionalities across various software systems. Regular expression denial of service (ReDoS) is an algorithmic complexity attack that exploits vulnerabilities in the processing of regular expressions by causing excessive computational resource consumption, effectively denying service to legitimate users. In ReDoS, attackers craft malicious inputs that trigger inefficient evaluation in regex engines, particularly those relying on backtracking, resulting in catastrophic slowdowns where processing time escalates exponentially with input size. This leads to worst-case time complexities as high as O(2^n), where n is the input length, in contrast to the typical linear or polynomial time for well-behaved patterns. Unlike traditional denial-of-service attacks that overwhelm systems through high-volume or resource flooding, ReDoS targets the inherent inefficiencies of regex implementations in specific application components, such as servers or validators, allowing a single, small input to monopolize CPU cycles and halt operations. This makes ReDoS particularly insidious in software relying on user-supplied inputs for , as it exploits the gap between average-case efficiency and pathological worst-case behavior in backtracking-based engines.

Backtracking Mechanism

Backtracking in simulates the execution of a non-deterministic finite (NFA) through an input-directed , allowing the engine to handle in the by exploring multiple matching . The process begins at the NFA's initial , where the engine attempts to consume the input string symbol by symbol. For each state, if a direct match (e.g., a literal ) succeeds, it advances to the next state; however, when non-determinism arises—such as with alternatives (denoted by |) or quantifiers—the engine prioritizes one (typically the left or maximum repetition) and proceeds recursively. If the chosen path reaches a dead end (i.e., no further match is possible for the remaining input), the engine backtracks to the most recent choice point, restores the previous , and tries the next alternative, continuing until an accepting path is found or all possibilities are exhausted. This mechanism relies on maintaining a stack of states to enable backtracking, effectively turning the NFA simulation into a recursive traversal that retries failed branches. For instance, in handling unions, the engine first explores the initial alternative fully; upon failure, it unwinds the stack and shifts to the subsequent one. Similarly, for closures like Kleene stars (*), the engine recursively applies the body of the repetition, backtracking through iteration counts when the overall pattern cannot proceed. To avoid infinite loops from epsilon transitions (empty moves), many engines track visited states within a cycle before consuming input, ensuring progress. Greedy and lazy quantifiers play a key role in shaping the backtracking paths by dictating the order of repetition attempts. A quantifier, such as *, instructs the engine to match the maximum possible repetitions of its preceding element before advancing, committing to longer matches first and only by reducing the count one by one if later parts of the pattern fail. In contrast, a lazy quantifier, like *?, starts with the minimum (often zero) repetitions and incrementally increases them only when required for the overall match to succeed, reversing the sequence to favor shorter initial commitments. This difference in prioritization can significantly alter the depth and breadth of the search tree explored, though both ultimately rely on the same retry mechanism. Mathematically, manifests as a tree over the NFA's space, where each internal represents a partial match with pending choices, and edges denote transitions triggered by input consumption or alternatives. The is the starting , with branches for each non-deterministic option (e.g., quantifier iterations from maximum downward for cases), leading to leaves that are either accepting matches or failures. For with overlapping ambiguities, such as nested repetitions or alternatives, the tree's count can expand exponentially—proportional to the of repetition bounds in worst cases—as the engine exhaustively enumerates path combinations before concluding. This growth underscores the non-linear complexity inherent in simulations of NFAs. The backtracking approach traces its origins to Spencer's public-domain library developed in the , which introduced this NFA-based recursive method as an alternative to earlier (DFA) implementations. This library was integrated into Perl's regex engine around 1991, marking a pivotal adoption that emphasized flexibility for extended regex features over strict linear performance. The mechanism has since proliferated, forming the core of engines in languages like , which enumerates NFA paths in priority order per specifications, and , whose re module employs similar depth-first traversal for .

Vulnerabilities

Common Patterns

Common patterns vulnerable to ReDoS typically involve syntactic constructs in regular expressions that introduce ambiguity, allowing regex engines to explore an exponential number of matching paths on certain inputs. These patterns exploit the nondeterministic nature of the expressions, where multiple ways to consume the input string lead to redundant computations during the matching process. Among the most prevalent vulnerable patterns are nested quantifiers, such as , where inner repetitions can be grouped in various ways, creating overlapping possibilities for matching sequences of 'a' characters. Another common construct is optional groups with alternations, exemplified by , which permits non-greedy matching that branches into multiple partial matches for strings with repeated substrings. Overlapping subexpressions, such as quantified overlapping disjunctions like , further amplify this by allowing the engine to try numerous combinations of word characters and digits in ambiguous sequences. These patterns are characterized by their star height greater than one or quantified overlaps, which inherently support multiple valid parses of the input. The ambiguity in these patterns causes path explosion because backtracking engines, which attempt all possible ways to advance through the expression, generate a combinatorial number of execution paths. For instance, in a pattern like (a|a)* matching a string of 'a's followed by a non-match, the engine may explore up to \Theta(2^n) paths for an input of length n, as each position can be attributed to either branch of the alternation. This can be illustrated through a simplified pseudocode representation of a backtracking matcher:
function match(pattern, input, pos, state):
    if pos == len(input) and state is accepting:
        return true
    if no more transitions from state:
        return false
    for each possible transition from state:
        new_pos = pos + consumed_length(transition)
        if new_pos <= len(input) and match(pattern, input, new_pos, next_state(transition)):
            return true
    // Backtrack: try alternatives or rewind
    return false
In this recursive , ambiguous cause the to branch repeatedly, with each level potentially doubling the number of calls, leading to in the worst case. Studies indicate that such vulnerable patterns are widespread in open-source codebases. For example, an analysis of nearly 4,000 projects on found that while 42% of projects use regular expressions, a significant portion incorporate potentially vulnerable ones, with broader surveys estimating 10-20% of regexes across ecosystems like and as susceptible to super-linear behavior. In the ecosystem, approximately 1% of unique regexes exhibit super-linear complexity, yet they appear in over 13,000 modules, highlighting their prevalence despite low per-regex incidence. Similarly, examinations of programs revealed that about 20% of regexes are vulnerable. Differences in regex engine implementations exacerbate these risks. PCRE, a widely used backtracking engine compatible with Perl syntax, fully supports features like nested quantifiers and alternations, enabling the path explosion described above but at the cost of potential exponential runtime. In contrast, RE2 employs a linear-time automata-based approach without , rejecting ambiguous constructs like backreferences to guarantee [O(n](/page/O(n)) matching time, though this limits its expressiveness compared to PCRE.

Exploitation Examples

A classic illustration of a ReDoS vulnerability involves the regular expression ^(a+)+$, which intends to match one or more repetitions of one or more 'a' characters at the start and end of a string. When tested against an input like "aaaa!", the backtracking engine explores numerous failure paths due to the nested quantifiers + inside another +. For a smaller input such as "aa!", the trace begins with the engine greedily matching "aa" as a single a+ group within the outer (a+)+, then failing at the $ anchor upon encountering "!". It backtracks by reducing the inner a+ to "a" and attempting a second group with the remaining "a", but fails again at $. Further backtracking tries splitting into single "a" groups or other combinations, resulting in 5 total attempts; scaling to "aaaa!" expands this exponentially to over 15 attempts, demonstrating the quadratic blowup in computation. In practical code, such vulnerabilities often appear in input validation functions using nested or overlapping groups. For instance, a email validator employing the pattern /("[^"]*"|[^@])*@[^@]*/ can hang on crafted inputs with repeated quotes, as the engine backtracks across the alternatives [^"]* and [^@]* to find non-matches before the @. The following snippet exemplifies this:
javascript
const emailRegex = /("[^"]*"|[^@])*@[^@]*/;
function isValidEmail(email) {
  return emailRegex.test(email);
}
// Vulnerable: isValidEmail('""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@example.com');
// This input triggers extensive [backtracking](/page/Backtracking), potentially delaying execution by seconds or more.
This pattern, drawn from real-world usage, highlights how seemingly simple validation logic exposes applications to denial-of-service via user-supplied strings. Analysis of open-source repositories reveals widespread presence of such vulnerable patterns. A study of 865 popular modules on identified 161 (19%) containing super-linear regexes susceptible to ReDoS, often in parsing or validation routines. More recent systematic reviews confirm ReDoS as the fourth most common server-side vulnerability in packages from 2014 to 2023, with approximately 400 related CVEs disclosed across ecosystems, underscoring persistent risks in dependency chains despite growing awareness. Tools like safe-regex and ReDoSHunter have been applied in scans to flag these, revealing nested quantifiers as a frequent culprit in project codebases. In production environments, attackers deliver malicious inputs through common web channels to exploit these flaws. For example, crafted strings can be injected into HTTP headers like User-Agent or Content-Type, where modules such as ua-parser-js or charset process them with vulnerable regexes, causing server delays of up to minutes per request. Similarly, form submissions or payloads targeting input sanitization—such as email fields in forms or bodies—allow probes like repeated characters to trigger ; an analysis of 475 API-publishing domains found 6 vulnerable to such exploits, leading to patches in services from and AWS. These vectors enable low-effort denial-of-service by overwhelming single-threaded runtimes like with minimal payload sizes, often as small as 38 characters.

Impacts

Performance Effects

Regular Expression Denial of Service (ReDoS) exploits the mechanism in many regex engines, leading to in the worst case. In implementations, the engine explores multiple possible matches by trying different combinations of quantifiers and alternatives, which can result in an explosion of computation paths. For patterns with nested quantifiers, such as (a+)+b matched against a long string of 'a's without a trailing 'b', the number of steps grows exponentially with the input length n. This can be modeled as T(n) \approx c \cdot 2^d, where c is a constant representing the base cost per step, and d approximates the number of decision points (often proportional to n), yielding an overall O(2^n) complexity. Benchmarks illustrate this impact on modest hardware, such as a mid-2010s . For instance, a 30-character invalid input to a vulnerable like ^(.*?,){n}P can take 1.8 seconds to process, spiking CPU usage to 99%, while a valid input completes in 0.05 seconds. Extending the input by one character often doubles the runtime, escalating to several seconds for 31 characters and potentially hours for longer strings due to billions of steps—for a 20-character input, one engine requires over 3.6 million steps, and for 100 characters, the theoretical steps exceed $10^{18}. consumption also rises from stack frames for each backtrack level, potentially leading to stack overflows in languages like pre-5.10 . In multi-threaded applications, such as those using , a single ReDoS-triggering input blocks the event loop thread, causing widespread delays and service unavailability as other requests queue up. Performance graphs typically show versus input size as an exponential curve: near-linear for small n (e.g., milliseconds), but vertical escalation beyond a (e.g., seconds to minutes at n=20), contrasting sharply with safe patterns that remain flat. In comparison, linear-time alternatives like Thompson's NFA construction avoid altogether, simulating the NFA by tracking sets of states as the input is processed once, achieving O(m n) where m is the pattern length. This makes NFA-based engines, such as RE2, immune to ReDoS while handling the same inputs in microseconds even for large n, orders of magnitude faster than vulnerable in worst cases.

Real-World Incidents

One of the earliest prominent real-world ReDoS incidents occurred in July 2016, when experienced a 34-minute outage affecting its entire platform. The disruption was triggered by a user-submitted post containing a malicious string that exploited a vulnerable designed to trim whitespace, specifically ^[\s\u200c]+|[\s\u200c]+$, leading to excessive and CPU exhaustion on the servers. This event highlighted the risks of processing untrusted user input with complex regex patterns in high-traffic web applications, resulting in temporary unavailability for millions of users worldwide. In July 2019, Cloudflare encountered a major global outage lasting approximately 27 minutes, impacting a significant portion of the internet's traffic routed through its network. The incident stemmed from a newly deployed (WAF) rule incorporating a with catastrophic behavior, such as .*.*=, which caused full CPU utilization on edge servers handling HTTP/HTTPS requests. This affected millions of websites and services, underscoring the potential for ReDoS to cascade into widespread downtime when introduced in critical infrastructure components like content delivery networks. Following these high-profile cases, awareness of ReDoS has grown, particularly since , with automated security scanners increasingly identifying vulnerabilities in open-source supply chains. Security analyses indicate ReDoS ranks as the fourth most common server-side vulnerability class in JavaScript ecosystems such as . Hundreds of CVEs have been assigned to ReDoS across various libraries and frameworks as of , reflecting broader adoption of static analysis for regex auditing in software development pipelines. In 2024, ReDoS vulnerabilities continued to emerge in AI-related tools, exemplified by CVE-2024-12720 in the Transformers , versions up to 4.46.3. This flaw in the tokenizer's post_process_single() function in tokenization_nougat_fast.py allowed crafted inputs to trigger exponential , potentially causing denial-of-service in inference workflows. The vulnerability affected deployments relying on the library for understanding tasks, emphasizing ReDoS risks in emerging supply chains. As of 2025, ReDoS remains prevalent, with ongoing reports of vulnerabilities in diverse software ecosystems.

Mitigation

Design Strategies

To prevent Regular Expression Denial of Service (ReDoS) vulnerabilities, developers should follow principles that minimize or eliminate in regex patterns, particularly by avoiding constructs that lead to exponential . Key strategies include using groups, which prevent backtracking within a subpattern once it has matched, and quantifiers, which apply matching without allowing subsequent backtracking to release characters. These features, supported in engines like PCRE and Java's regex, ensure that quantified elements do not revisit prior matches, thereby bounding the execution time to linear in the input length for supported patterns. Additionally, nested unbounded repeats, such as (a+)+ or (a*)*, should be avoided as they introduce infinite and catastrophic backtracking; these are identified as high-risk anti-patterns like Star-3 in theoretical analyses of regex . Refactoring techniques transform ambiguous patterns into deterministic equivalents that execute in linear time without altering the intended matches. For instance, the nested repeat (a+)+ can be refactored to the simpler a+, eliminating the outer quantifier's potential while preserving behavior for strings of 'a' characters. Similarly, patterns with overlapping concatenations, such as a*(aa)* (), can be rewritten to a+ to remove redundant where multiple subpatterns generate overlapping languages. These refactors rely on checks via finite automata, ensuring no loss of expressiveness while preventing super-linear runtime; empirical studies show such revisions resolve over 70% of identified vulnerabilities in practice. Selecting regex engines with guaranteed linear-time performance is a foundational choice for ReDoS prevention. Google's RE2 library implements a approach that evaluates alternatives in parallel without , achieving O(m * n) where m is the regex and n is the input , and explicitly omits features like backreferences that enable exponential behavior. Similarly, Rust's regex crate compiles patterns to a Thompson NFA with lazy DFA evaluation, providing worst-case O(m * n) guarantees for searches and supporting limits on untrusted patterns to cap compilation overhead. These engines prioritize safety for production use, contrasting with backtracking-based libraries like PCRE, and are recommended for applications handling untrusted input. Testing practices should be integrated into the software development lifecycle (SDLC) to verify regex security proactively. Developers must include unit tests with large, adversarial inputs—such as strings exceeding 1,000 characters designed to trigger backtracking—to detect slowdowns exceeding linear scaling, often using timeouts to fail failing tests. Input length limits, enforced before regex evaluation (e.g., rejecting strings longer than a fixed threshold), serve as a simple first-line defense, proven effective in over 20% of historical vulnerability fixes by bounding resource usage. Embedding these tests in continuous integration pipelines ensures ongoing validation, with benchmarks on diverse inputs confirming linear performance.

Detection Tools

Static analyzers identify potential ReDoS vulnerabilities by examining patterns without executing them, often modeling depth through analysis of nested quantifiers, ambiguity in alternatives, and polynomial-time complexity bounds. Tools like use pattern-matching rules to flag vulnerable regexes, such as those with repeated capturing groups containing optional elements, supporting multiple languages including and . RegexStaticAnalysis employs static techniques to detect catastrophic in expressions like (ht|f)tp(s?)://[^\s]*, evaluating structural risks in real-world codebases. Similarly, RXXR2, an extension of earlier regex analyzers, uses pumping lemma-based to bound execution time and identify exponential blowups. Dynamic testing tools complement static methods by executing regexes against crafted inputs to measure runtime behavior and confirm vulnerabilities. Fuzzers such as regexploit generate adversarial strings heuristically to trigger excessive backtracking, providing proof-of-concept exploits for patterns like ^((mailto:)?[\w.%+-]+@[\w.-]+\.[\w]{2,20})?$. ReScue applies genetic algorithms to evolve input strings that maximize processing time, effectively discovering ReDoS triggers in non-trivial cases by iteratively mutating candidates based on fitness scores derived from execution duration. Benchmarks evaluating these tools show varying accuracy, with advanced analyzers like RENGAR achieving near-complete detection of known vulnerabilities—detecting all those found by nine prior tools plus 3 to 197 times more in large datasets—while maintaining low false positives through principled modeling of states. In comparative tests on benchmark sets of vulnerable expressions, static tools like RegexStaticAnalysis identified up to 46% of cases, though hybrid approaches often exceed 90% recall in recent studies. Many tools, including and CodeQL, integrate seamlessly with CI/CD pipelines via plugins for Actions or Jenkins, enabling automated scanning during code reviews to catch ReDoS risks in legacy codebases early.

References

  1. [1]
    Regular expression Denial of Service - ReDoS - OWASP Foundation
    An attacker can then cause a program using a Regular Expression (Regex) to enter these extreme situations and then hang for a very long time. Description.
  2. [2]
    Denial of Service via Algorithmic Complexity Attacks - USENIX
    Abstract: We present a new class of low-bandwidth denial of service attacks that exploit algorithmic deficiencies in many common applications' data structures.Missing: ReDoS | Show results with:ReDoS
  3. [3]
    Security Briefs - Regular Expression Denial of Service Attacks and ...
    In this article, I will describe what makes a regex vulnerable to these attacks. I will also present code for a Regex Fuzzer, a test utility designed to ...
  4. [4]
    The impact of regular expression denial of service (ReDoS) in practice
    In this paper, we empirically study three major aspects of ReDoS that have hitherto been unexplored: the incidence of super-linear regexes in practice.Missing: explanation | Show results with:explanation
  5. [5]
  6. [6]
    Security '03 - Work-in-Progress Reports - USENIX
    Denial of Service through Regular Expressions. Scott Crosby, Rice University scrosby at cs.rice.edu ... Use our Contacts page. Last changed: 11 Aug. 2003 ...<|control11|><|separator|>
  7. [7]
    [PDF] Analyzing Catastrophic Backtracking Behavior in Practical Regular ...
    NFA matchers make use of an input-directed depth-first search on an NFA, and thus the matching performed by NFA engines is referred to as backtracking matching.
  8. [8]
    [PDF] Regulator: Dynamic Analysis to Detect ReDoS - USENIX
    Nov 8, 2021 · Spencer-style regular expression matchers are commonly called “backtracking” because the depth-first traversal back- tracks upon reaching a no- ...Missing: mechanism explanation
  9. [9]
    Linear Matching of JavaScript Regular Expressions
    Backtracking engines match regular expressions by enumerating all paths of the corresponding NFA in order of priority and returning the first accepting path.Missing: mechanism | Show results with:mechanism
  10. [10]
    Regular Expression Matching Can Be Simple And Fast
    Henry Spencer reimplemented the Eighth Edition library interface from scratch, but using backtracking, and released his implementation into the public domain. ...
  11. [11]
    [PDF] Static Detection of DoS Vulnerabilities in Programs that use Regular ...
    A prominent algorithmic complexity attack is regular expression denial-of-service (ReDoS), in which the attacker exploits a vulnerable regular expression by ...<|control11|><|separator|>
  12. [12]
    [PDF] The Impact of Regular Expression Denial of Service (ReDoS) in ...
    ReDoS attacks were first proposed by Crosby in 2003 [23]. In the 15 years since then we have seen advances in detecting SL regexes [34, 37, 38, 47, 51, 55] as ...Missing: coined | Show results with:coined
  13. [13]
    [PDF] Sound Static Analysis of Regular Expressions for Vulnerabilities to ...
    Jun 1, 2022 · ReDoS attacks are vastly underestimated Denial of Service (DoS) attacks. In a recent study of regexes usage, in nearly 4,000 Python projects on ...
  14. [14]
    Regular Expression Matching in the Wild
    We originally planned to use PCRE for the regular expression search, until we realized that it used a backtracking algorithm, meaning it is easy to make ...Step 3: Compile · Step 4: Match · Does This Regexp Match This...<|control11|><|separator|>
  15. [15]
  16. [16]
    A comprehensive guide to the dangers of Regular Expressions in ...
    Sep 28, 2023 · Any of your regular expressions may be vulnerable to ReDoS, so go check up on your regular expressions and let me know if they are all OK.
  17. [17]
    [PDF] A Study of ReDoS Vulnerabilities in JavaScript-based Web Servers
    Aug 15, 2018 · Crosby and Dan S. Wallach. Denial of service via algorithmic complexity attacks. In Pro- ceedings of the 12th USENIX Security Symposium,. 2003.
  18. [18]
    [PDF] A Literature and Engineering Review of Regular Expression Denial ...
    In this paper, we describe the existing knowledge on ReDoS. We first provide a systematic literature review, discussing approaches for detecting, preventing, ...
  19. [19]
    [PDF] Exploiting Input Sanitization for Regex Denial of Service
    In this paper, we conduct the first black-box study measuring the extent of ReDoS vulnerabilities in live web services. We apply the Consistent Sanitization ...
  20. [20]
    Catastrophic Backtracking - Runaway Regular Expressions
    When y fails, the regex engine backtracks. The group has one iteration it can backtrack into. The second x+ matched only one x, so it can't backtrack.
  21. [21]
    The Explosive Quantifier Trap - RexEgg
    From a computational standpoint, this exponential growth is a nightmare. For you big-O geeks out there, the complexity of exploring all the combinations is O(2n) ...
  22. [22]
    What is Regular Expression Denial of Service (ReDoS)? - Imperva
    ReDoS is a form of DoS attack exploiting flaws in regular expressions (regex), which are patterns used to match character combinations in strings.
  23. [23]
    ReDoS | Tutorial & Examples - Snyk Learn
    A ReDoS attack attempts to slow down or even render an application unavailable. It is attacked the A as in Availability in the famous CIA triad of ...
  24. [24]
    ReDoS — Denial of Service by RegEx - InfoSec Write-ups
    Mar 7, 2022 · An attacker can craft input to a vulnerable regular expression which causes the time to check the input for the regex to be way longer than expected.
  25. [25]
    Details of the Cloudflare outage on July 2, 2019
    Jul 12, 2019 · On July 2, we deployed a new rule in our WAF Managed Rules that caused CPUs to become exhausted on every CPU core that handles HTTP/HTTPS traffic on the ...What Happened · How Cloudflare Operates · Waf Threats
  26. [26]
    How Regular Expressions and a WAF DoS-ed Cloudflare - Acunetix
    Jul 29, 2019 · Cloudflare relies on regular expressions to build filtering rules. Regular expressions provide a powerful means to filter information for potential threats.Missing: ReDoS | Show results with:ReDoS
  27. [27]
    ReDoS vulnerabilities in npm spikes by 143% and XSS continues to grow | Snyk
    ### Summary of ReDoS Vulnerabilities in npm Packages (2020 Onwards)
  28. [28]
    ReDoS Vulnerabilities - CVE
    A security flaw has been discovered in mixmark-io turndown up to 7.2.1. This affects an unknown function of the file src/commonmark-rules.js.<|separator|>
  29. [29]
  30. [30]
    transformers - CVE-2024-12720 · GitHub Advisory Database
    Mar 20, 2025 · A Regular Expression Denial of Service (ReDoS) vulnerability was identified in the huggingface/transformers library, specifically in the ...
  31. [31]
    [PDF] Theory and Patterns for Avoiding Regex Denial of Service
    May 4, 2022 · [27] Scott Crosby. Denial of service through regular expressions. USENIX Security work in progress report, 2003. [28] Scott A Crosby and Dan ...
  32. [32]
    A Literature and Engineering Review of Regular Expression Denial ...
    Aug 24, 2025 · Regular Expression Denial of Service (ReDoS) is a vulnerability class that has become prominent in recent years. Attackers can weaponize such ...
  33. [33]
    The Impact of Regular Expression Denial of Service (ReDoS) in ...
    Regular expressions (regexes) are a popular and powerful means of automatically manipulating text. Regexes are also an understud- ied denial of service vector ( ...Missing: explanation | Show results with:explanation
  34. [34]
  35. [35]
    regex - Rust - Docs.rs
    The regex crate is on crates.io and can be used by adding regex to your dependencies in your project's Cargo.toml . Or more simply, just run cargo add regex .Missing: safe | Show results with:safe
  36. [36]
    [PDF] A Combined Static and Dynamic Approach for Regular Expression ...
    Aug 11, 2021 · Regular expression Denial of Service (ReDoS) is a class of algorithmic complexity attacks using the regular expressions.Missing: mechanism | Show results with:mechanism
  37. [37]
    detect-redos | Semgrep
    Dec 13, 2024 · Detected the use of a regular expression `$REDOS` which appears to be vulnerable to a Regular expression Denial-of-Service (ReDoS).
  38. [38]
    A Comparison of Tools to Detect ReDoS-vulnerable Expressions
    Jul 19, 2025 · I tested out the following unique tools: semgrep · safe-regex · safe-regex2 · regexploit · seccamp-redos · RegexStaticAnalysis · redos-detector ...Missing: static analyzers
  39. [39]
    [PDF] Effective ReDoS Detection by Principled Vulnerability Modeling and ...
    Compared with nine state-of-the-art tools, RENGAR detects not only all vulnerable regexes they found but also 3 – 197 times more vulnerable regexes. Besides, it ...
  40. [40]
    doyensec/regexploit: Find regular expressions which are ... - GitHub
    Mar 11, 2021 · This tool is designed to: find regular expressions which are vulnerable to ReDoS; give an example malicious string which will cause catastrophic ...
  41. [41]
    [PDF] REVEALER: Detecting and Exploiting Regular Expression Denial-of ...
    In this paper, we aim to tackle the challenge of automatically detecting and exploiting ReDoS vulnerabilities in extended regexes. We take a hybrid approach ...