mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
Merge pull request #3215 from aibaars/validating-object-input
Java: teach UnsafeDeserialization about ValidatingObjectInputStream
This commit is contained in:
@@ -51,7 +51,14 @@ class SafeKryo extends DataFlow2::Configuration {
|
||||
predicate unsafeDeserialization(MethodAccess ma, Expr sink) {
|
||||
exists(Method m | m = ma.getMethod() |
|
||||
m instanceof ObjectInputStreamReadObjectMethod and
|
||||
sink = ma.getQualifier()
|
||||
sink = ma.getQualifier() and
|
||||
not exists(DataFlow::ExprNode node |
|
||||
node.getExpr() = sink and
|
||||
node
|
||||
.getTypeBound()
|
||||
.(RefType)
|
||||
.hasQualifiedName("org.apache.commons.io.serialization", "ValidatingObjectInputStream")
|
||||
)
|
||||
or
|
||||
m instanceof XMLDecoderReadObjectMethod and
|
||||
sink = ma.getQualifier()
|
||||
|
||||
12
java/ql/test/library-tests/UnsafeDeserialization/Test.java
Normal file
12
java/ql/test/library-tests/UnsafeDeserialization/Test.java
Normal file
@@ -0,0 +1,12 @@
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import org.apache.commons.io.serialization.ValidatingObjectInputStream;
|
||||
|
||||
class Test {
|
||||
public void test() throws IOException, ClassNotFoundException {
|
||||
ObjectInputStream objectStream = new ObjectInputStream(null);
|
||||
ObjectInputStream validating = new ValidatingObjectInputStream(null);
|
||||
objectStream.readObject();
|
||||
validating.readObject();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
| Test.java:9:3:9:27 | readObject(...) | ObjectInputStream |
|
||||
@@ -0,0 +1,6 @@
|
||||
import default
|
||||
import semmle.code.java.security.UnsafeDeserialization
|
||||
|
||||
from Method m, MethodAccess ma
|
||||
where ma.getMethod() = m and unsafeDeserialization(ma, _)
|
||||
select ma, m.getDeclaringType().getName()
|
||||
Reference in New Issue
Block a user