🇰🇷 한글 설명
MessagePack for C#의 ExpandoObjectFormatter.Deserialize 과정에서 대량의 고유 키를 가진 맵을 처리할 때 CPU와 메모리 할당량이 기하급수적으로 증가하는 취약점입니다. 이는 ExpandoObject 내부의 배열 구조로 인해 발생하는 이차 시간 복잡도 문제로, 공격자가 제어하는 대규모 맵을 통해 서비스 거부(DoS)를 유발할 수 있습니다.
💡 쉬운 설명
데이터를 변환하는 과정에서 너무 많은 정보를 한꺼번에 넣으려고 하면 컴퓨터가 과부하에 걸려 멈추게 되는 문제입니다. 공격자가 특수하게 조작된 데이터를 보내 시스템을 느리게 만들거나 마비시킬 수 있습니다.
🇺🇸 원문 (English)
MessagePack for C# is a MessagePack serializer for C#. Prior to 2.5.301 and 3.1.7, ExpandoObjectFormatter.Deserialize populates System.Dynamic.ExpandoObject by calling IDictionary<string, object>.Add for each map entry. ExpandoObject internally maintains member names in array-like structures, so inserting many distinct keys can require repeated linear scans and array copies. For large attacker-controlled maps, this produces quadratic CPU and allocation behavior. The issue is especially surprising because ExpandoObjectResolver.Options is configured with MessagePackSecurity.UntrustedData, but collision-resistant dictionary comparers cannot protect ExpandoObject insertion internals. This vulnerability is fixed in 2.5.301 and 3.1.7.
📍 영향받는 시스템
MessagePack for C# 버전 2.5.301 미만 및 3.1.7 미만
⚔️ 공격 벡터
공격자가 조작된 대규모 키-값 쌍을 포함한 MessagePack 데이터를 전송하여 CPU 및 메모리 자원 고갈 유도
🛡️ 대응 방법
MessagePack for C# 라이브러리를 버전 2.5.301 또는 3.1.7 이상으로 업데이트
🔧 검증 코드
출력된 MessagePack 패키지의 버전이 2.5.301 또는 3.1.7보다 낮은지 확인
dotnet list package | grep MessagePack