@@ -23,11 +23,15 @@ abstract class Sink extends DataFlow::Node { }
2323 */
2424abstract private class InstanceMethodSink extends Sink {
2525 InstanceMethodSink ( ) {
26- not exists (
27- SafeConstructorTrackingConfig safeConstructorTracking , DataFlow:: Node safeTypeUsage ,
28- MethodCall mc
29- |
30- safeConstructorTracking .hasFlow ( _, safeTypeUsage ) and
26+ not exists ( DataFlow:: Node safeTypeUsage , MethodCall mc |
27+ (
28+ DataContractJsonSafeConstructorTracking:: flowTo ( safeTypeUsage ) or
29+ JavaScriptSerializerSafeConstructorTracking:: flowTo ( safeTypeUsage ) or
30+ XmlObjectSerializerDerivedConstructorTracking:: flowTo ( safeTypeUsage ) or
31+ XmlSerializerSafeConstructorTracking:: flowTo ( safeTypeUsage ) or
32+ DataContractSerializerSafeConstructorTracking:: flowTo ( safeTypeUsage ) or
33+ XmlMessageFormatterSafeConstructorTracking:: flowTo ( safeTypeUsage )
34+ ) and
3135 mc .getQualifier ( ) = safeTypeUsage .asExpr ( ) and
3236 mc .getAnArgument ( ) = this .asExpr ( )
3337 )
@@ -378,9 +382,11 @@ module WeakTypeCreationToUsageTracking =
378382 TaintTracking:: Global< WeakTypeCreationToUsageTrackingConfig > ;
379383
380384/**
385+ * DEPRECATED: Do not extend this class.
386+ *
381387 * Safe deserializer creation to usage tracking config.
382388 */
383- abstract class SafeConstructorTrackingConfig extends TaintTracking2:: Configuration {
389+ abstract deprecated class SafeConstructorTrackingConfig extends TaintTracking2:: Configuration {
384390 bindingset [ this ]
385391 SafeConstructorTrackingConfig ( ) { any ( ) }
386392}
@@ -490,13 +496,8 @@ private class DataContractJsonSerializerDeserializeMethodSink extends DataContra
490496 }
491497}
492498
493- private class DataContractJsonSafeConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
494- {
495- DataContractJsonSafeConstructorTrackingConfiguration ( ) {
496- this = "DataContractJsonSafeConstructorTrackingConfiguration"
497- }
498-
499- override predicate isSource ( DataFlow:: Node source ) {
499+ private module DataContractJsonSafeConstructorTrackingConfig implements DataFlow:: ConfigSig {
500+ predicate isSource ( DataFlow:: Node source ) {
500501 exists ( ObjectCreation oc |
501502 oc = source .asExpr ( ) and
502503 exists ( Constructor c |
@@ -508,14 +509,17 @@ private class DataContractJsonSafeConstructorTrackingConfiguration extends SafeC
508509 )
509510 }
510511
511- override predicate isSink ( DataFlow:: Node sink ) {
512+ predicate isSink ( DataFlow:: Node sink ) {
512513 exists ( MethodCall mc |
513514 isDataContractJsonSerializerCall ( mc , _) and
514515 mc .getQualifier ( ) = sink .asExpr ( )
515516 )
516517 }
517518}
518519
520+ private module DataContractJsonSafeConstructorTracking =
521+ TaintTracking:: Global< DataContractJsonSafeConstructorTrackingConfig > ;
522+
519523/** JavaScriptSerializer */
520524private predicate isJavaScriptSerializerCall ( MethodCall mc , Method m ) {
521525 m = mc .getTarget ( ) and
@@ -540,13 +544,8 @@ private class JavaScriptSerializerDeserializeMethodSink extends JavaScriptSerial
540544 }
541545}
542546
543- private class JavaScriptSerializerSafeConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
544- {
545- JavaScriptSerializerSafeConstructorTrackingConfiguration ( ) {
546- this = "JavaScriptSerializerSafeConstructorTrackingConfiguration"
547- }
548-
549- override predicate isSource ( DataFlow:: Node source ) {
547+ private module JavaScriptSerializerSafeConstructorTrackingConfig implements DataFlow:: ConfigSig {
548+ predicate isSource ( DataFlow:: Node source ) {
550549 exists ( ObjectCreation oc |
551550 oc = source .asExpr ( ) and
552551 exists ( Constructor c |
@@ -557,14 +556,17 @@ private class JavaScriptSerializerSafeConstructorTrackingConfiguration extends S
557556 )
558557 }
559558
560- override predicate isSink ( DataFlow:: Node sink ) {
559+ predicate isSink ( DataFlow:: Node sink ) {
561560 exists ( MethodCall mc |
562561 isJavaScriptSerializerCall ( mc , _) and
563562 mc .getQualifier ( ) = sink .asExpr ( )
564563 )
565564 }
566565}
567566
567+ private module JavaScriptSerializerSafeConstructorTracking =
568+ TaintTracking:: Global< JavaScriptSerializerSafeConstructorTrackingConfig > ;
569+
568570/** XmlObjectSerializer */
569571private predicate isXmlObjectSerializerCall ( MethodCall mc , Method m ) {
570572 m = mc .getTarget ( ) and
@@ -584,13 +586,8 @@ private class XmlObjectSerializerDeserializeMethodSink extends XmlObjectSerializ
584586 }
585587}
586588
587- private class XmlObjectSerializerDerivedConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
588- {
589- XmlObjectSerializerDerivedConstructorTrackingConfiguration ( ) {
590- this = "XmlObjectSerializerDerivedConstructorTrackingConfiguration"
591- }
592-
593- override predicate isSource ( DataFlow:: Node source ) {
589+ private module XmlObjectSerializerDerivedConstructorTrackingConfig implements DataFlow:: ConfigSig {
590+ predicate isSource ( DataFlow:: Node source ) {
594591 exists ( ObjectCreation oc |
595592 oc = source .asExpr ( ) and
596593 exists ( ValueOrRefType declaringType |
@@ -604,14 +601,17 @@ private class XmlObjectSerializerDerivedConstructorTrackingConfiguration extends
604601 )
605602 }
606603
607- override predicate isSink ( DataFlow:: Node sink ) {
604+ predicate isSink ( DataFlow:: Node sink ) {
608605 exists ( MethodCall mc |
609606 isXmlObjectSerializerCall ( mc , _) and
610607 mc .getQualifier ( ) = sink .asExpr ( )
611608 )
612609 }
613610}
614611
612+ private module XmlObjectSerializerDerivedConstructorTracking =
613+ TaintTracking:: Global< XmlObjectSerializerDerivedConstructorTrackingConfig > ;
614+
615615/** XmlSerializer */
616616private predicate isXmlSerializerCall ( MethodCall mc , Method m ) {
617617 m = mc .getTarget ( ) and
@@ -630,13 +630,8 @@ private class XmlSerializerDeserializeMethodSink extends XmlSerializerSink {
630630 }
631631}
632632
633- private class XmlSerializerSafeConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
634- {
635- XmlSerializerSafeConstructorTrackingConfiguration ( ) {
636- this = "XmlSerializerSafeConstructorTrackingConfiguration"
637- }
638-
639- override predicate isSource ( DataFlow:: Node source ) {
633+ private module XmlSerializerSafeConstructorTrackingConfig implements DataFlow:: ConfigSig {
634+ predicate isSource ( DataFlow:: Node source ) {
640635 exists ( ObjectCreation oc |
641636 oc = source .asExpr ( ) and
642637 exists ( Constructor c |
@@ -648,14 +643,17 @@ private class XmlSerializerSafeConstructorTrackingConfiguration extends SafeCons
648643 )
649644 }
650645
651- override predicate isSink ( DataFlow:: Node sink ) {
646+ predicate isSink ( DataFlow:: Node sink ) {
652647 exists ( MethodCall mc |
653648 isXmlSerializerCall ( mc , _) and
654649 mc .getQualifier ( ) = sink .asExpr ( )
655650 )
656651 }
657652}
658653
654+ private module XmlSerializerSafeConstructorTracking =
655+ TaintTracking:: Global< XmlSerializerSafeConstructorTrackingConfig > ;
656+
659657/** DataContractSerializer */
660658private predicate isDataContractSerializerCall ( MethodCall mc , Method m ) {
661659 m = mc .getTarget ( ) and
@@ -678,13 +676,8 @@ private class DataContractSerializerDeserializeMethodSink extends DataContractSe
678676 }
679677}
680678
681- private class DataContractSerializerSafeConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
682- {
683- DataContractSerializerSafeConstructorTrackingConfiguration ( ) {
684- this = "DataContractSerializerSafeConstructorTrackingConfiguration"
685- }
686-
687- override predicate isSource ( DataFlow:: Node source ) {
679+ private module DataContractSerializerSafeConstructorTrackingConfig implements DataFlow:: ConfigSig {
680+ predicate isSource ( DataFlow:: Node source ) {
688681 exists ( ObjectCreation oc |
689682 oc = source .asExpr ( ) and
690683 exists ( Constructor c |
@@ -696,14 +689,17 @@ private class DataContractSerializerSafeConstructorTrackingConfiguration extends
696689 )
697690 }
698691
699- override predicate isSink ( DataFlow:: Node sink ) {
692+ predicate isSink ( DataFlow:: Node sink ) {
700693 exists ( MethodCall mc |
701694 isDataContractSerializerCall ( mc , _) and
702695 mc .getQualifier ( ) = sink .asExpr ( )
703696 )
704697 }
705698}
706699
700+ private module DataContractSerializerSafeConstructorTracking =
701+ TaintTracking:: Global< DataContractSerializerSafeConstructorTrackingConfig > ;
702+
707703/** XmlMessageFormatter */
708704private predicate isXmlMessageFormatterCall ( MethodCall mc , Method m ) {
709705 m = mc .getTarget ( ) and
@@ -722,13 +718,8 @@ private class XmlMessageFormatterDeserializeMethodSink extends XmlMessageFormatt
722718 }
723719}
724720
725- private class XmlMessageFormatterSafeConstructorTrackingConfiguration extends SafeConstructorTrackingConfig
726- {
727- XmlMessageFormatterSafeConstructorTrackingConfiguration ( ) {
728- this = "XmlMessageFormatterSafeConstructorTrackingConfiguration"
729- }
730-
731- override predicate isSource ( DataFlow:: Node source ) {
721+ private module XmlMessageFormatterSafeConstructorTrackingConfig implements DataFlow:: ConfigSig {
722+ predicate isSource ( DataFlow:: Node source ) {
732723 exists ( ObjectCreation oc |
733724 oc = source .asExpr ( ) and
734725 exists ( Constructor c |
@@ -740,14 +731,17 @@ private class XmlMessageFormatterSafeConstructorTrackingConfiguration extends Sa
740731 )
741732 }
742733
743- override predicate isSink ( DataFlow:: Node sink ) {
734+ predicate isSink ( DataFlow:: Node sink ) {
744735 exists ( MethodCall mc |
745736 isXmlMessageFormatterCall ( mc , _) and
746737 mc .getQualifier ( ) = sink .asExpr ( )
747738 )
748739 }
749740}
750741
742+ private module XmlMessageFormatterSafeConstructorTracking =
743+ TaintTracking:: Global< XmlMessageFormatterSafeConstructorTrackingConfig > ;
744+
751745/** LosFormatter */
752746private predicate isLosFormatterCall ( MethodCall mc , Method m ) {
753747 m = mc .getTarget ( ) and
0 commit comments