@@ -67,26 +67,37 @@ private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event)
6767 * Gets a reference to a DataTransfer object.
6868 * https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData
6969 */
70- private DataFlow:: SourceNode taintedDataTransfer ( DataFlow:: TypeTracker t ) {
70+ private DataFlow:: SourceNode taintedDataTransfer ( DataFlow:: TypeTracker t , string event ) {
7171 t .start ( ) and
72- result = taintedEvent ( DataFlow:: TypeTracker:: end ( ) , "paste" ) .getAPropertyRead ( "clipboardData" )
72+ result = taintedEvent ( DataFlow:: TypeTracker:: end ( ) , event ) .getAPropertyRead ( "clipboardData" ) and
73+ event = "paste"
7374 or
7475 t .start ( ) and
75- result =
76- taintedEvent ( DataFlow:: TypeTracker:: end ( ) , [ "drop" , "beforeinput" ] )
77- .getAPropertyRead ( "dataTransfer" )
76+ result = taintedEvent ( DataFlow:: TypeTracker:: end ( ) , event ) .getAPropertyRead ( "dataTransfer" ) and
77+ event = [ "drop" , "beforeinput" ]
7878 or
79- exists ( DataFlow:: TypeTracker t2 | result = taintedDataTransfer ( t2 ) .track ( t2 , t ) )
79+ exists ( DataFlow:: TypeTracker t2 | result = taintedDataTransfer ( t2 , event ) .track ( t2 , t ) )
8080}
8181
8282/**
8383 * A reference to data from a DataTransfer object, which might originate from e.g. the clipboard.
8484 * Seen as a source for DOM-based XSS.
8585 */
8686private class TaintedDataTransfer extends RemoteFlowSource {
87+ string event ;
88+
8789 TaintedDataTransfer ( ) {
88- this = taintedDataTransfer ( DataFlow:: TypeTracker:: end ( ) ) .getAMethodCall ( "getData" )
90+ this = taintedDataTransfer ( DataFlow:: TypeTracker:: end ( ) , event ) .getAMethodCall ( "getData" )
8991 }
9092
91- override string getSourceType ( ) { result = "Clipboard data" }
93+ override string getSourceType ( ) {
94+ event = "paste" and
95+ result = "Clipboard data"
96+ or
97+ event = "drop" and
98+ result = "Drag&Drop data"
99+ or
100+ event = "beforeinput" and
101+ result = "Input data"
102+ }
92103}
0 commit comments