🇰🇷 한글 설명
PostgreSQL 기반의 .NET 문서 DB인 Marten의 특정 버전에서 LINQ 및 테넌트 관리 경로를 통해 공격자가 제어 가능한 문자열이 이스케이프 처리 없이 SQL 리터럴에 삽입되는 취약점이 발견되었습니다. 이를 통해 공격자는 필터링을 우회하거나 데이터를 탈취할 수 있으며, 설정에 따라 데이터 수정까지 가능합니다.
💡 쉬운 설명
데이터베이스를 다루는 프로그램에서 사용자가 입력한 값을 검증 없이 명령어로 바로 사용하면서 발생하는 보안 구멍입니다. 나쁜 의도를 가진 사람이 특수 문자를 입력하면 데이터베이스의 보안 벽을 뚫고 정보를 몰래 빼가거나 내용을 바꿀 수 있습니다.
🇺🇸 원문 (English)
Marten is a .NET Transactional Document DB and Event Store on PostgreSQL. From version 7.0.0 until 9.13.0, several Marten LINQ and tenant-management paths interpolate runtime, potentially attacker-controlled strings into single-quoted SQL literals without escaping or parameterization. The primary confirmed vector is a dictionary indexer key used by Where filters in src/Marten/Linq/Members/Dictionaries/DictionaryItemMember.cs. Additional affected sinks include SelectParser.cs, DatabaseScopedTenantPartitions.cs, and DeleteAllForTenant.cs reached through IEventStore.DeleteProjectionProgressAsync, while DictionaryContainsKeyFilter.cs (Newtonsoft serializer only; System.Text.Json is not affected) handles ContainsKey calls. Events/Daemon/Internals/EventLoader.cs contains a related per-tenant partition-pruning literal that the advisory identifies as a defense-in-depth sink. A crafted single quote can escape the generated literal, enabling filter or multi-tenant authorization bypass and blind data exfiltration, and deployments that permit semicolon-batched Npgsql statements may also allow data modification. This issue is fixed in version 9.13.0.
📍 영향받는 시스템
Marten version 7.0.0 ~ 9.13.0
⚔️ 공격 벡터
조작된 단일 인용구(')를 포함한 문자열을 LINQ 필터나 테넌트 관리 기능에 입력하여 SQL 인젝션 수행
🛡️ 대응 방법
Marten 버전을 9.13.0 이상으로 업데이트
🔧 검증 코드
출력된 Marten의 버전이 9.13.0 미만인지 확인하여 취약 여부를 판단합니다.
dotnet list package | grep Marten