@@ -67,26 +67,37 @@ private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event)
67
67
* Gets a reference to a DataTransfer object.
68
68
* https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData
69
69
*/
70
- private DataFlow:: SourceNode taintedDataTransfer ( DataFlow:: TypeTracker t ) {
70
+ private DataFlow:: SourceNode taintedDataTransfer ( DataFlow:: TypeTracker t , string event ) {
71
71
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"
73
74
or
74
75
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" ]
78
78
or
79
- exists ( DataFlow:: TypeTracker t2 | result = taintedDataTransfer ( t2 ) .track ( t2 , t ) )
79
+ exists ( DataFlow:: TypeTracker t2 | result = taintedDataTransfer ( t2 , event ) .track ( t2 , t ) )
80
80
}
81
81
82
82
/**
83
83
* A reference to data from a DataTransfer object, which might originate from e.g. the clipboard.
84
84
* Seen as a source for DOM-based XSS.
85
85
*/
86
86
private class TaintedDataTransfer extends RemoteFlowSource {
87
+ string event ;
88
+
87
89
TaintedDataTransfer ( ) {
88
- this = taintedDataTransfer ( DataFlow:: TypeTracker:: end ( ) ) .getAMethodCall ( "getData" )
90
+ this = taintedDataTransfer ( DataFlow:: TypeTracker:: end ( ) , event ) .getAMethodCall ( "getData" )
89
91
}
90
92
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
+ }
92
103
}
0 commit comments