This is an automated email from the ASF dual-hosted git repository.
fanjia pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/seatunnel-web.git
The following commit(s) were added to refs/heads/main by this push:
new 4caea251 [Hotfix] Fix arbitrary file readvulnerability on mysql
jdbc(starrocks/tidb) (#168)
4caea251 is described below
commit 4caea2511faf2e6ca38c1a0085b6db6ccfb3253f
Author: hailin0 <[email protected]>
AuthorDate: Wed Jun 12 14:49:09 2024 +0800
[Hotfix] Fix arbitrary file readvulnerability on mysql jdbc(starrocks/tidb)
(#168)
link
https://github.com/apache/security-site/commit/5a193b7e29dc616d019784ca9fbf1671f3f0b4d2
---
.../jdbc/StarRocksJdbcDataSourceChannel.java | 13 +++++++++----
.../plugin/tidb/jdbc/TidbJdbcDataSourceChannel.java | 12 ++++++++----
.../datasource/plugin/starrocks/StarRocksCatalog.java | 19 +++++++++++++++----
3 files changed, 32 insertions(+), 12 deletions(-)
diff --git
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/jdbc/StarRocksJdbcDataSourceChannel.java
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/jdbc/StarRocksJdbcDataSourceChannel.java
index 27165338..b8b8f5e5 100644
---
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/jdbc/StarRocksJdbcDataSourceChannel.java
+++
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/jdbc/StarRocksJdbcDataSourceChannel.java
@@ -36,6 +36,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -169,11 +170,15 @@ public class StarRocksJdbcDataSourceChannel implements
DataSourceChannel {
String url =
JdbcUtils.replaceDatabase(
requestParams.get(StarRocksOptionRule.URL.key()),
databaseName);
+
+ Properties info = new java.util.Properties();
+ info.put("autoDeserialize", "false");
+ info.put("allowLoadLocalInfile", "false");
+ info.put("allowLoadLocalInfileInPath", "");
if (requestParams.containsKey(StarRocksOptionRule.USER.key())) {
- String username =
requestParams.get(StarRocksOptionRule.USER.key());
- String password =
requestParams.get(StarRocksOptionRule.PASSWORD.key());
- return DriverManager.getConnection(url, username, password);
+ info.put("user",
requestParams.get(StarRocksOptionRule.USER.key()));
+ info.put("password",
requestParams.get(StarRocksOptionRule.PASSWORD.key()));
}
- return DriverManager.getConnection(url);
+ return DriverManager.getConnection(url, info);
}
}
diff --git
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-tidb/src/main/java/org/apache/seatunnel/datasource/plugin/tidb/jdbc/TidbJdbcDataSourceChannel.java
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-tidb/src/main/java/org/apache/seatunnel/datasource/plugin/tidb/jdbc/TidbJdbcDataSourceChannel.java
index 90f92937..59a09ee9 100644
---
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-tidb/src/main/java/org/apache/seatunnel/datasource/plugin/tidb/jdbc/TidbJdbcDataSourceChannel.java
+++
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-tidb/src/main/java/org/apache/seatunnel/datasource/plugin/tidb/jdbc/TidbJdbcDataSourceChannel.java
@@ -36,6 +36,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -176,11 +177,14 @@ public class TidbJdbcDataSourceChannel implements
DataSourceChannel {
String url =
JdbcUtils.replaceDatabase(
requestParams.get(TidbOptionRule.URL.key()),
databaseName);
+ Properties info = new java.util.Properties();
+ info.put("autoDeserialize", "false");
+ info.put("allowLoadLocalInfile", "false");
+ info.put("allowLoadLocalInfileInPath", "");
if (requestParams.containsKey(TidbOptionRule.USER.key())) {
- String username = requestParams.get(TidbOptionRule.USER.key());
- String password = requestParams.get(TidbOptionRule.PASSWORD.key());
- return DriverManager.getConnection(url, username, password);
+ info.put("user", requestParams.get(TidbOptionRule.USER.key()));
+ info.put("password",
requestParams.get(TidbOptionRule.PASSWORD.key()));
}
- return DriverManager.getConnection(url);
+ return DriverManager.getConnection(url, info);
}
}
diff --git
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/StarRocksCatalog.java
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/StarRocksCatalog.java
index 4acc43e6..14a1e1b4 100644
---
a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/StarRocksCatalog.java
+++
b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-starrocks/src/main/java/org/apache/seatunnel/datasource/plugin/starrocks/StarRocksCatalog.java
@@ -39,6 +39,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
+import java.util.Properties;
import java.util.Set;
import static com.google.common.base.Preconditions.checkArgument;
@@ -79,7 +80,7 @@ public class StarRocksCatalog {
public List<String> listDatabases() throws CatalogException {
List<String> databases = new ArrayList<>();
- try (Connection conn = DriverManager.getConnection(defaultUrl,
username, pwd);
+ try (Connection conn = getConnection(defaultUrl);
PreparedStatement ps = conn.prepareStatement("SHOW
DATABASES;");
ResultSet rs = ps.executeQuery(); ) {
@@ -103,7 +104,7 @@ public class StarRocksCatalog {
throw new DatabaseNotExistException(this.catalogName,
databaseName);
}
- try (Connection conn = DriverManager.getConnection(baseUrl +
databaseName, username, pwd);
+ try (Connection conn = getConnection(baseUrl + databaseName);
PreparedStatement ps = conn.prepareStatement("SHOW TABLES;");
ResultSet rs = ps.executeQuery()) {
@@ -127,7 +128,7 @@ public class StarRocksCatalog {
}
String dbUrl = baseUrl + tablePath.getDatabaseName();
- try (Connection conn = DriverManager.getConnection(dbUrl, username,
pwd);
+ try (Connection conn = getConnection(dbUrl);
PreparedStatement statement =
conn.prepareStatement(
String.format(
@@ -178,7 +179,7 @@ public class StarRocksCatalog {
protected Optional<PrimaryKey> getPrimaryKey(String schema, String table)
throws SQLException {
List<String> pkFields = new ArrayList<>();
- try (Connection conn = DriverManager.getConnection(defaultUrl,
username, pwd);
+ try (Connection conn = getConnection(defaultUrl);
PreparedStatement statement =
conn.prepareStatement(
String.format(
@@ -222,4 +223,14 @@ public class StarRocksCatalog {
return false;
}
}
+
+ protected Connection getConnection(String url) throws SQLException {
+ Properties info = new java.util.Properties();
+ info.put("autoDeserialize", "false");
+ info.put("allowLoadLocalInfile", "false");
+ info.put("allowLoadLocalInfileInPath", "");
+ info.put("user", username);
+ info.put("password", pwd);
+ return DriverManager.getConnection(url, info);
+ }
}