Skip to content

Commit 3b6c8c5

Browse files
committed
Merge branch 'main' into clipBoard
2 parents b889674 + 136d043 commit 3b6c8c5

File tree

378 files changed

+5927
-2149
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

378 files changed

+5927
-2149
lines changed

.github/workflows/csv-coverage-update.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
jobs:
99
update:
1010
name: Update framework coverage report
11-
if: github.event.repository.fork == false
11+
if: github.repository == 'github/codeql'
1212
runs-on: ubuntu-latest
1313

1414
steps:

cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ where
6363
functionsMissingReturnStmt(f, blame) and
6464
reachable(blame) and
6565
not functionImperfectlyExtracted(f) and
66+
not f.isFromUninstantiatedTemplate(_) and
6667
(blame = stmt or blame.(Expr).getEnclosingStmt() = stmt) and
6768
msg =
6869
"Function " + f.getName() + " should return a value of type " + f.getType().getName() +
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* The "Deserialization of user-controlled data" (`java/unsafe-deserialization`) query now recognizes deserialization using the `Flexjson` library.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* Added basic support for untrusted data sources and XSS-vulnerable sinks relating to the JavaServer Faces (JSF) framework.

java/documentation/library-coverage/coverage.csv

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,
1616
groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,
1717
jakarta.json,,,123,,,,,,,,,,,,,,,,,,,100,23
1818
jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,
19-
jakarta.ws.rs.core,2,,143,,,,,,,,,,,,,,,2,,,,88,55
19+
jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,,
20+
jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,94,55
2021
java.beans,,,1,,,,,,,,,,,,,,,,,,,1,
2122
java.io,3,,27,,3,,,,,,,,,,,,,,,,,26,1
2223
java.lang,,,45,,,,,,,,,,,,,,,,,,,39,6
@@ -32,7 +33,8 @@ javax.script,1,,,,,,,,,,,1,,,,,,,,,,,
3233
javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,21,2,
3334
javax.validation,1,1,,1,,,,,,,,,,,,,,,,,1,,
3435
javax.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,
35-
javax.ws.rs.core,3,,143,,,,1,,,,,,,,,,,2,,,,88,55
36+
javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,,
37+
javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,2,,,,94,55
3638
javax.xml.transform.sax,,,4,,,,,,,,,,,,,,,,,,,4,
3739
javax.xml.transform.stream,,,2,,,,,,,,,,,,,,,,,,,2,
3840
javax.xml.xpath,3,,,,,,,,,,,,,,,,,,3,,,,

java/documentation/library-coverage/coverage.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Java framework & library support
1616
`Google Guava <https://guava.dev/>`_,``com.google.common.*``,,175,6,,6,,,,,
1717
`JSON-java <https://github.com/stleary/JSON-java>`_,``org.json``,,236,,,,,,,,
1818
Java Standard Library,``java.*``,3,421,30,13,,,7,,,10
19-
Java extensions,"``javax.*``, ``jakarta.*``",22,540,27,,,,,1,1,2
19+
Java extensions,"``javax.*``, ``jakarta.*``",40,552,27,,,,,1,1,2
2020
`Spring <https://spring.io/>`_,``org.springframework.*``,29,469,91,,,,19,14,,29
2121
Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,25,146,,,,14,18,,
22-
Totals,,84,3541,398,13,6,6,107,33,1,66
22+
Totals,,102,3553,398,13,6,6,107,33,1,66
2323

java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,10 @@ private module Frameworks {
8181
private import semmle.code.java.frameworks.ApacheHttp
8282
private import semmle.code.java.frameworks.apache.Collections
8383
private import semmle.code.java.frameworks.apache.Lang
84+
private import semmle.code.java.frameworks.Flexjson
8485
private import semmle.code.java.frameworks.guava.Guava
8586
private import semmle.code.java.frameworks.jackson.JacksonSerializability
87+
private import semmle.code.java.frameworks.javaee.jsf.JSFRenderer
8688
private import semmle.code.java.frameworks.JavaxJson
8789
private import semmle.code.java.frameworks.JaxWS
8890
private import semmle.code.java.frameworks.JoddJson

java/ql/lib/semmle/code/java/dataflow/FlowSources.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import semmle.code.java.frameworks.spring.SpringWebClient
2525
import semmle.code.java.frameworks.Guice
2626
import semmle.code.java.frameworks.struts.StrutsActions
2727
import semmle.code.java.frameworks.Thrift
28+
import semmle.code.java.frameworks.javaee.jsf.JSFRenderer
2829
private import semmle.code.java.dataflow.ExternalFlow
2930

3031
/** A data flow source of remote user input. */
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Provides classes for working with the Flexjson framework.
3+
*/
4+
5+
import java
6+
private import semmle.code.java.dataflow.ExternalFlow
7+
8+
/** The class `flexjson.JSONDeserializer`. */
9+
class FlexjsonDeserializer extends RefType {
10+
FlexjsonDeserializer() { this.hasQualifiedName("flexjson", "JSONDeserializer") }
11+
}
12+
13+
/** The class `flexjson.ObjectFactory`. */
14+
class FlexjsonObjectFactory extends RefType {
15+
FlexjsonObjectFactory() { this.hasQualifiedName("flexjson", "ObjectFactory") }
16+
}
17+
18+
/** The deserialization method `deserialize`. */
19+
class FlexjsonDeserializeMethod extends Method {
20+
FlexjsonDeserializeMethod() {
21+
this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof
22+
FlexjsonDeserializer and
23+
this.getName() = "deserialize" and
24+
not this.getAParameter().getType() instanceof FlexjsonObjectFactory // deserialization method with specified class types in object factory is unlikely to be vulnerable
25+
}
26+
}
27+
28+
/** The method `use` to configure allowed class type. */
29+
class FlexjsonDeserializerUseMethod extends Method {
30+
FlexjsonDeserializerUseMethod() {
31+
this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof
32+
FlexjsonDeserializer and
33+
this.hasName("use")
34+
}
35+
}
36+
37+
private class FluentUseMethodModel extends SummaryModelCsv {
38+
override predicate row(string r) {
39+
r = "flexjson;JSONDeserializer;true;use;;;Argument[-1];ReturnValue;value"
40+
}
41+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/** Provides classes and predicates for working with JavaServer Faces renderer. */
2+
3+
import java
4+
private import semmle.code.java.dataflow.ExternalFlow
5+
6+
/**
7+
* The JSF class `FacesContext` for processing HTTP requests.
8+
*/
9+
class FacesContext extends RefType {
10+
FacesContext() {
11+
this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "FacesContext")
12+
}
13+
}
14+
15+
private class ExternalContextSource extends SourceModelCsv {
16+
override predicate row(string row) {
17+
row =
18+
["javax.", "jakarta."] +
19+
[
20+
"faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote",
21+
"faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote",
22+
"faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote",
23+
"faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote",
24+
"faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote",
25+
"faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote",
26+
"faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote"
27+
]
28+
}
29+
}
30+
31+
/**
32+
* The method `getResponseWriter()` declared in JSF `ExternalContext`.
33+
*/
34+
class FacesGetResponseWriterMethod extends Method {
35+
FacesGetResponseWriterMethod() {
36+
getDeclaringType() instanceof FacesContext and
37+
hasName("getResponseWriter") and
38+
getNumberOfParameters() = 0
39+
}
40+
}
41+
42+
/**
43+
* The method `getResponseStream()` declared in JSF `ExternalContext`.
44+
*/
45+
class FacesGetResponseStreamMethod extends Method {
46+
FacesGetResponseStreamMethod() {
47+
getDeclaringType() instanceof FacesContext and
48+
hasName("getResponseStream") and
49+
getNumberOfParameters() = 0
50+
}
51+
}
52+
53+
private class ExternalContextXssSink extends SinkModelCsv {
54+
override predicate row(string row) {
55+
row =
56+
[
57+
"javax.faces.context;ResponseWriter;true;write;;;Argument[0];xss",
58+
"javax.faces.context;ResponseStream;true;write;;;Argument[0];xss",
59+
"jakarta.faces.context;ResponseWriter;true;write;;;Argument[0];xss",
60+
"jakarta.faces.context;ResponseStream;true;write;;;Argument[0];xss"
61+
]
62+
}
63+
}

0 commit comments

Comments
 (0)