11/** Definitions for the sensitive result receiver query. */
22
33import java
4- import semmle.code.java.dataflow.TaintTracking2
4+ import semmle.code.java.dataflow.TaintTracking
5+ private import semmle.code.java.dataflow.TaintTracking2
56import semmle.code.java.dataflow.FlowSources
67import semmle.code.java.security.SensitiveActions
78
@@ -31,6 +32,25 @@ private predicate untrustedResultReceiverSend(DataFlow::Node src, ResultReceiver
3132 UntrustedResultReceiverFlow:: flow ( src , DataFlow:: exprNode ( call .getReceiver ( ) ) )
3233}
3334
35+ deprecated private class SensitiveResultReceiverConf extends TaintTracking:: Configuration {
36+ SensitiveResultReceiverConf ( ) { this = "SensitiveResultReceiverConf" }
37+
38+ override predicate isSource ( DataFlow:: Node node ) { node .asExpr ( ) instanceof SensitiveExpr }
39+
40+ override predicate isSink ( DataFlow:: Node node ) {
41+ exists ( ResultReceiverSendCall call |
42+ untrustedResultReceiverSend ( _, call ) and
43+ node .asExpr ( ) = call .getSentData ( )
44+ )
45+ }
46+
47+ override predicate allowImplicitRead ( DataFlow:: Node node , DataFlow:: ContentSet c ) {
48+ super .allowImplicitRead ( node , c )
49+ or
50+ this .isSink ( node )
51+ }
52+ }
53+
3454module SensitiveResultReceiverConfig implements DataFlow:: ConfigSig {
3555 predicate isSource ( DataFlow:: Node node ) { node .asExpr ( ) instanceof SensitiveExpr }
3656
@@ -54,13 +74,8 @@ module SensitiveResultReceiverFlow = TaintTracking::Global<SensitiveResultReceiv
5474deprecated predicate sensitiveResultReceiver (
5575 DataFlow:: PathNode src , DataFlow:: PathNode sink , DataFlow:: Node recSrc
5676) {
57- exists (
58- ResultReceiverSendCall call , SensitiveResultReceiverFlow:: PathNode srrSrc ,
59- SensitiveResultReceiverFlow:: PathNode srrSink
60- |
61- src .getNode ( ) = srrSrc .getNode ( ) and sink .getNode ( ) = srrSink .getNode ( )
62- |
63- SensitiveResultReceiverFlow:: flowPath ( srrSrc , srrSink ) and
77+ exists ( ResultReceiverSendCall call |
78+ any ( SensitiveResultReceiverConf c ) .hasFlowPath ( src , sink ) and
6479 sink .getNode ( ) .asExpr ( ) = call .getSentData ( ) and
6580 untrustedResultReceiverSend ( recSrc , call )
6681 )
0 commit comments