Summary An remote Code exec vulnerability allows any unauthenticated user to exec code on the server.
Details Hi,Team, i find openrefine support to import data from database,When use mysql jdbc to connect to database,It is vulnerable to jdbc url attacks,for example,unauthenticated attacker can get rce on the server through the mysql userializable If the mysql-connector-java version used on the server side is less than 8.20. In order for the server to enable deserialization we need to set the autoDeserialize and queryInterceptors parameters in the connection string,As same with https://github.com/OpenRefine/OpenRefine/security/advisories/GHSA-qqh2-wvmv-h72m, since the concatenation string is a direct concatenation, it is possible to inject the required parameters after the other parameters. !image
And there is a commons-beanutils dependency library on the server side, which contains an RCE-capable deserialization exploit chain
PoC env: centos 7 openrefine 3.7.4 jdk11 mysql-connector-java version 8.14.0 you can use the tool https://github.com/4ra1n/mysql-fake-server to running a malicious mysql server. for example use the CB 1.9 Gadget to exec command touch /tmp/hacked. !image set the user to base64ZGVzZXJfQ0JfdG91Y2ggL3RtcC9oYWNrZWQ=(touch /tmp/hacked base64 encode),dataBaseName to test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor#. !image !image command touch /tmp/hacked is executed. !image
Impact An remote Code exec vulnerability allows any unauthenticated user to exec code on the server.
Summary An arbitrary file read vulnerability allows any unauthenticated user to read the file on the server.
Details Hi,Team, i find openrefine support to import data from database,When use mysql jdbc to connect to database,It is vulnerable to jdbc url attacks,for example,unauthenticated attacker can read the file on the server. There are some differences in utilization depending on the version of the mysql-connector dependency on the server side. 1. mysql-connector-java version > 8.14 The default value of allowLoadLocalInfile on the server side is false in this case.We need to manually set this value to true in the connection string. Since the way to get the databaseurl in com/google/refine/extension/database/mysql/MySQLConnectionManager.java is to splice the individual configurations directly, we can set the allowLoadLocalInfile parameter after the other parameters(for example the databaseName parameter ). !image !image !image 2. mysql-connector-java version <= 8.14 The default value of allowLoadLocalInfile on the server side is true in this case.so wo don't need do anything,Just connect to our malicious server.
PoC env: centos 7 openrefine 3.7.4 jdk11 mysql-connector-java version 8.30.0
you can use the tool https://github.com/4ra1n/mysql-fake-server to running a malicious mysql server. !image for example,to read the /etc/passwd file. !image set the username to base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q= and Database name to test?allowLoadLocalInfile=true# (for mysql-connector-java version <= 8.14,just setting the database name normally) and test to connect your malicious mysql server. you can get the file in your fake-server-files directory. !image
Impact
An arbitrary file read vulnerability allows any unauthenticated user to read the file on the server.
The data import functionality in OpenRefine through 3.1 allows an XML External Entity (XXE) attack through a crafted (zip) file, allowing attackers to read arbitrary files.
OpenRefine before 3.2 beta allows directory traversal via a relative pathname in a ZIP archive.