@@ -7,7 +7,7 @@ private import semmle.code.java.security.InformationLeak
77/**
88 * One of the `printStackTrace()` overloads on `Throwable`.
99 */
10- private class PrintStackTraceMethod extends Method {
10+ class PrintStackTraceMethod extends Method {
1111 PrintStackTraceMethod ( ) {
1212 this .getDeclaringType ( )
1313 .getSourceDeclaration ( )
@@ -17,7 +17,11 @@ private class PrintStackTraceMethod extends Method {
1717 }
1818}
1919
20- private module ServletWriterSourceToPrintStackTraceMethodFlowConfig implements DataFlow:: ConfigSig {
20+ /**
21+ * Flow configuration for xss vulnerable writer source flowing to `Throwable.printStackTrace()` on
22+ * a stream that is connected to external output.
23+ */
24+ module ServletWriterSourceToPrintStackTraceMethodFlowConfig implements DataFlow:: ConfigSig {
2125 predicate isSource ( DataFlow:: Node src ) { src instanceof XssVulnerableWriterSourceNode }
2226
2327 predicate isSink ( DataFlow:: Node sink ) {
@@ -55,7 +59,10 @@ private predicate printWriterOnStringWriter(Expr printWriter, Variable stringWri
5559 )
5660}
5761
58- private predicate stackTraceExpr ( Expr exception , MethodCall stackTraceString ) {
62+ /**
63+ * Holds if `stackTraceString` writes the stack trace from `exception` to a string.
64+ */
65+ predicate stackTraceExpr ( Expr exception , MethodCall stackTraceString ) {
5966 exists ( Expr printWriter , Variable stringWriterVar , MethodCall printStackCall |
6067 printWriterOnStringWriter ( printWriter , stringWriterVar ) and
6168 printStackCall .getMethod ( ) instanceof PrintStackTraceMethod and
@@ -66,7 +73,8 @@ private predicate stackTraceExpr(Expr exception, MethodCall stackTraceString) {
6673 )
6774}
6875
69- private module StackTraceStringToHttpResponseSinkFlowConfig implements DataFlow:: ConfigSig {
76+ /** Flow configuration for stack trace flowing to http response. */
77+ module StackTraceStringToHttpResponseSinkFlowConfig implements DataFlow:: ConfigSig {
7078 predicate isSource ( DataFlow:: Node src ) { stackTraceExpr ( _, src .asExpr ( ) ) }
7179
7280 predicate isSink ( DataFlow:: Node sink ) { sink instanceof InformationLeakSink }
0 commit comments