dev.Log

Spring 1.X 대 보안취약점과 3.X와 비교 본문

BACKEND.*/JAVA

Spring 1.X 대 보안취약점과 3.X와 비교

초코푸딩 2024. 5. 31. 16:56

CVE-2017-8046: Spring Data REST의 JSON 패치 취약점

문제 설명:

  • 이 취약점은 Spring Data REST 부분에서 JSON 패치 요청을 처리하는 방식에 있었습니다. JSON 패치는 JSON 문서의 일부를 수정하기 위한 방법입니다. 취약점은 PATCH 요청이 서버로 전송될 때, 악성 사용자가 JSON 패치 작업을 통해 서버의 데이터에 임의로 접근하거나 수정할 수 있는 문제였습니다.
  • 공격자는 이 취약점을 이용하여 애플리케이션 데이터를 조작하거나 악의적인 코드 실행을 시도할 수 있었습니다.

기술적 배경:

  • Spring Data REST는 HTTP 요청을 자동으로 데이터 엔티티의 CRUD(Create, Read, Update, Delete) 작업으로 매핑합니다. 이 과정에서, 내부적인 데이터 핸들링 메커니즘이 적절한 인증과 검증 없이 사용자의 입력을 처리했습니다.

해결 방법:

  • Spring 개발팀은 이 문제를 해결하기 위해 보안 패치를 배포했습니다. 새로운 버전에서는 JSON 패치 처리 로직에 보안 검사를 강화하고, 인증되지 않은 사용자의 수정 요청을 제한하는 방식으로 코드가 개선되었습니다.
  • 사용자는 가능한 빨리 Spring Data REST의 최신 버전으로 업데이트하여 이 취약점을 해결해야 합니다

 


CVE-2018-1270: Spring Framework의 원격 코드 실행 취약점

문제 설명:

  • 이 취약점은 Spring Framework를 사용하여 구축된 Java 애플리케이션 내에서 발생했으며, 특히 Spring Messaging 모듈에서 사용하는 STOMP 프로토콜 처리와 관련이 있습니다. 공격자는 특수하게 조작된 메시지를 웹소켓 서버에 보내 원격 코드 실행을 시도할 수 있었습니다.

기술적 배경:

  • STOMP(심플 텍스트 오리엔티드 메시징 프로토콜)는 간단한 텍스트 기반의 메시징 프로토콜입니다. Spring에서는 이 프로토콜을 통해 클라이언트와 서버 간의 메시징을 구현합니다.
  • 취약점은 메시지를 역직렬화(deserialization)할 때 발생했습니다. 역직렬화 과정에서 안전하지 않은 데이터 처리가 이루어질 경우, 악의적인 코드가 실행될 수 있습니다.

해결 방법:

  • Spring 개발팀은 이 문제를 해결하기 위해 역직렬화 과정에서의 보안을 강화하는 패치를 제공했습니다. 새로운 버전에서는 안전하지 않은 역직렬화를 방지하고, 사용자 입력에 대한 검증 절차를 강화했습니다.
  • 개발자들은 Spring Framework와 Spring Boot를 가능한 최신 버전으로 업그레이드하여 이러한 유형의 취약점으로부터 보호받을 수 있습니다.

Spring Boot 1.x에서 3.x로 업그레이드할 때 고려해야 할 주요 사항들은 다음과 같습니다. 이러한 변화는 광범위한 호환성 문제, 기능 개선 및 보안 강화와 관련이 있습니다.

1. 호환성 체크

  • 자바 버전: Spring Boot 3.x는 Java 17 이상을 필요로 합니다. 기존에 Java 8이나 Java 11을 사용하고 있었다면, Java 버전을 업그레이드해야 합니다.
  • 스프링 프레임워크 버전: Spring Boot 3.x는 Spring Framework 6.x를 기반으로 합니다. 이는 리액티브 프로그래밍 지원, 함수형 API 개선 등 많은 내부 API 변경 사항을 포함합니다.

2. 의존성 관리

  • 라이브러리 업데이트: Spring Boot 3.x로 업그레이드하면서 많은 내부 라이브러리 및 프레임워크가 최신 버전으로 업데이트됩니다. 사용 중인 외부 라이브러리와의 호환성도 확인해야 합니다.
  • Gradle/Maven 설정: 빌드 도구 설정을 살펴보고 필요한 변경 사항을 적용해야 합니다. 예를 들어, 의존성 관리를 위한 구성이 변경될 수 있으며, 불필요한 의존성은 제거해야 할 수 있습니다.

3. 구성 변경

  • application.properties/yml 파일: Spring Boot 3.x에서는 몇몇 프로퍼티의 키가 변경되거나 제거될 수 있습니다. 이에 따라 구성 파일을 검토하고 필요에 따라 수정해야 합니다.
  • 보안 설정: Spring Security 설정이 업데이트될 수 있으므로, 보안 구성을 검토하고 최신 권장 사항에 맞게 조정해야 합니다.

4. 기능 변화 및 제거

  • Deprecated 기능: 1.x에서 사용하던 일부 기능이 3.x에서는 제거되거나 변경되었을 수 있습니다. 예를 들어, Actuator 엔드포인트, 데이터 접근 레이어, MVC 설정 등이 해당됩니다.
  • 새로운 기능: WebFlux, RSocket, GraalVM 네이티브 이미지 지원 등 새로운 기능과 기술이 추가되었습니다. 이러한 기능을 활용하려면 추가 학습과 구현이 필요할 수 있습니다.

5. 테스트 및 배포

  • 단위 테스트 및 통합 테스트: 기존 테스트 케이스를 업데이트하고, 새로운 플랫폼에서 실행하여 모든 기능이 정상적으로 동작하는지 확인해야 합니다.
  • 배플 전략: 가능하면 블루/그린 배포, 카나리아 릴리즈 등 점진적인 배포 전략을 채택하여 운영 환경에 미치는 리스크를 최소화하는 것이 좋습니다.


Java 8로는 Spring Boot 3.x 버전을 사용할 수 없습니다. Spring Boot 3.x는 Spring Framework 6.x를 기반으로 하며, 이 버전은 Java 17 이상을 필요로 합니다. 따라서, Spring Boot 3.x를 사용하기 위해서는 자바 환경을 최소 Java 17로 업그레이드해야 합니다.

 


1. 기술 스택 업데이트

  • Servlet API: Servlet 4.0 이상이 필요합니다. 이전 버전의 서블릿 API는 더 이상 지원되지 않습니다.
  • Java EE 기술: Java EE 관련 라이브러리와 API 중 일부가 Spring Framework 6.x에서는 제거되었습니다. 예를 들어, JAX-WS(웹 서비스)와 JMS(메시징 서비스) 등이 있습니다.

2. 데이터 접근 기술

  • JDBC & ORM: 예전에는 JdbcTemplate, Hibernate, JPA 등에 대한 자동 구성이 제공되었지만, 이제는 더 명확한 구성이 요구됩니다.
  • 리액티브 프로그래밍 지원: Spring Data의 리액티브 프로그래밍 지원이 확대되면서, 기존의 명령형 데이터 접근 코드가 점차적으로 사용 중단될 수 있습니다.

3. 보안 설정

  • Spring Security 구성: Spring Security의 자동 구성이 변경되었으멀로, 사용자는 더 세밀한 보안 구성을 해야 할 수 있습니다. 이는 보다 향상된 보안 프로토콜과 기술을 지원하기 위한 조치입니다.

4. 로깅

  • Logback: Spring Boot 3.x에서는 로깅 구성 방식이 업데이트되어, 이전 버전의 로깅 설정 방식이 호환되지 않을 수 있습니다.

5. API 및 프로퍼티 변경

  • 환경 및 구성 프로퍼티: 여러 환경 및 구성 프로퍼티가 변경되거나 제거되었습니다. 예를 들어, 서버 설정, 데이터베이스 연결 설정 등이 새로운 방식으로 관리됩니다.
  • YAML 구성: YAML 파일을 사용하는 구성 방식에도 일부 변경이 있을 수 있습니다, 특히 복잡한 구조의 설정에서 더 명확한 지침이 요구됩니다.

6. Actuator Endpoints

  • Actuator의 엔드포인트 변경: Actuator의 일부 엔드포인트가 변경되거나 제거되었습니다. 이는 시스템의 상태를 모니터링하고 관리하는데 사용되는 기능입니다.

7. 프로그래밍 모델

  • 함수형 프로그래밍: Spring Framework 6와 Spring Boot 3에서는 함수형 프로그래밍 모델을 더욱 강조하고 있습니다. 이에 따라, 애너테이션 기반의 구성보다는 함수형 스타일의 API가 증가하고 있습니다.

'BACKEND.* > JAVA' 카테고리의 다른 글

스레드  (0) 2024.12.22
프록시  (0) 2024.06.13
템플릿 콜백 패턴  (0) 2024.05.31
전략 패턴  (0) 2024.05.31
템플릿 메서드 패턴  (0) 2024.05.31
Comments