@@ -16,6 +16,7 @@ import java
16
16
import semmle.code.java.dataflow.DataFlow
17
17
import semmle.code.java.dataflow.TaintTracking
18
18
import semmle.code.java.security.XSS
19
+ import semmle.code.java.security.InformationLeak
19
20
20
21
/**
21
22
* One of the `printStackTrace()` overloads on `Throwable`.
@@ -83,14 +84,17 @@ predicate stackTraceExpr(Expr exception, MethodAccess stackTraceString) {
83
84
)
84
85
}
85
86
86
- class StackTraceStringToXssSinkFlowConfig extends TaintTracking:: Configuration {
87
- StackTraceStringToXssSinkFlowConfig ( ) {
88
- this = "StackTraceExposure::StackTraceStringToXssSinkFlowConfig "
87
+ class StackTraceStringToHTTPResponseSinkFlowConfig extends TaintTracking:: Configuration {
88
+ StackTraceStringToHTTPResponseSinkFlowConfig ( ) {
89
+ this = "StackTraceExposure::StackTraceStringToHTTPResponseSinkFlowConfig "
89
90
}
90
91
91
92
override predicate isSource ( DataFlow:: Node src ) { stackTraceExpr ( _, src .asExpr ( ) ) }
92
93
93
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof XssSink }
94
+ override predicate isSink ( DataFlow:: Node sink ) {
95
+ sink instanceof XssSink or
96
+ sink instanceof InformationLeakSink
97
+ }
94
98
}
95
99
96
100
/**
@@ -106,7 +110,7 @@ predicate printsStackExternally(MethodAccess call, Expr stackTrace) {
106
110
* A stringified stack trace flows to an external sink.
107
111
*/
108
112
predicate stringifiedStackFlowsExternally ( XssSink externalExpr , Expr stackTrace ) {
109
- exists ( MethodAccess stackTraceString , StackTraceStringToXssSinkFlowConfig conf |
113
+ exists ( MethodAccess stackTraceString , StackTraceStringToHTTPResponseSinkFlowConfig conf |
110
114
stackTraceExpr ( stackTrace , stackTraceString ) and
111
115
conf .hasFlow ( DataFlow:: exprNode ( stackTraceString ) , externalExpr )
112
116
)
0 commit comments