집 >
백엔드 개발 >
C++ >
Json.Net `TypeNameHandling` 설정(자동)이 외부 JSON 데이터 공격에 취약합니까?
Json.Net `TypeNameHandling` 설정(자동)이 외부 JSON 데이터 공격에 취약합니까?
DDD
풀어 주다: 2025-01-07 14:39:42
원래의
957명이 탐색했습니다.
Json.Net TypeNameHandling을 Auto로 설정하면 외부 JSON 데이터가 위협을 일으킬 수 있나요?
JSON 역직렬화에서 Json의 TypeNameHandling 설정입니다. Net은 잠재적인 위협을 완화하는 데 중요한 역할을 합니다. 그러나 사용자가 제공한 JSON 데이터와 함께 이 설정을 사용할 때의 안전성에 대한 우려는 여전히 남아 있습니다. 문제를 자세히 조사하고 잠재적인 위험과 주의 사항을 살펴보겠습니다.
TypeNameHandling의 취약점
외부 JSON 페이로드는 다음을 지정하는 "$type" 속성을 포함하도록 조작될 수 있습니다. 역직렬화 유형. 이러한 유형의 유효성을 주의 깊게 검증하지 않으면 공격자는 이를 악용하여 "공격 가젯"으로 알려진 불량 개체를 인스턴스화할 수 있습니다. 이러한 가젯은 RCE(원격 코드 실행) 또는 파일 시스템 조작과 같은 악의적인 작업을 실행할 수 있습니다.
보호 조치
Json.Net은 이러한 공격을 방지하기 위한 보호 장치를 구현했습니다. :
알 수 없는 속성 무시: 알 수 없는 속성을 무시합니다. 속성을 사용하여 외부 "$type" 속성이 있는 JSON 페이로드를 무해하게 렌더링합니다.
직렬화 호환성: 다형성 값 역직렬화 중에 확인된 유형이 예상 유형과 일치하는지 확인합니다. 그렇지 않은 경우 예외가 발생합니다.
잠재적 허점
이러한 조치에도 불구하고 공격 도구가 여전히 구축될 수 있는 특정 상황이 있습니다. 명백히 유형이 지정되지 않은 멤버가 없는 경우:
Untyped 컬렉션: ArrayList, List
세미 유형 컬렉션: 런타임 유형 유효성 검사를 지원하는 CollectionBase에서 파생된 컬렉션을 역직렬화하면 가젯용 창을 생성할 수 있습니다.
공유 기본 유형: 공격 가젯(예: ICollection, IDisposable)이 공유하는 인터페이스 또는 기본 유형으로 선언된 다형성 멤버는 취약점을 유발할 수 있습니다.
ISerialized 인터페이스: ISerialize를 구현하는 유형은 의도치 않게 역직렬화될 수 있습니다. 유형이 지정되지 않은 멤버는 공격에 노출됩니다.
조건부 직렬화: ShouldSerializeAttribute에서 직렬화되지 않은 것으로 표시된 멤버는 JSON에 있는 경우 여전히 역직렬화될 수 있습니다. 페이로드.
권장사항
위험을 최소화하려면 다음 권장사항을 고려하세요.
알 수 없는 유형 검증: 사용자 정의 SerializationBinder를 구현하여 들어오는 직렬화된 유형을 확인하고 승인되지 않은 유형을 거부합니다.
유형이 지정되지 않은 멤버 방지: 데이터가 다음과 같은지 확인하세요. 모델에는 객체, 동적 또는 기타 잠재적으로 악용 가능한 유형의 멤버가 포함되어 있지 않습니다. 유형.
DefaultContractResolver 설정: DefaultContractResolver.IgnoreSerializedInterface 및 DefaultContractResolver.IgnoreSerializedAttribute를 true로 설정하는 것이 좋습니다.
직렬화되지 않은 멤버에 대한 코드 검토: 확인 직렬화되지 않은 것으로 표시된 멤버 예상치 못한 상황에서도 역직렬화되지 않습니다.
이러한 모범 사례를 준수하면 Json.Net TypeNameHandling을 자동으로 설정하여 외부 JSON 데이터가 시스템을 손상시킬 가능성을 크게 줄일 수 있습니다.
위 내용은 Json.Net `TypeNameHandling` 설정(자동)이 외부 JSON 데이터 공격에 취약합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!