Sentinel: [HIGH] Fix ReDoS vulnerability in matchPatternToRegExp #61
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Sentinel: [HIGH] Fix ReDoS vulnerability in matchPatternToRegExp
🚨 Severity: HIGH
💡 Vulnerability: The
matchPatternToRegExpfunction was vulnerable to Regular Expression Denial of Service (ReDoS). It converted glob patterns (specifically the path component) into regex by replacing*with.*. A pattern like*a*a*a...would generate a regex with exponential backtracking complexity on mismatch.🎯 Impact: An attacker who can influence the
excludesettings (via sync storage or social engineering) could provide a malicious pattern that hangs the background service worker, effectively disabling the extension and potentially freezing the browser process.🔧 Fix: Replaced the regex-based matching with a custom
matchesPatternfunction. This function parses the URL using theURLAPI and implements a linear-time O(N) matching algorithm for the path component, ensuring safe execution regardless of input.✅ Verification: Verified using a reproduction script that the original code took >250s for a malicious input, while the new code executes in <1ms. Correctness was also verified against standard match patterns.
PR created automatically by Jules for task 7758767739022378649 started by @NDevTK