Skip to content

Commit 09e4c78

Browse files
committed
New XSS sink - writing to innerHTML using the Angular Renderer2 API
1 parent 3b2e55b commit 09e4c78

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,26 @@ module DomBasedXss {
251251
}
252252
}
253253

254+
/**
255+
* A write to the `innerHTML` property of a DOM element, viewed as an XSS sink.
256+
*
257+
* Uses the Angular Renderer2 API, instead of the default `Element.innerHTML` property.
258+
*/
259+
class AngularRender2SetPropertyInnerHtmlSink extends Sink {
260+
AngularRender2SetPropertyInnerHtmlSink() {
261+
exists(API::CallNode setProperty |
262+
setProperty =
263+
API::moduleImport("@angular/core")
264+
.getMember("Renderer2")
265+
.getInstance()
266+
.getMember("setProperty")
267+
.getACall() and
268+
this = setProperty.getParameter(2).asSink() and
269+
setProperty.getParameter(1).asSink().asExpr().(StringLiteral).getValue() = "innerHTML"
270+
)
271+
}
272+
}
273+
254274
/**
255275
* A value being piped into the `safe` pipe in a template file,
256276
* disabling subsequent HTML escaping.

0 commit comments

Comments
 (0)