@@ -16,6 +16,7 @@ import java
1616import semmle.code.java.dataflow.DataFlow
1717import semmle.code.java.dataflow.TaintTracking
1818import semmle.code.java.security.XSS
19+ import semmle.code.java.security.InformationLeak
1920
2021/**
2122 * One of the `printStackTrace()` overloads on `Throwable`.
@@ -83,14 +84,17 @@ predicate stackTraceExpr(Expr exception, MethodAccess stackTraceString) {
8384 )
8485}
8586
86- class StackTraceStringToXssSinkFlowConfig extends TaintTracking:: Configuration {
87- StackTraceStringToXssSinkFlowConfig ( ) {
88- this = "StackTraceExposure::StackTraceStringToXssSinkFlowConfig "
87+ class StackTraceStringToHTTPResponseSinkFlowConfig extends TaintTracking:: Configuration {
88+ StackTraceStringToHTTPResponseSinkFlowConfig ( ) {
89+ this = "StackTraceExposure::StackTraceStringToHTTPResponseSinkFlowConfig "
8990 }
9091
9192 override predicate isSource ( DataFlow:: Node src ) { stackTraceExpr ( _, src .asExpr ( ) ) }
9293
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+ }
9498}
9599
96100/**
@@ -106,7 +110,7 @@ predicate printsStackExternally(MethodAccess call, Expr stackTrace) {
106110 * A stringified stack trace flows to an external sink.
107111 */
108112predicate stringifiedStackFlowsExternally ( XssSink externalExpr , Expr stackTrace ) {
109- exists ( MethodAccess stackTraceString , StackTraceStringToXssSinkFlowConfig conf |
113+ exists ( MethodAccess stackTraceString , StackTraceStringToHTTPResponseSinkFlowConfig conf |
110114 stackTraceExpr ( stackTrace , stackTraceString ) and
111115 conf .hasFlow ( DataFlow:: exprNode ( stackTraceString ) , externalExpr )
112116 )
0 commit comments