신뢰할 수 없는 데이터의 역직렬화
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