🇰🇷 한글 설명
MongoDB Entity Framework Core 공급자는 ExecuteUpdate 호출에 업데이트 대상 엔티티를 읽는 setter가 함께 포함된 경우 SetProperty에 전달되는 값의 특수 요소를 무력화하지 않습니다. 이 경우 업데이트는 집계 파이프라인으로 전송되며, $로 시작하는 호출자 제공 문자열이 데이터가 아닌 표현식으로 평가됩니다. 이러한 값에 영향을 줄 수 있는 주체는 업데이트 대상 레코드의 필드를 수정하거나 삭제하고, 같은 레코드의 다른 필드를 복사해 넣을 수 있습니다.
💡 쉬운 설명
데이터베이스 업데이트 과정에서 사용자가 입력한 값이 단순 글자가 아니라 명령어처럼 해석될 수 있는 문제입니다. 공격자가 이를 악용하면 다른 사람의 데이터 일부를 바꾸거나 지울 수 있습니다.
🇺🇸 원문 (English)
The MongoDB Entity Framework Core provider does not neutralize special elements in values passed to SetProperty when an ExecuteUpdate call also contains a setter that reads the entity being updated. In that case the update is sent as an aggregation pipeline, and a caller-supplied string beginning with $ is evaluated as an expression rather than stored as data. A party who can influence such a value may modify or remove fields in the records being updated, or copy other fields of the same record into them.
📍 영향받는 시스템
MongoDB Entity Framework Core 공급자를 사용하는 .NET 애플리케이션(해당 버전 상세 정보는 공식 권고 확인 필요)
⚔️ 공격 벡터
공격자가 $로 시작하는 문자열을 업데이트 값으로 전달해 집계 표현식으로 실행되도록 조작
🛡️ 대응 방법
MongoDB EF Core 공급자를 공식 패치된 최신 버전으로 업데이트하고, 사용자 입력 값을 신뢰하지 않도록 검증
🔧 검증 코드
출력된 MongoDB EF Core 패키지 버전이 패치된 버전보다 낮으면 취약하며, 공식 권고의 수정 버전과 비교해 판단
dotnet list package | grep -i mongodb