Skip to content

Commit f95c480

Browse files
authored
Merge pull request #4799 from joefarebrother/xxe-fp
Java: Fix false positive in the XXE query
2 parents 48a9521 + 732542a commit f95c480

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* The query "Resolving XML external entity in user-controlled data" (`java/xxe`) has been improved to report fewer false positives when a `SAXParserFactory` is configured safely.
3+
4+

java/ql/src/semmle/code/java/security/XmlParsers.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ class SAXParserFactoryConfig extends ParserConfig {
481481
class SafeSAXParserFactory extends VarAccess {
482482
SafeSAXParserFactory() {
483483
exists(Variable v | v = this.getVariable() |
484+
exists(SAXParserFactoryConfig config | config.getQualifier() = v.getAnAccess() |
485+
config.enables(singleSafeConfig())
486+
)
487+
or
484488
exists(SAXParserFactoryConfig config | config.getQualifier() = v.getAnAccess() |
485489
config
486490
.disables(any(ConstantStringExpr s |

java/ql/test/query-tests/security/CWE-611/SAXParserTests.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import javax.xml.parsers.SAXParser;
44
import javax.xml.parsers.SAXParserFactory;
5-
5+
import javax.xml.XMLConstants;
66
import org.xml.sax.helpers.DefaultHandler;
77

88
public class SAXParserTests {
@@ -72,4 +72,12 @@ public void misConfiguredParser3(Socket sock) throws Exception {
7272
SAXParser parser = factory.newSAXParser();
7373
parser.parse(sock.getInputStream(), new DefaultHandler()); //unsafe
7474
}
75+
76+
public void safeParser2(Socket sock) throws Exception {
77+
SAXParserFactory factory = SAXParserFactory.newInstance();
78+
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
79+
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
80+
SAXParser parser = factory.newSAXParser();
81+
parser.parse(sock.getInputStream(), new DefaultHandler()); //safe
82+
}
7583
}

0 commit comments

Comments
 (0)