@@ -31,33 +31,27 @@ class PrintStackTraceMethod extends Method {
31
31
}
32
32
}
33
33
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 }
42
36
43
- override predicate isSink ( DataFlow:: Node sink ) {
37
+ predicate isSink ( DataFlow:: Node sink ) {
44
38
exists ( MethodAccess ma |
45
39
sink .asExpr ( ) = ma .getAnArgument ( ) and ma .getMethod ( ) instanceof PrintStackTraceMethod
46
40
)
47
41
}
48
42
}
49
43
44
+ module ServletWriterSourceToPrintStackTraceMethodFlow =
45
+ TaintTracking:: Make< ServletWriterSourceToPrintStackTraceMethodFlowConfig > ;
46
+
50
47
/**
51
48
* A call that uses `Throwable.printStackTrace()` on a stream that is connected
52
49
* to external output.
53
50
*/
54
51
predicate printsStackToWriter ( MethodAccess call ) {
55
- exists (
56
- ServletWriterSourceToPrintStackTraceMethodFlowConfig writerSource ,
57
- PrintStackTraceMethod printStackTrace
58
- |
52
+ exists ( PrintStackTraceMethod printStackTrace |
59
53
call .getMethod ( ) = printStackTrace and
60
- writerSource . hasFlowToExpr ( call .getAnArgument ( ) )
54
+ ServletWriterSourceToPrintStackTraceMethodFlow :: hasFlowToExpr ( call .getAnArgument ( ) )
61
55
)
62
56
}
63
57
@@ -86,16 +80,15 @@ predicate stackTraceExpr(Expr exception, MethodAccess stackTraceString) {
86
80
)
87
81
}
88
82
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 ( ) ) }
95
85
96
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof InformationLeakSink }
86
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof InformationLeakSink }
97
87
}
98
88
89
+ module StackTraceStringToHttpResponseSinkFlow =
90
+ TaintTracking:: Make< StackTraceStringToHttpResponseSinkFlowConfig > ;
91
+
99
92
/**
100
93
* A write of stack trace data to an external stream.
101
94
*/
@@ -109,9 +102,10 @@ predicate printsStackExternally(MethodAccess call, Expr stackTrace) {
109
102
* A stringified stack trace flows to an external sink.
110
103
*/
111
104
predicate stringifiedStackFlowsExternally ( DataFlow:: Node externalExpr , Expr stackTrace ) {
112
- exists ( MethodAccess stackTraceString , StackTraceStringToHttpResponseSinkFlowConfig conf |
105
+ exists ( MethodAccess stackTraceString |
113
106
stackTraceExpr ( stackTrace , stackTraceString ) and
114
- conf .hasFlow ( DataFlow:: exprNode ( stackTraceString ) , externalExpr )
107
+ StackTraceStringToHttpResponseSinkFlow:: hasFlow ( DataFlow:: exprNode ( stackTraceString ) ,
108
+ externalExpr )
115
109
)
116
110
}
117
111
0 commit comments