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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/n0n4m3x41/cve-2026-22738-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & Education
GitHubn0n4m3x41/cve-2026-22738-poc

CVE-2026-22738-POC

# CVE-2026-22738 개념 증명 익스플로잇 Spring AI SimpleVectorStore의 치명적인 SpEL 주입 RCE로, 인증되지 않은 OS 명령 실행을 시연합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-22738 — Spring AI SimpleVectorStore의 SpEL 주입 RCE

CVSS CWE Status

SimpleVectorStore.similaritySearch()의 Spring Expression Language(SpEL) 주입을 통한 인증 없는 원격 코드 실행.

영향을 받는 버전

| 플래그 | 기본값 | 설명 | |---|---|---| | `--target` | `http://localhost:8082` | 취약 애플리케이션의 기본 URL | | `--wait` | 꺼짐 | 대상이 준비될 때까지 폴링 (`docker compose up` 후 유용) |
아티팩트취약 버전수정 버전
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

수정 커밋: ba9220b22383e430d5f801ce8e4fa01cf9e75f29


취약점

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

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

필터 키에 위 코드를 주입하여 인증 없는 OS 명령 실행을 달성할 수 있습니다.

우회 세부 사항

단순한 주입은 기본적으로 동작하지 않습니다 — 두 가지 파서 특성을 우회해야 합니다:

  1. 작은따옴표 제거 — '로 시작하는 키는 따옴표로 묶인 문자열로 처리됩니다. 바깥쪽 따옴표가 제거되어 페이로드가 손상됩니다.
  2. 큰따옴표 래퍼 — 페이로드를 "..."로 감싸면 파서가 바깥쪽 큰따옴표를 제거하고, 내부 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 수준 명령 실행이 확인됩니다.


사용 방법

사전 요구 사항:

root@kitploit:~
pip install requests

익스플로잇 실행:

root@kitploit:~
python3 exploit.py [--target http://localhost:8082] [--wait]
image

Docker Desktop(macOS/Windows): 콜백 페이로드에는 127.0.0.1 대신 host.docker.internal을 사용하세요.


익스플로잇 단계

PoC는 5개의 순차적 단계를 실행합니다:

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

면책 조항

이 개념 증명은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에 사용하지 마십시오.

도구 다운로드