[ 
https://issues.apache.org/jira/browse/JXPATH-206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tim Scheckenbach updated JXPATH-206:
------------------------------------
    Description: 
We found an issue in the fuzzing infrastructure belonging to Apache Commons 
JXPath on OSS-Fuzz. See: 
https://github.com/google/oss-fuzz/tree/cf22c9f69badb6a4e064f7a01eeadbefdfc9fd7a/projects/apache-commons-jxpath
 
{{JXPathFuzzer}} parses the input itself, before JXPath is involved:
{code:java}
doc = builder.parse(new InputSource(new 
StringReader(data.consumeString(2000))));
{code}

The {{DocumentBuilderFactory}} above it is unconfigured, so a DOCTYPE in the 
input makes the parser open the file or URL it names.

The seed corpus shipped with the fuzzer contains XHTML doctypes, multiple files 
mention {{www.w3.org}}, and a plain run would contact that host and stop with 
this error:
{code}
$ python3 infra/helper.py run_fuzzer apache-commons-jxpath JXPathFuzzer -- 
-runs=3000
== Java Exception: com.code_intelligence.jazzer.api.FuzzerSecurityIssueMedium: 
Server Side Request Forgery (SSRF)
Attempted connection to: www.w3.org:80
{code}

h2. Patch

{code:java}
factory.setFeature("http://xml.org/sax/features/external-general-entities";, 
false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities";, 
false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd";,
 false);
factory.setXIncludeAware(false);
{code}

The same run then finishes.

It also fixes the two open testcases, attached.
These two crashes are related to this issue that is marked as fixed but still 
exists (https://issues.oss-fuzz.com/issues/42525841).
Both stack traces end at {{JXPathFuzzer.java:48}} inside the JDK's XML parser. 
So they crash before any JXPath code would be executed:

Download the attached Archive.zip and unzip the crash reports contained in it.
{code}
export DOCKER_DEFAULT_PLATFORM=linux/amd64 # if on mac
git clone https://github.com/google/oss-fuzz.git
cd oss-fuzz
python3 infra/helper.py build_image apache-commons-jxpath
python3 infra/helper.py build_fuzzers --sanitizer address apache-commons-jxpath
cp <unzipped Archive.zip crashes> .
python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
crash-063b9cde5d2bb9ecf27962e885b4da22756bb642
python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
crash-00aa313fb7828be750fc6c4372b976283e6f125e
{code}

Found by the CISPA Fandango-Team while triaging OSS-Fuzz findings for 
apache-commons-jxpath.

  was:
{{JXPathFuzzer}} parses the input itself, before JXPath is involved:
{code:java}
doc = builder.parse(new InputSource(new 
StringReader(data.consumeString(2000))));
{code}

The {{DocumentBuilderFactory}} above it is unconfigured, so a DOCTYPE in the 
input makes the parser open the file or URL it names.

The seed corpus shipped with the fuzzer contains XHTML doctypes, multiple files 
mention {{www.w3.org}}, and a plain run would contact that host and stop with 
this error:
{code}
$ python3 infra/helper.py run_fuzzer apache-commons-jxpath JXPathFuzzer -- 
-runs=3000
== Java Exception: com.code_intelligence.jazzer.api.FuzzerSecurityIssueMedium: 
Server Side Request Forgery (SSRF)
Attempted connection to: www.w3.org:80
{code}

h2. Patch

{code:java}
factory.setFeature("http://xml.org/sax/features/external-general-entities";, 
false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities";, 
false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd";,
 false);
factory.setXIncludeAware(false);
{code}

The same run then finishes.

It also fixes the two open testcases, attached.
These two crashes are related to this issue that is marked as fixed but still 
exists (https://issues.oss-fuzz.com/issues/42525841).
Both stack traces end at {{JXPathFuzzer.java:48}} inside the JDK's XML parser. 
So they crash before any JXPath code would be executed:

Download the attached Archive.zip and unzip the crash reports contained in it.
{code}
export DOCKER_DEFAULT_PLATFORM=linux/amd64 # if on mac
git clone https://github.com/google/oss-fuzz.git
cd oss-fuzz
python3 infra/helper.py build_image apache-commons-jxpath
python3 infra/helper.py build_fuzzers --sanitizer address apache-commons-jxpath
cp <unzipped Archive.zip crashes> .
python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
crash-063b9cde5d2bb9ecf27962e885b4da22756bb642
python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
crash-00aa313fb7828be750fc6c4372b976283e6f125e
{code}

Found by the CISPA Fandango-Team while triaging OSS-Fuzz findings for 
apache-commons-jxpath.


> apache-commons-jxpath: stop JXPathFuzzer from reading files and opening 
> connections
> -----------------------------------------------------------------------------------
>
>                 Key: JXPATH-206
>                 URL: https://issues.apache.org/jira/browse/JXPATH-206
>             Project: Commons JXPath
>          Issue Type: Bug
>    Affects Versions: 1.4.0
>            Reporter: Tim Scheckenbach
>            Priority: Major
>         Attachments: Archive.zip
>
>
> We found an issue in the fuzzing infrastructure belonging to Apache Commons 
> JXPath on OSS-Fuzz. See: 
> https://github.com/google/oss-fuzz/tree/cf22c9f69badb6a4e064f7a01eeadbefdfc9fd7a/projects/apache-commons-jxpath
>  
> {{JXPathFuzzer}} parses the input itself, before JXPath is involved:
> {code:java}
> doc = builder.parse(new InputSource(new 
> StringReader(data.consumeString(2000))));
> {code}
> The {{DocumentBuilderFactory}} above it is unconfigured, so a DOCTYPE in the 
> input makes the parser open the file or URL it names.
> The seed corpus shipped with the fuzzer contains XHTML doctypes, multiple 
> files mention {{www.w3.org}}, and a plain run would contact that host and 
> stop with this error:
> {code}
> $ python3 infra/helper.py run_fuzzer apache-commons-jxpath JXPathFuzzer -- 
> -runs=3000
> == Java Exception: 
> com.code_intelligence.jazzer.api.FuzzerSecurityIssueMedium: Server Side 
> Request Forgery (SSRF)
> Attempted connection to: www.w3.org:80
> {code}
> h2. Patch
> {code:java}
> factory.setFeature("http://xml.org/sax/features/external-general-entities";, 
> false);
> factory.setFeature("http://xml.org/sax/features/external-parameter-entities";, 
> false);
> factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd";,
>  false);
> factory.setXIncludeAware(false);
> {code}
> The same run then finishes.
> It also fixes the two open testcases, attached.
> These two crashes are related to this issue that is marked as fixed but still 
> exists (https://issues.oss-fuzz.com/issues/42525841).
> Both stack traces end at {{JXPathFuzzer.java:48}} inside the JDK's XML 
> parser. So they crash before any JXPath code would be executed:
> Download the attached Archive.zip and unzip the crash reports contained in it.
> {code}
> export DOCKER_DEFAULT_PLATFORM=linux/amd64 # if on mac
> git clone https://github.com/google/oss-fuzz.git
> cd oss-fuzz
> python3 infra/helper.py build_image apache-commons-jxpath
> python3 infra/helper.py build_fuzzers --sanitizer address 
> apache-commons-jxpath
> cp <unzipped Archive.zip crashes> .
> python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
> crash-063b9cde5d2bb9ecf27962e885b4da22756bb642
> python3 infra/helper.py reproduce apache-commons-jxpath JXPathFuzzer 
> crash-00aa313fb7828be750fc6c4372b976283e6f125e
> {code}
> Found by the CISPA Fandango-Team while triaging OSS-Fuzz findings for 
> apache-commons-jxpath.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to