신뢰할 수 없는 데이터의 역직렬화

Deserialization of Untrusted Data

설명

역직렬화된 데이터의 유효성을 충분히 확인하지 않고 신뢰할 수 없는 데이터를 역직렬화하는 경우 발생하는 취약점입니다. 이는 서버 탈취와 같은 심각한 취약점으로 이어질수가 있습니다.

잠재적 영향

  • 애플리케이션 데이터 수정 (Modify Application Data): 공격자가 허가받지 않은 데이터를 수정하거나 예상치 못한 데이터를 시스템에 주입할 수 있습니다.

  • 예상치 못한 상태 (Unexpected State): 시스템에서 예상하지 못한 동작이 발생하거나 프로그램 상태가 비정상적으로 변질될 수 있습니다.

  • 서비스 거부 (DoS) 공격: 지속적으로 높은 CPU 리소스를 소비하거나 처리 대기를 유발하여 서비스 파괴 가능성을 야기할 수 있습니다.

  • 컨텍스트에 따른 다양한 결과: 상황에 따라 무단 액션이나 원하지 않는 코드 실행 등 다양한 결과를 초래할 수 있습니다.

해결 방법

  1. ObjectInputStream 객체 대신 안전한 직렬화 및 역직렬화 라이브러리 사용히도록 합니다.

  2. 역직렬화 시 입력 데이터를 철저하게 검증하여 허가된 데이터만 처리하도록 합니다.

  3. 메소드에서 필요하지 않은 객체나 자원의 역직렬화를 제거 또는 제한하도록 합니다.

  4. 입력값 유효성 검사를 강화하여 신뢰할 수 없는 데이터 거부하도록 합니다.

  5. 가장 최신의 보안 패치 및 라이브러리 유지하도록 합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 위험한 코드에서는 ObjectInputStream을 사용하여 신뢰할 수 없는 데이터를 역직렬화합니다. 이는 공격자가 악의적인 객체를 삽입할 수 있게 하여 예기치 않은 동작을 유발할 수 있습니다.

  • 안전한 코드: 안전한 코드에서는 ObjectMapper (Jackson 라이브러리)를 사용하여 JSON 데이터를 명시적으로 정의된 클래스(MyClass)로 변환합니다. 이는 직렬화된 데이터의 구조를 엄격히 제어함으로써 예기치 않은 객체 삽입을 방지합니다.

관련 CVE

참조

Last updated