@@ -31,33 +31,27 @@ class PrintStackTraceMethod extends Method {
3131 }
3232}
3333
34- class ServletWriterSourceToPrintStackTraceMethodFlowConfig extends TaintTracking:: Configuration {
35- ServletWriterSourceToPrintStackTraceMethodFlowConfig ( ) {
36- this = "StackTraceExposure::ServletWriterSourceToPrintStackTraceMethodFlowConfig"
37- }
38-
39- override predicate isSource ( DataFlow:: Node src ) {
40- src .asExpr ( ) instanceof XssVulnerableWriterSource
41- }
34+ module ServletWriterSourceToPrintStackTraceMethodFlowConfig implements DataFlow:: ConfigSig {
35+ predicate isSource ( DataFlow:: Node src ) { src .asExpr ( ) instanceof XssVulnerableWriterSource }
4236
43- override predicate isSink ( DataFlow:: Node sink ) {
37+ predicate isSink ( DataFlow:: Node sink ) {
4438 exists ( MethodAccess ma |
4539 sink .asExpr ( ) = ma .getAnArgument ( ) and ma .getMethod ( ) instanceof PrintStackTraceMethod
4640 )
4741 }
4842}
4943
44+ module ServletWriterSourceToPrintStackTraceMethodFlow =
45+ TaintTracking:: Make< ServletWriterSourceToPrintStackTraceMethodFlowConfig > ;
46+
5047/**
5148 * A call that uses `Throwable.printStackTrace()` on a stream that is connected
5249 * to external output.
5350 */
5451predicate printsStackToWriter ( MethodAccess call ) {
55- exists (
56- ServletWriterSourceToPrintStackTraceMethodFlowConfig writerSource ,
57- PrintStackTraceMethod printStackTrace
58- |
52+ exists ( PrintStackTraceMethod printStackTrace |
5953 call .getMethod ( ) = printStackTrace and
60- writerSource . hasFlowToExpr ( call .getAnArgument ( ) )
54+ ServletWriterSourceToPrintStackTraceMethodFlow :: hasFlowToExpr ( call .getAnArgument ( ) )
6155 )
6256}
6357
@@ -86,16 +80,15 @@ predicate stackTraceExpr(Expr exception, MethodAccess stackTraceString) {
8680 )
8781}
8882
89- class StackTraceStringToHttpResponseSinkFlowConfig extends TaintTracking:: Configuration {
90- StackTraceStringToHttpResponseSinkFlowConfig ( ) {
91- this = "StackTraceExposure::StackTraceStringToHttpResponseSinkFlowConfig"
92- }
93-
94- override predicate isSource ( DataFlow:: Node src ) { stackTraceExpr ( _, src .asExpr ( ) ) }
83+ module StackTraceStringToHttpResponseSinkFlowConfig implements DataFlow:: ConfigSig {
84+ predicate isSource ( DataFlow:: Node src ) { stackTraceExpr ( _, src .asExpr ( ) ) }
9585
96- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof InformationLeakSink }
86+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof InformationLeakSink }
9787}
9888
89+ module StackTraceStringToHttpResponseSinkFlow =
90+ TaintTracking:: Make< StackTraceStringToHttpResponseSinkFlowConfig > ;
91+
9992/**
10093 * A write of stack trace data to an external stream.
10194 */
@@ -109,9 +102,10 @@ predicate printsStackExternally(MethodAccess call, Expr stackTrace) {
109102 * A stringified stack trace flows to an external sink.
110103 */
111104predicate stringifiedStackFlowsExternally ( DataFlow:: Node externalExpr , Expr stackTrace ) {
112- exists ( MethodAccess stackTraceString , StackTraceStringToHttpResponseSinkFlowConfig conf |
105+ exists ( MethodAccess stackTraceString |
113106 stackTraceExpr ( stackTrace , stackTraceString ) and
114- conf .hasFlow ( DataFlow:: exprNode ( stackTraceString ) , externalExpr )
107+ StackTraceStringToHttpResponseSinkFlow:: hasFlow ( DataFlow:: exprNode ( stackTraceString ) ,
108+ externalExpr )
115109 )
116110}
117111
0 commit comments