@@ -5,6 +5,7 @@ import semmle.code.java.frameworks.Servlets
55import semmle.code.java.frameworks.android.WebView
66import semmle.code.java.frameworks.spring.SpringController
77import semmle.code.java.frameworks.spring.SpringHttp
8+ import semmle.code.java.frameworks.javaee.jsf.JSFRenderer
89import semmle.code.java.dataflow.DataFlow
910import semmle.code.java.dataflow.TaintTracking2
1011import semmle.code.java.dataflow.ExternalFlow
@@ -40,7 +41,7 @@ private class DefaultXssSink extends XssSink {
4041 DefaultXssSink ( ) {
4142 sinkNode ( this , "xss" )
4243 or
43- exists ( ServletWriterSourceToWritingMethodFlowConfig writer , MethodAccess ma |
44+ exists ( XssVulnerableWriterSourceToWritingMethodFlowConfig writer , MethodAccess ma |
4445 ma .getMethod ( ) instanceof WritingMethod and
4546 writer .hasFlowToExpr ( ma .getQualifier ( ) ) and
4647 this .asExpr ( ) = ma .getArgument ( _)
@@ -101,12 +102,14 @@ private class DefaultXSSSanitizer extends XssSanitizer {
101102}
102103
103104/** A configuration that tracks data from a servlet writer to an output method. */
104- private class ServletWriterSourceToWritingMethodFlowConfig extends TaintTracking2:: Configuration {
105- ServletWriterSourceToWritingMethodFlowConfig ( ) {
106- this = "XSS::ServletWriterSourceToWritingMethodFlowConfig "
105+ private class XssVulnerableWriterSourceToWritingMethodFlowConfig extends TaintTracking2:: Configuration {
106+ XssVulnerableWriterSourceToWritingMethodFlowConfig ( ) {
107+ this = "XSS::XssVulnerableWriterSourceToWritingMethodFlowConfig "
107108 }
108109
109- override predicate isSource ( DataFlow:: Node src ) { src .asExpr ( ) instanceof ServletWriterSource }
110+ override predicate isSource ( DataFlow:: Node src ) {
111+ src .asExpr ( ) instanceof XssVulnerableWriterSource
112+ }
110113
111114 override predicate isSink ( DataFlow:: Node sink ) {
112115 exists ( MethodAccess ma |
@@ -128,9 +131,9 @@ private class WritingMethod extends Method {
128131 }
129132}
130133
131- /** An output stream or writer that writes to a servlet response. */
132- class ServletWriterSource extends MethodAccess {
133- ServletWriterSource ( ) {
134+ /** An output stream or writer that writes to a servlet, JSP or JSF response. */
135+ class XssVulnerableWriterSource extends MethodAccess {
136+ XssVulnerableWriterSource ( ) {
134137 this .getMethod ( ) instanceof ServletResponseGetWriterMethod
135138 or
136139 this .getMethod ( ) instanceof ServletResponseGetOutputStreamMethod
@@ -139,9 +142,18 @@ class ServletWriterSource extends MethodAccess {
139142 m .getDeclaringType ( ) .getQualifiedName ( ) = "javax.servlet.jsp.JspContext" and
140143 m .getName ( ) = "getOut"
141144 )
145+ or
146+ this .getMethod ( ) instanceof FacesGetResponseWriterMethod
147+ or
148+ this .getMethod ( ) instanceof FacesGetResponseStreamMethod
142149 }
143150}
144151
152+ /**
153+ * DEPRECATED: Use `XssVulnerableWriterSource` instead.
154+ */
155+ deprecated class ServletWriterSource = XssVulnerableWriterSource ;
156+
145157/**
146158 * Holds if `s` is an HTTP Content-Type vulnerable to XSS.
147159 */
0 commit comments