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

Deserialization of Untrusted Data

설명

신뢰할 수 없는 데이터의 역직렬화는 공격자가 악의적으로 조작된 직렬화 데이터를 애플리케이션에 주입하여 임의의 코드를 실행시키거나 애플리케이션의 동작을 변경하는 취약성입니다. 이는 주로 직렬화된 객체를 네트워크를 통해 전송받아 역직렬화하는 과정에서 발생합니다.

잠재적 영향

  • 임의 코드 실행: 공격자가 임의의 코드를 실행하여 시스템을 손상시킬 수 있습니다.

  • 데이터 변조: 공격자가 데이터를 조작하여 애플리케이션의 무결성을 해칠 수 있습니다.

  • 정보 유출: 민감한 데이터가 공격자에게 노출될 수 있습니다.

해결 방법

  • 신뢰할 수 없는 데이터 역직렬화 금지: 신뢰할 수 없는 데이터의 역직렬화를 피합니다.

  • 데이터 검증: 역직렬화하기 전에 데이터의 무결성과 신뢰성을 검증합니다.

  • 보안 라이브러리 사용: 안전한 역직렬화 라이브러리를 사용하여 보안 취약점을 최소화합니다.

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

Unsafe pickle deserialization & Safe json deserialization

# Unsafe pickle deserialization
import pickle

def unsafe_loads(data):
    return pickle.loads(data)

설명:

  • 취약한 코드: pickle 모듈을 사용하여 역직렬화할 경우, 악의적으로 조작된 데이터가 임의의 코드를 실행할 수 있습니다.

  • 안전한 코드: json 모듈을 사용하여 안전하게 데이터를 역직렬화합니다.

Unsafe YAML deserialization & Safe YAML deserialization

설명:

  • 취약한 코드: yaml.load를 사용할 경우, 악의적으로 조작된 데이터가 임의의 코드를 실행할 수 있습니다.

  • 안전한 코드: yaml.safe_load를 사용하여 안전하게 데이터를 역직렬화합니다.

참조

Last updated