Fix: Denial of Service (Stack Overflow & O(N^2) CPU) in OptionConverter #590
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.
Summary
I identified a Denial of Service vulnerability in
OptionConverter::substVars.The component handles variable substitution (e.g.,
${key}) recursively.The Issues:
substVarsSafelyis recursive but had no depth limit. A configuration with deeply nested variables (e.g., 20,000 levels) caused a Segmentation Fault.LogStringChain) that required traversing the parent chain at every step, resulting in O(N^2) complexity.The Fix:
I refactored the internal
substVarsSafelyfunction:LogStringChainlinked list with astd::vector<LogString>for history tracking (faster lookup).MAX_SUBST_DEPTH(20). If recursion exceeds this depth, it stops and logs a warning, preventing the crash.