@@ -14,15 +14,29 @@ module UnsafeDeserialization {
14
14
*/
15
15
abstract class Source extends DataFlow:: Node { }
16
16
17
+ /**
18
+ * A data flow sink for unsafe deserialization vulnerabilities.
19
+ */
20
+ abstract class Sink extends DataFlow:: Node { }
21
+
17
22
/**
18
23
* A data flow sink for unsafe deserialization vulnerabilities to an instance method.
19
24
*/
20
- abstract class InstanceMethodSink extends DataFlow:: Node { }
25
+ abstract private class InstanceMethodSink extends Sink {
26
+ InstanceMethodSink ( ) {
27
+ not exists (
28
+ SafeConstructorTrackingConfig safeConstructorTracking , DataFlow:: Node safeTypeUsage
29
+ |
30
+ safeConstructorTracking .hasFlow ( _, safeTypeUsage ) and
31
+ safeTypeUsage .asExpr ( ) .getParent ( ) = this .asExpr ( ) .getParent ( )
32
+ )
33
+ }
34
+ }
21
35
22
36
/**
23
37
* A data flow sink for unsafe deserialization vulnerabilities to a static method or constructor call.
24
38
*/
25
- abstract class ConstructorOrStaticMethodSink extends DataFlow :: Node { }
39
+ abstract private class ConstructorOrStaticMethodSink extends Sink { }
26
40
27
41
/**
28
42
* A sanitizer for unsafe deserialization vulnerabilities.
@@ -132,7 +146,7 @@ module UnsafeDeserialization {
132
146
)
133
147
}
134
148
135
- private abstract class BinaryFormatterSink extends InstanceMethodSink { }
149
+ abstract private class BinaryFormatterSink extends InstanceMethodSink { }
136
150
137
151
private class BinaryFormatterDeserializeMethodSink extends BinaryFormatterSink {
138
152
BinaryFormatterDeserializeMethodSink ( ) {
@@ -150,7 +164,7 @@ module UnsafeDeserialization {
150
164
not mc .getArgument ( 0 ) .hasValue ( )
151
165
}
152
166
153
- private abstract class SoapFormatterSink extends InstanceMethodSink { }
167
+ abstract private class SoapFormatterSink extends InstanceMethodSink { }
154
168
155
169
private class SoapFormatterDeserializeMethodSink extends SoapFormatterSink {
156
170
SoapFormatterDeserializeMethodSink ( ) {
@@ -168,7 +182,7 @@ module UnsafeDeserialization {
168
182
not mc .getArgument ( 0 ) .hasValue ( )
169
183
}
170
184
171
- private abstract class ObjectStateFormatterSink extends InstanceMethodSink { }
185
+ abstract private class ObjectStateFormatterSink extends InstanceMethodSink { }
172
186
173
187
private class ObjectStateFormatterDeserializeMethodSink extends ObjectStateFormatterSink {
174
188
ObjectStateFormatterDeserializeMethodSink ( ) {
@@ -191,7 +205,7 @@ module UnsafeDeserialization {
191
205
)
192
206
}
193
207
194
- private abstract class NetDataContractSerializerSink extends InstanceMethodSink { }
208
+ abstract private class NetDataContractSerializerSink extends InstanceMethodSink { }
195
209
196
210
private class NetDataContractSerializerDeserializeMethodSink extends NetDataContractSerializerSink {
197
211
NetDataContractSerializerDeserializeMethodSink ( ) {
@@ -209,7 +223,7 @@ module UnsafeDeserialization {
209
223
not mc .getArgument ( 0 ) .hasValue ( )
210
224
}
211
225
212
- private abstract class DataContractJsonSerializerSink extends InstanceMethodSink { }
226
+ abstract private class DataContractJsonSerializerSink extends InstanceMethodSink { }
213
227
214
228
private class DataContractJsonSerializerDeserializeMethodSink extends DataContractJsonSerializerSink {
215
229
DataContractJsonSerializerDeserializeMethodSink ( ) {
@@ -252,7 +266,7 @@ module UnsafeDeserialization {
252
266
)
253
267
}
254
268
255
- private abstract class JavaScriptSerializerSink extends InstanceMethodSink { }
269
+ abstract private class JavaScriptSerializerSink extends InstanceMethodSink { }
256
270
257
271
private class JavaScriptSerializerDeserializeMethodSink extends JavaScriptSerializerSink {
258
272
JavaScriptSerializerDeserializeMethodSink ( ) {
@@ -290,7 +304,7 @@ module UnsafeDeserialization {
290
304
not mc .targetIsLocalInstance ( )
291
305
}
292
306
293
- private abstract class XmlObjectSerializerSink extends InstanceMethodSink { }
307
+ abstract private class XmlObjectSerializerSink extends InstanceMethodSink { }
294
308
295
309
private class XmlObjectSerializerDeserializeMethodSink extends XmlObjectSerializerSink {
296
310
XmlObjectSerializerDeserializeMethodSink ( ) {
@@ -332,7 +346,7 @@ module UnsafeDeserialization {
332
346
not mc .getArgument ( 0 ) .hasValue ( )
333
347
}
334
348
335
- private abstract class XmlSerializerSink extends InstanceMethodSink { }
349
+ abstract private class XmlSerializerSink extends InstanceMethodSink { }
336
350
337
351
private class XmlSerializerDeserializeMethodSink extends XmlSerializerSink {
338
352
XmlSerializerDeserializeMethodSink ( ) {
@@ -373,7 +387,7 @@ module UnsafeDeserialization {
373
387
not mc .getArgument ( 0 ) .hasValue ( )
374
388
}
375
389
376
- private abstract class DataContractSerializerSink extends InstanceMethodSink { }
390
+ abstract private class DataContractSerializerSink extends InstanceMethodSink { }
377
391
378
392
private class DataContractSerializerDeserializeMethodSink extends DataContractSerializerSink {
379
393
DataContractSerializerDeserializeMethodSink ( ) {
@@ -411,7 +425,7 @@ module UnsafeDeserialization {
411
425
not mc .getArgument ( 0 ) .hasValue ( )
412
426
}
413
427
414
- private abstract class XmlMessageFormatterSink extends InstanceMethodSink { }
428
+ abstract private class XmlMessageFormatterSink extends InstanceMethodSink { }
415
429
416
430
private class XmlMessageFormatterDeserializeMethodSink extends XmlMessageFormatterSink {
417
431
XmlMessageFormatterDeserializeMethodSink ( ) {
@@ -449,7 +463,7 @@ module UnsafeDeserialization {
449
463
not mc .getArgument ( 0 ) .hasValue ( )
450
464
}
451
465
452
- private abstract class LosFormatterSink extends InstanceMethodSink { }
466
+ abstract private class LosFormatterSink extends InstanceMethodSink { }
453
467
454
468
private class LosFormatterDeserializeMethodSink extends LosFormatterSink {
455
469
LosFormatterDeserializeMethodSink ( ) {
@@ -467,7 +481,7 @@ module UnsafeDeserialization {
467
481
not mc .getArgument ( 0 ) .hasValue ( )
468
482
}
469
483
470
- private abstract class FastJsonSink extends ConstructorOrStaticMethodSink { }
484
+ abstract private class FastJsonSink extends ConstructorOrStaticMethodSink { }
471
485
472
486
private class FastJsonDeserializeMethodSink extends FastJsonSink {
473
487
FastJsonDeserializeMethodSink ( ) {
@@ -485,7 +499,7 @@ module UnsafeDeserialization {
485
499
not mc .getArgument ( 0 ) .hasValue ( )
486
500
}
487
501
488
- private abstract class ActivitySink extends InstanceMethodSink { }
502
+ abstract private class ActivitySink extends InstanceMethodSink { }
489
503
490
504
private class ActivityDeserializeMethodSink extends ActivitySink {
491
505
ActivityDeserializeMethodSink ( ) {
@@ -503,7 +517,7 @@ module UnsafeDeserialization {
503
517
not mc .getArgument ( 0 ) .hasValue ( )
504
518
}
505
519
506
- private abstract class ResourceReaderSink extends ConstructorOrStaticMethodSink { }
520
+ abstract private class ResourceReaderSink extends ConstructorOrStaticMethodSink { }
507
521
508
522
private class ResourceReaderDeserializeMethodSink extends ResourceReaderSink {
509
523
ResourceReaderDeserializeMethodSink ( ) {
@@ -521,7 +535,7 @@ module UnsafeDeserialization {
521
535
not mc .getArgument ( 0 ) .hasValue ( )
522
536
}
523
537
524
- private abstract class BinaryMessageFormatterSink extends InstanceMethodSink { }
538
+ abstract private class BinaryMessageFormatterSink extends InstanceMethodSink { }
525
539
526
540
private class BinaryMessageFormatterDeserializeMethodSink extends BinaryMessageFormatterSink {
527
541
BinaryMessageFormatterDeserializeMethodSink ( ) {
@@ -545,7 +559,7 @@ module UnsafeDeserialization {
545
559
not mc .getArgument ( 0 ) .hasValue ( )
546
560
}
547
561
548
- private abstract class XamlReaderSink extends ConstructorOrStaticMethodSink { }
562
+ abstract private class XamlReaderSink extends ConstructorOrStaticMethodSink { }
549
563
550
564
private class XamlReaderDeserializeMethodSink extends XamlReaderSink {
551
565
XamlReaderDeserializeMethodSink ( ) {
@@ -567,7 +581,7 @@ module UnsafeDeserialization {
567
581
not mc .getArgument ( 0 ) .hasValue ( )
568
582
}
569
583
570
- private abstract class ProxyObjectSink extends InstanceMethodSink { }
584
+ abstract private class ProxyObjectSink extends InstanceMethodSink { }
571
585
572
586
private class ProxyObjectDeserializeMethodSink extends ProxyObjectSink {
573
587
ProxyObjectDeserializeMethodSink ( ) {
@@ -585,7 +599,7 @@ module UnsafeDeserialization {
585
599
not mc .getArgument ( 0 ) .hasValue ( )
586
600
}
587
601
588
- private abstract class SweetJaysonSink extends ConstructorOrStaticMethodSink { }
602
+ abstract private class SweetJaysonSink extends ConstructorOrStaticMethodSink { }
589
603
590
604
private class SweetJaysonDeserializeMethodSink extends SweetJaysonSink {
591
605
SweetJaysonDeserializeMethodSink ( ) {
@@ -597,7 +611,8 @@ module UnsafeDeserialization {
597
611
}
598
612
599
613
/** ServiceStack.Text.JsonSerializer */
600
- private abstract class ServiceStackTextJsonSerializerSink extends ConstructorOrStaticMethodSink { }
614
+ abstract private class ServiceStackTextJsonSerializerSink extends ConstructorOrStaticMethodSink {
615
+ }
601
616
602
617
private class ServiceStackTextJsonSerializerDeserializeMethodSink extends ServiceStackTextJsonSerializerSink {
603
618
ServiceStackTextJsonSerializerDeserializeMethodSink ( ) {
@@ -618,7 +633,8 @@ module UnsafeDeserialization {
618
633
}
619
634
620
635
/** ServiceStack.Text.TypeSerializer */
621
- private abstract class ServiceStackTextTypeSerializerSink extends ConstructorOrStaticMethodSink { }
636
+ abstract private class ServiceStackTextTypeSerializerSink extends ConstructorOrStaticMethodSink {
637
+ }
622
638
623
639
private class ServiceStackTextTypeSerializerDeserializeMethodSink extends ServiceStackTextTypeSerializerSink {
624
640
ServiceStackTextTypeSerializerDeserializeMethodSink ( ) {
@@ -639,7 +655,7 @@ module UnsafeDeserialization {
639
655
}
640
656
641
657
/** ServiceStack.Text.CsvSerializer */
642
- private abstract class ServiceStackTextCsvSerializerSink extends ConstructorOrStaticMethodSink { }
658
+ abstract private class ServiceStackTextCsvSerializerSink extends ConstructorOrStaticMethodSink { }
643
659
644
660
private class ServiceStackTextCsvSerializerDeserializeMethodSink extends ServiceStackTextCsvSerializerSink {
645
661
ServiceStackTextCsvSerializerDeserializeMethodSink ( ) {
@@ -660,7 +676,7 @@ module UnsafeDeserialization {
660
676
}
661
677
662
678
/** ServiceStack.Text.XmlSerializer */
663
- private abstract class ServiceStackTextXmlSerializerSink extends ConstructorOrStaticMethodSink { }
679
+ abstract private class ServiceStackTextXmlSerializerSink extends ConstructorOrStaticMethodSink { }
664
680
665
681
private class ServiceStackTextXmlSerializerDeserializeMethodSink extends ServiceStackTextXmlSerializerSink {
666
682
ServiceStackTextXmlSerializerDeserializeMethodSink ( ) {
0 commit comments