개요
Spring 프레임워크는 엔터프라이즈급 애플리케이션을 구축하기 위한 포괄적인 Java 프레임워크입니다. 이 프레임워크는 애플리케이션 구성, 데이터 액세스 및 보안을 관리하는 다양한 도구를 제공하면서 Java를 기본 언어로 사용할 수 있도록 하여 웹 애플리케이션 개발을 간소화하는 강력하고 유연한 프로그래밍 모델을 제공합니다.
스프링 프레임워크에서 부적절한 로케일 취약점(CVE-2024-38820)이 발견되어 필드가 예상대로 보호되지 않을 수 있습니다.
이 문제는 모든 버전의 Spring 프레임워크에 영향을 줍니다.
세부 정보
모듈 정보
- 제품: 스프링 프레임워크
- 영향을 받는 패키지: spring-context, spring-core, spring-web, spring-webflux, spring-webmvc, spring-websocket
- Affected versions: >= 6.1.0, < 6.1.14, >= 6.0.0, < 6.0.25, < 5.3.41
- GitHub 리포지토리: https://github.com/spring-projects/spring-framework
- 패키지 관리자: Maven
취약점 정보
CVE-2022-22968에 대한 수정으로 대소문자를 구분하지 않는 대부분의 위험성이 해결되었지만 여전히 disallowedFields 메서드에 잠재적인 취약점이 남아있습니다. Java의 toLowerCase 메서드는 JVM의 기본 로캘을 사용하므로 필드와 JVM의 기본 로캘에 따라 필드가 예상대로 보호되지 않을 수 있습니다.
재현 단계
DataBinderTests의 다음 테스트는 잠재적인 취약점을 보여줍니다. 이 테스트는 허용되지 않는 필드가 설정되어 테스트가 실패하는 로케일로 JVM이 실행되는 시나리오를 보여줍니다. 수정 사항을 적용하면 동일한 테스트가 통과됩니다.
@Test
void setDisallowedFields_CVE_2024_38820() throws BindException {
// switching the default locale causes this test to break before the fix
Locale.setDefault(Locale.forLanguageTag("tr-TR"));
TestBean rod = new TestBean();
DataBinder binder = new DataBinder(rod);
binder.setDisallowedFields("JEDI");
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.add("name", "Rod");
pvs.add("jedi", "true");
binder.bind(pvs);
binder.close();
assertThat(rod.getName()).as("changed name correctly").isEqualTo("Rod");
assertThat(binder.getBindingResult().getSuppressedFields()).containsExactlyInAnyOrder("jedi");
완화
스프링 프레임워크 5.3은 더 이상 커뮤니티에서 지원되지 않습니다. 커뮤니티 지원 버전에는 이 문제를 해결하기 위한 업데이트가 제공되지 않습니다. 자세한 내용은 여기를 참조하세요.
영향을 받는 구성 요소의 사용자는 다음 완화 방법 중 하나를 적용해야 합니다:
- 영향을 받는 애플리케이션을 지원되는 Spring 프레임워크 버전으로 업그레이드하세요.
- 히어로데브즈와 같은 상용 지원 파트너를 활용하여 EOL 이후 보안 지원을 받으세요.
신용
저희가 지원하는 오픈 소스 소프트웨어에서 새로운 취약점이 수정될 때마다 알림을 받으세요.