Skip to content

Commit 7923c48

Browse files
Fixing queries based on suggestions/comments.
TODO: Auto-formatting is still pending (need guidance on how to enable it on my environment). Thanks
1 parent 83e9d05 commit 7923c48

File tree

5 files changed

+25
-35
lines changed

5 files changed

+25
-35
lines changed

csharp/ql/src/experimental/Security Features/Serialization/DataSetSerialization.qhelp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</overview>
1313
<recommendation>
1414

15-
<p>Please review the <a href="https://go.microsoft.com/fwlink/?linkid=2132227">DataSet and DataTable security guidance</a> before makign use of these types for serialization.</p>
15+
<p>Please review the <a href="https://go.microsoft.com/fwlink/?linkid=2132227">DataSet and DataTable security guidance</a> before making use of these types for serialization.</p>
1616

1717
</recommendation>
1818
<references>

csharp/ql/src/experimental/Security Features/Serialization/DataSetSerialization.qll

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@ abstract class DataSetOrTableRelatedClass extends Class {
1717
*/
1818
class DataSetOrTable extends DataSetOrTableRelatedClass {
1919
DataSetOrTable() {
20-
this.getABaseType*().getQualifiedName().matches("System.Data.DataTable") or
21-
this.getABaseType*().getQualifiedName().matches("System.Data.DataSet") or
22-
this.getQualifiedName().matches("System.Data.DataTable") or
23-
this.getQualifiedName().matches("System.Data.DataSet")
20+
this.getABaseType*().getQualifiedName() = "System.Data.DataTable" or
21+
this.getABaseType*().getQualifiedName() = "System.Data.DataSet"
2422
}
2523
}
2624

@@ -32,11 +30,8 @@ class ClassWithDataSetOrTableMember extends DataSetOrTableRelatedClass {
3230
exists( Property p |
3331
p = this.getAProperty() |
3432
p.getType() instanceof DataSetOrTable
35-
) or exists ( AssignableMember am |
36-
am = this.getAField() or
37-
am = this.getAMember() |
38-
am.getType() instanceof DataSetOrTable
39-
) or exists( Property p |
33+
) or this.getAMember().(AssignableMember).getType() instanceof DataSetOrTable
34+
or exists( Property p |
4035
p = this.getAProperty() |
4136
p.getType() instanceof DataSetOrTable or
4237
p.getType().(ConstructedGeneric).getATypeArgument() instanceof DataSetOrTable
@@ -50,12 +45,12 @@ class ClassWithDataSetOrTableMember extends DataSetOrTableRelatedClass {
5045
class SerializableClass extends Class {
5146
SerializableClass() {
5247
(
53-
this.getABaseType*().getQualifiedName().matches("System.Xml.Serialization.XmlSerializer") or
54-
this.getABaseInterface*().getQualifiedName().matches("System.Runtime.Serialization.ISerializable") or
55-
this.getABaseType*().getQualifiedName().matches("System.Runtime.Serialization.XmlObjectSerializer") or
56-
this.getABaseInterface*().getQualifiedName().matches("System.Runtime.Serialization.ISerializationSurrogateProvider") or
57-
this.getABaseType*().getQualifiedName().matches("System.Runtime.Serialization.XmlSerializableServices") or
58-
this.getABaseInterface*().getQualifiedName().matches("System.Xml.Serialization.IXmlSerializable")
48+
this.getABaseType*().getQualifiedName() = "System.Xml.Serialization.XmlSerializer" or
49+
this.getABaseInterface*().getQualifiedName() = "System.Runtime.Serialization.ISerializable" or
50+
this.getABaseType*().getQualifiedName() = "System.Runtime.Serialization.XmlObjectSerializer" or
51+
this.getABaseInterface*().getQualifiedName() = "System.Runtime.Serialization.ISerializationSurrogateProvider" or
52+
this.getABaseType*().getQualifiedName() = "System.Runtime.Serialization.XmlSerializableServices" or
53+
this.getABaseInterface*().getQualifiedName() = "System.Xml.Serialization.IXmlSerializable"
5954
) or exists( Attribute a |
6055
a = this.getAnAttribute() |
6156
a.getType().getQualifiedName().toString() = "System.SerializableAttribute"

csharp/ql/src/experimental/Security Features/Serialization/UnsafeTypeUsedDataContractSerializer.ql

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,19 @@
33
* @description Unsafe type is used in data contract serializer. Please visit https://go.microsoft.com/fwlink/?linkid=2132227 for details."
44
* @kind problem
55
* @problem.severity error
6-
* @precision high
6+
* @precision medium
77
* @id cs/dataset-serialization/unsafe-type-used-data-contract-serializer
88
* @tags security
99
*/
1010

1111
import csharp
1212
import DataSetSerialization
1313

14-
predicate isClassDependingOnDataSetOrTable( Class c ) {
15-
c instanceof DataSetOrTableRelatedClass
16-
}
17-
18-
predicate xmlSerializerConstructorTypeParameter (Expr e) {
14+
predicate xmlSerializerConstructorArgument (Expr e) {
1915
exists (ObjectCreation oc, Constructor c |
2016
e = oc.getArgument(0) |
2117
c = oc.getTarget() and
2218
(
23-
c.getDeclaringType().hasQualifiedName("System.Xml.Serialization.XmlSerializer") or
2419
c.getDeclaringType().getABaseType*().hasQualifiedName("System.Xml.Serialization.XmlSerializer")
2520
)
2621
)
@@ -30,9 +25,9 @@ predicate unsafeDataContractTypeCreation (Expr e) {
3025
exists(MethodCall gt |
3126
gt.getTarget().getName() = "GetType" and
3227
e = gt and
33-
isClassDependingOnDataSetOrTable(gt.getQualifier().getType())
28+
gt.getQualifier().getType() instanceof DataSetOrTableRelatedClass
3429
) or
35-
isClassDependingOnDataSetOrTable(e.(TypeofExpr).getTypeAccess().getTarget())
30+
e.(TypeofExpr).getTypeAccess().getTarget() instanceof DataSetOrTableRelatedClass
3631
}
3732

3833
class Conf extends DataFlow::Configuration {
@@ -45,7 +40,7 @@ class Conf extends DataFlow::Configuration {
4540
}
4641

4742
override predicate isSink(DataFlow::Node node) {
48-
xmlSerializerConstructorTypeParameter (node.asExpr())
43+
xmlSerializerConstructorArgument (node.asExpr())
4944
}
5045
}
5146

csharp/ql/src/experimental/Security Features/Serialization/XmlDeserializationWithDataSet.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
import csharp
1212
import DataSetSerialization
1313

14-
from UnsafeXmlReadMethodCall mc, Method m
15-
where m.getACall() = mc
14+
from UnsafeXmlReadMethodCall mc
15+
where exists( Method m | m.getACall() = mc )
1616
select mc, "Making an XML deserialization call with a type derived from DataSet or DataTable types and may lead to a security problem. Please visit https://go.microsoft.com/fwlink/?linkid=2132227 for details."

csharp/ql/test/experimental/Security Features/Serialization/test0.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
namespace DataSetSerializationTest
1212
{
13-
public class DerivesFromDeprecatedType1 : XmlSerializer // bug
13+
public class DerivesFromDeprecatedType1 : XmlSerializer // warning:DefiningDatasetRelatedType.ql
1414
{
15-
public DataSet MyDataSet { get; set; } // bug
15+
public DataSet MyDataSet { get; set; } // bug:DefiningPotentiallyUnsafeXmlSerializer.ql
1616

1717
public DerivesFromDeprecatedType1()
1818
{
@@ -56,9 +56,9 @@ public override void WriteEndObject(XmlDictionaryWriter writer) { }
5656
*/
5757

5858
[Serializable()]
59-
public class AttributeSerializer01 // bug
59+
public class AttributeSerializer01 // warning:DefiningDatasetRelatedType.ql
6060
{
61-
private DataSet MyDataSet; // bug
61+
private DataSet MyDataSet; // bug:DefiningPotentiallyUnsafeXmlSerializer.ql
6262

6363
AttributeSerializer01()
6464
{
@@ -85,15 +85,15 @@ static void datatable_readxmlschema_01(string fileName)
8585
{
8686
DataTable newTable = new DataTable();
8787
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(fs);
88-
newTable.ReadXmlSchema(reader); //bug
88+
newTable.ReadXmlSchema(reader); //bug:XmlDeserializationWithDataSet.ql
8989
}
9090
}
9191

9292
static void Main(string[] args)
9393
{
9494

95-
XmlSerializer x = new XmlSerializer(typeof(DataSet)); // bug
96-
XmlSerializer y = new XmlSerializer(typeof(AttributeSerializer01)); //bug
95+
XmlSerializer x = new XmlSerializer(typeof(DataSet)); // bug:UnsafeTypeUsedDataContractSerializer.ql
96+
XmlSerializer y = new XmlSerializer(typeof(AttributeSerializer01)); //bug:UnsafeTypeUsedDataContractSerializer.ql
9797

9898
Console.WriteLine("Hello World!");
9999
}

0 commit comments

Comments
 (0)