github / github/codeql

[C#] Improve "isExponentialRegex" detection logic in ReDoSQuery.qll to prevent false negatives

未關閉
#22,183 3 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視
question
主要語言
CodeQL
星號
10.1k
分支
2.1k
平均合併
2 天 15 小時
30 天內合併 PR
141

描述

Hello,

In the C# security analysis suite, the query `Denial of Service from comparison of user input against expensive regex` (`cs/redos`) relies heavily on underlying helper logic to flag regular expressions with potential exponential behavior. Specifically, in `csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll` (lines 58–72). This uses a set of hardcoded regular expressions via `regexpMatch` to identify string literals that represent exponential (ReDoS-vulnerable) regular expressions.

While these three variations catch patterns like `([a-z]+.)+`, they are fragile syntactic approximations. This approach misses variations of overlapping or nested quantifiers, creating a scenario where dangerous regex structures easily bypass the query's detection due to minor structural variations.

For example the query overlooks risky patterns like these:
- Nested Quantifiers without literals: `(a*)*b or (x+)*`
- Overlapping Alternations/Sequences: `(x+x+)+y`
- Complex or Distant Structural Paths: Patterns that contain non-trivial prefixes/suffixes or specific character class structures can fail to match the strict capture-group structures defined in the QL code. Depending on the engine evaluating these meta-regexes, they could themselves face performance degradation when scanning highly complex, non-matching input paths.

This issue stood out because these specific pattern variants can easily slip through the ReDoS query undetected. This creates a gap between the security results and the actual risk. I'm wondering if it would be possible address this in a future version?

Version: 2.26.0

貢獻指南

開啟貢獻指南

研究方向

Start with csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll, especially lines 58–72, and trace how the cs/redos query uses isExponentialRegex and regexpMatch. Compare the existing matching logic with the listed nested-quantifier and overlapping-alternation examples. Done means the query detects these variants without losing its existing coverage or introducing problematic matching behavior.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
csharp
領域
security
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。