fix: DOM text reinterpreted as HTML Improper Neutralization of Input Cross-site Scripting #1610
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.
mongo/src/third_party/wiredtiger/src/docs/style/header-web.html
Line 42 in 0a68308
Extracting text from a DOM node and interpreting it as HTML can lead to a cross-site scripting vulnerability. A webpage with this vulnerability reads text from the DOM, and afterwards adds the text as HTML to the DOM. Using text from the DOM as HTML effectively unescapes the text, and thereby invalidates any escaping done on the text. If an attacker is able to control the safe sanitized text, then this vulnerability can be exploited to perform a cross-site scripting attack.
POC
The following vulnerable shows a webpage using a
data-targetattribute to select and manipulate a DOM element using the JQuery library. In thedata-targetattribute is read into thetargetvariable, and the$function is then supposed to use thetargetvariable as a CSS selector to determine which element should be manipulated.However, if an attacker can control the
data-targetattribute, then the value oftargetcan be used to cause the$function to execute arbitrary JavaScript.The above vulnerability can be fixed by using
$.findinstead of$. The$.findfunction will only interprettargetas a CSS selector and never as HTML, thereby preventing an XSS attack.References