2026년 4월 21일, Microsoft가 Microsoft.AspNetCore.DataProtection NuGet 패키지의 권한 상승(Elevation of Privilege) 취약점에 대한 보안 권고와 함께 out-of-band 패치(10.0.7)를 공개했습니다. 운영 중인 ASP.NET Core 10 애플리케이션이 있다면 영향 여부를 즉시 확인하시고, 해당된다면 패치 적용과 더불어 DataProtection 키 링 회전까지 함께 검토하시기 바랍니다.
한 줄 요약
Microsoft.AspNetCore.DataProtection 10.0.0 ~ 10.0.6 버전의 관리형 인증 암호화기(managed authenticated encryptor)가 HMAC 검증 태그를 잘못 계산하는 회귀 버그가 있어, 공격자가 인증 쿠키·antiforgery 토큰 등 보호된 페이로드를 위조하거나 복호화할 수 있습니다.
취약점 개요
| 항목 | 값 |
|---|---|
| CVE | CVE-2026-40372 |
| 등급(Microsoft) | Important |
| CVSS 3.1 | 8.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) |
| 약점 분류 | CWE-347: Improper Verification of Cryptographic Signature |
| 영향 패키지 | Microsoft.AspNetCore.DataProtection |
| 영향 버전 | >= 10.0.0, <= 10.0.6 |
| 패치 버전 | 10.0.7 |
| 공개일 | 2026-04-21 |
참고: NVD 등 일부 외부 데이터베이스는 동일 CVE에 대해 9.1(HIGH) 점수를 부여하고 있습니다. Microsoft 공식 권고 기준 점수는 8.1입니다.
무엇이 잘못되었나
Microsoft.AspNetCore.DataProtection 10.0.0~10.0.6의 managed authenticated encryptor가 페이로드의 잘못된 바이트 구간에 대해 HMAC 검증 태그를 계산하고, 일부 경로에서는 계산된 해시를 폐기해 버리는 회귀가 있었습니다. 그 결과 CalculateAndValidateMac 단계에서 무결성 검증이 실질적으로 깨지며, 패딩 오라클(padding-oracle) 공격을 통한 페이로드 위조가 가능합니다.
이는 과거 MS10-070(레거시 ASP.NET 암호화 인프라의 패딩 오라클 취약점)과 능력 면에서 비교 가능한 수준의 결함입니다.
공격 시나리오
-
공격자가 인증 쿠키 등 보호된 페이로드를 위조하여 권한 있는 사용자로 인증
-
인증된 상태에서 애플리케이션이 정상적으로 발급하는 합법적으로 서명된 토큰(세션 리프레시, API 키, 비밀번호 재설정 링크 등)을 자기 자신에게 발급받음
-
패치 적용 이후에도 해당 토큰은 키 링이 회전되지 않는 한 계속 유효
즉, 패치만으로는 취약 기간 중 발급된 합법적 토큰이 무효화되지 않는다는 점이 이 취약점의 핵심적인 운영상 위험 요소입니다.
우리 시스템이 영향을 받는가
1차 영향군 (net10.0 타겟)
아래 조건을 모두 만족하면 영향 대상입니다.
-
애플리케이션이
Microsoft.AspNetCore.DataProtection10.0.6을 직접 또는 전이적으로(StackExchangeRedis,EntityFrameworkCore,AzureKeyVault,AzureStorage,Redis등) 참조 -
해당 NuGet 바이너리가 런타임에 실제로 로드됨
-
Microsoft.NET.Sdk.WebSDK를 사용하지 않거나,Microsoft.AspNetCore.App프레임워크 참조가 직·간접적으로 없을 때 -
또는 .NET 10 기본값인
PrunePackageReference를 명시적으로 비활성화한 경우
-
-
Linux, macOS 등 비-Windows 운영체제에서 실행
2차 영향군 (net462 / netstandard2.0 타겟)
Microsoft.AspNetCore.DataProtection 10.0.0~10.0.6을 참조하면서, net462 또는 netstandard2.0 타겟 자산을 빌드에서 사용한 경우입니다.
-
.NET Framework 4.6.2 이상에서 ASP.NET Core DataProtection NuGet을 사용하는 데스크톱·서버 앱
-
netstandard2.0을 타겟팅하는 라이브러리가 10.0 DataProtection 패키지를 참조하고, 비-net10.0런타임에서 로딩되는 경우
이 경로는 net10.0 자산에만 존재하는 CNG 경로 대신 동일한 managed encryptor 코드 경로를 모든 OS에서 사용하므로, 아래의 Windows 예외가 적용되지 않습니다.
영향을 받지 않는 경우
-
애플리케이션이 Windows에서 실행되는 경우 (1차 영향군 조건에 한함)
-
net10.0프레임워크 의존(framework-dependent) 모드로 실행되며, 설치된 ASP.NET Core 공유 프레임워크 버전이PackageReference버전과 같거나 더 높은 경우-
예: 공유 프레임워크 10.0.6 +
PackageReference10.0.6 → 안전 -
예: 공유 프레임워크 10.0.5 +
PackageReference10.0.6 → 취약
-
-
Microsoft.AspNetCore.DataProtection8.0.x 또는 9.0.x를 사용하는 모든 경우 (해당 결함 코드는 10.0 개발 중 도입되었으며 8.0/9.0 서비싱 브랜치로 백포트된 적이 없습니다) -
영향 버전 패키지를 한 번도 참조한 적이 없는 경우
조치 방법
1단계 — 패키지 업그레이드 (필수)
Microsoft.AspNetCore.DataProtection을 10.0.7 이상으로 업그레이드한 뒤 재배포합니다. 패치된 검증 루틴은 취약 기간에 위조된(전부 0으로 채워진 HMAC를 가진) 페이로드를 거부합니다.
2단계 — DataProtection 키 링 회전 (조건부 필수)
영향 대상이면서 취약 기간 중 인터넷에 노출된 엔드포인트를 운영했다면 키 링을 반드시 회전해야 합니다. 그렇지 않으면 위조된 자격 증명으로 발급받은 합법적 서명 토큰이 패치 후에도 계속 유효합니다.
내장 키 매니저를 사용한 예시:
// 동일한 키 링에 접근 가능한 애플리케이션에서 1회 실행
// revocationDate는 10.0.6 배포 직전 시각으로 설정
var services = new ServiceCollection()
.AddDataProtection()
// ... 기존 repository / protection 설정 ...
.Services
.BuildServiceProvider();
var keyManager = services.GetRequiredService<IKeyManager>();
keyManager.RevokeAllKeys(
revocationDate: DateTimeOffset.UtcNow,
reason: "CVE-2026-40372: DataProtection 10.0.6 validation bypass");
RevokeAllKeys를 호출하면 키 링의 모든 기존 키가 폐기되며 다음 보호 연산 시 새 키가 자동 생성됩니다. 모든 사용자가 재로그인해야 하고, antiforgery 토큰도 모두 재발급됩니다.
취약 기간을 정확히 알고 있어 좀 더 외과적으로 접근할 수 있다면, RevokeAllKeys 대신 RevokeKey(Guid keyId, string reason)로 해당 기간에 활성화되어 있던 키만 선택적으로 폐기할 수 있습니다.
3단계 — 애플리케이션 레벨 장기 자격 증명 감사
키 회전으로도 무효화되지 않는, 취약 기간 중 인증된 요청을 통해 발급되었을 수 있는 장기 자격 증명을 별도로 회전해야 합니다.
-
보호된 엔드포인트를 통해 DB에 저장된 API 키, 리프레시 토큰, 액세스 토큰
-
취약 기간 중 발급되어 아직 만료되지 않은 비밀번호 재설정 링크, 이메일 인증 토큰
-
인증된 요청이 발급을 유도할 수 있는 기타 영속 자격 증명
만약 인증된 엔드포인트에서 장기 자격 증명을 발급하는 경로가 없다면 키 회전만으로 충분합니다.
4단계 — 보호된 페이로드 내부 평문 자산 점검 (권장)
IDataProtector.Protect 출력 안에 DB 연결 문자열, 서드파티 API 키 등 장기 비밀을 보관해 왔다면, 해당 비밀들이 노출되었을 가능성을 가정하고 원본에서 회전합니다.
5단계 — 웹 서버 로그 검토 (권장)
패딩 오라클 공격은 1바이트 복원에 다수의 요청을 필요로 하므로, 정상 트래픽 대비 자릿수가 다른 요청량을 발생시킵니다. 보호된 페이로드(인증 쿠키, antiforgery 토큰, state 파라미터)를 받는 단일 인증 엔드포인트에 대해, 취약 기간 중 쿠키·쿼리 파라미터 값이 다양하게 변형되며 지속적으로 들어오는 대량 트래픽이 있었다면 침해 시도의 강한 지표입니다.
참고 링크
-
공식 권고 (
dotnet/announcements): Microsoft Security Advisory CVE-2026-40372 – ASP.NET Core Elevation of Privilege · Issue #395 · dotnet/announcements · GitHub -
토론 이슈 (
dotnet/aspnetcore): Microsoft Security Advisory CVE-2026-40372 – ASP.NET Core Elevation of Privilege · Issue #66410 · dotnet/aspnetcore · GitHub -
MSRC: Security Update Guide - Microsoft Security Response Center
운영 환경 및 CI/CD 파이프라인의 NuGet 의존성을 빠르게 감사해 보시고, 1차/2차 영향군에 해당된다면 키 링 회전과 장기 토큰 회전 계획까지 함께 수립하시기를 권합니다.
이 글은 AI를 통하여 요약/정리한 내용입니다.