Skip to content

Commit f95389e

Browse files
authored
[feat_1194][security][fix Pre-Auth Remote Code Execution via Authentication Bypass + JDBC URL Injection #1194] (#1197)
Co-authored-by: xingyi <xingyi@dtstack.com>
1 parent c6a12f9 commit f95389e

4 files changed

Lines changed: 32 additions & 2 deletions

File tree

  • taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor
  • taier-datasource/taier-datasource-plugin
    • taier-datasource-plugin-libra
    • taier-datasource-plugin-postgresql
    • taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms

taier-data-develop/src/main/java/com/dtstack/taier/develop/interceptor/LoginInterceptor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,25 @@
2121
import com.dtstack.taier.common.constant.CommonConstant;
2222
import com.dtstack.taier.common.exception.ErrorCode;
2323
import com.dtstack.taier.common.exception.TaierDefineException;
24+
import com.dtstack.taier.develop.service.user.TokenService;
2425
import com.dtstack.taier.develop.utils.CookieUtil;
2526
import org.apache.commons.lang3.StringUtils;
2627
import org.slf4j.Logger;
2728
import org.slf4j.LoggerFactory;
2829
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
2930

31+
import javax.annotation.Resource;
3032
import javax.servlet.http.HttpServletRequest;
3133
import javax.servlet.http.HttpServletResponse;
3234

3335
public class LoginInterceptor extends HandlerInterceptorAdapter {
3436

3537
private static Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class);
3638

39+
40+
@Resource
41+
private TokenService tokenService;
42+
3743
@Override
3844
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
3945
String requestURI = request.getRequestURI();
@@ -47,6 +53,8 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
4753
if (StringUtils.isBlank(token)) {
4854
throw new TaierDefineException(ErrorCode.NOT_LOGIN);
4955
}
56+
tokenService.decryption(token);
57+
5058
return true;
5159
}
5260
}

taier-datasource/taier-datasource-plugin/taier-datasource-plugin-libra/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<jar.package.name>libra</jar.package.name>
2020
<jar.name>Libra</jar.name>
2121

22-
<postgresql.version>42.2.2</postgresql.version>
22+
<postgresql.version>42.2.25</postgresql.version>
2323
</properties>
2424

2525
<dependencies>

taier-datasource/taier-datasource-plugin/taier-datasource-plugin-postgresql/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<jar.package.name>postgresql</jar.package.name>
1919
<jar.name>Postgresql</jar.name>
2020

21-
<postgresql.version>42.2.2</postgresql.version>
21+
<postgresql.version>42.2.25</postgresql.version>
2222
</properties>
2323

2424
<dependencies>

taier-datasource/taier-datasource-plugin/taier-datasource-plugin-rdbms/src/main/java/com/dtstack/taier/datasource/plugin/rdbms/ConnFactory.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@
4040
import java.sql.Connection;
4141
import java.sql.DriverManager;
4242
import java.sql.Statement;
43+
import java.util.Arrays;
44+
import java.util.HashSet;
4345
import java.util.List;
4446
import java.util.Properties;
47+
import java.util.Set;
4548
import java.util.concurrent.ConcurrentHashMap;
4649
import java.util.concurrent.ExecutorService;
4750
import java.util.concurrent.LinkedBlockingQueue;
@@ -75,6 +78,14 @@ public class ConnFactory {
7578

7679
private static final String CP_POOL_KEY = "url:%s,username:%s,password:%s,properties:%s";
7780

81+
/**
82+
* filter with db property
83+
*/
84+
private static final Set<String> DANGEROUS_PARAMS = new HashSet<>(Arrays.asList(
85+
"autoDeserialize", "allowLoadLocalInfile", "allowUrlInLocalInfile",
86+
"queryInterceptors", "socketFactory", "socketFactoryArg"
87+
));
88+
7889
/**
7990
* 线程池 - 用于部分数据源获取连接超时处理
8091
*/
@@ -157,6 +168,17 @@ protected Connection getSimpleConn(ISourceDTO source) throws Exception {
157168
init();
158169
DriverManager.setLoginTimeout(30);
159170
log.info("datasource connected, url : {}, userName : {}, kerberosConfig : {}", rdbmsSourceDTO.getUrl(), rdbmsSourceDTO.getUsername(), rdbmsSourceDTO.getKerberosConfig());
171+
// property check
172+
String urlLower = rdbmsSourceDTO.getUrl().toLowerCase();
173+
for (String dangerousParam : DANGEROUS_PARAMS) {
174+
if (urlLower.contains("?" + dangerousParam + "=") ||
175+
urlLower.contains("&" + dangerousParam + "=") ||
176+
urlLower.contains("?" + dangerousParam + "%3d") ||
177+
urlLower.endsWith("?" + dangerousParam)) {
178+
throw new SecurityException("Dangerous JDBC parameter detected: " + dangerousParam);
179+
}
180+
}
181+
160182
return DriverManager.getConnection(rdbmsSourceDTO.getUrl(), PropertiesUtil.convertToProp(rdbmsSourceDTO));
161183
}
162184

0 commit comments

Comments
 (0)