flawopen.com/Incidents/bluemoon-chrome-v8-windows-alpc-september-2026
BlueMoon: 세 가지 결함이 Chrome과 Windows의 격리 경계를 넘음
Proofpoint는 CVE-2026-85046(V8 타입 혼동), CVE-2026-87491(V8 샌드박스 탈출), CVE-2026-85880(Windows 커널 로컬 권한 상승)을 연결한 표적 BlueMoon 캠페인을 보고했습니다. Google과 Microsoft는 각 수정 전 악용을 확인했습니다. Chromium 브라우저와 Windows를 각각 업데이트하세요.[1], [2], [3], [4]
분류원이 모든 상자에 책이 들었다고 확인한 뒤, 오래된 표지로 분류하기 전에 방문자가 내용물을 바꾸게 둔다고 생각해 보세요. 첫 실수로 잠긴 분류장이 열리고, 두 번째로 울타리를 넘으며, 세 번째로 건물 출입증이 바뀝니다. 각각의 잠금을 고쳐야 합니다.[1]
핵심 개념 및 용어
V8 / type confusion- V8은 JavaScript를 실행합니다. CVE-2026-85046은
fill()이 요소 종류를 바꿨을 때 무효가 된 Array.prototype.sort 최적화 가정을 이용했습니다.[1], [2]
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-122 CWE-787 CWE-843
- CISA KEV — 추가일 2026-09-04 — CVE-2026-85046
BlueMoon 공격 단계 및 패치 판단
| 단계 / CVE / 경계 | 출처가 확인한 내용 | 방어 조치 |
|---|---|---|
V8 JIT 타입 혼동 — CVE-2026-85046 | Proofpoint는 Array.prototype.sort comparator가 fill()로 배열을 바꿔 elements-kind 가정을 무효화하는 문제를 설명합니다. Google은 실제 악용을 확인했습니다. | Chrome/Chromium 152.0.7977.82/.83(Windows/Mac) 또는 .82(Linux) 이상을 설치하고 브라우저를 재시작하세요. Google의 9월 3일 릴리스에 수정이 포함됩니다. |
V8 샌드박스 탈출 — CVE-2026-87491 | Proofpoint는 WebAssembly 메타데이터 손상으로 V8 메모리 샌드박스를 넘는 문제를 보고했습니다. renderer 프로세스 샌드박스와는 별개이며 Google은 실제 악용을 확인했습니다. | Chrome/Chromium 153.0.8010.36/.37(Windows/Mac) 또는 .36(Linux) 이상을 설치하고 브라우저를 재시작하세요. Google의 9월 8일 릴리스에 수정이 포함됩니다. |
Windows 커널 LPE — CVE-2026-85880 | Proofpoint는 SeDebugPrivilege로 이어지는 ALPC/WNF 경로와 키트가 겨냥한 구형 Windows 빌드를 열거합니다. Microsoft는 9월 8일 업데이트 이전 악용을 확인했습니다. 이 목록은 전체 영향 버전 목록이 아닙니다. | 지원되는 최신 Windows 보안 업데이트(2026년 9월 8일 또는 이후 포함)를 설치하고 OS별 패키지를 MSRC에서 확인한 뒤 필요한 재부팅을 마치세요. Windows와 Chrome을 별도로 패치하세요. |
사고 타임라인
Proofpoint가 BlueMoon 활동을 처음 관찰했습니다.[1]
Chrome Stable은 Windows와 Mac의 152.0.7977.82/.83 및 Linux의 .82에서 CVE-2026-85046을 수정했습니다.[2]
단계별 공격 실행 흐름
관찰된 전달 방식
Proofpoint는 익스플로잇 키트 링크를 포함한 표적 스피어피싱 캠페인을 관찰했습니다. 브라우저 단계는 취약한 Chromium 기반 브라우저에서 링크를 열어야 진행됩니다.[1]
소스 코드 비교: 취약한 구현 vs 보안 패치
무효화된 가정을 보이는 안전한 Python 교육 예제이며 V8 코드, 공격 코드, 공급자 패치가 아닙니다. 무해한 콜백이 첫 검사 뒤 정수를 문자열로 바꿀 수 있습니다. 개선 예제는 콜백 뒤 크기가 제한된 복사본을 검사하고 사용 중에는 콜백을 다시 부르지 않습니다. 취약 예제에서 Python은 예외만 발생하며 실제 메모리 손상을 재현하지 않습니다. 신뢰할 수 있고 한계가 있는 동기 콜백만 전제합니다.
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
if any(type(x) is not int for x in values):
raise ValueError("Expected integers")
callback(values)
# 콜백이 타입 가정을 무효화했을 수 있습니다.
return sum(values)
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
callback(values)
if len(values) > 1024:
raise ValueError("Invalid batch")
snapshot = tuple(values)
if any(type(x) is not int or abs(x) > 1_000_000
for x in snapshot):
raise ValueError("Expected bounded integers")
# 검증된 스냅샷을 추가 콜백 없이 사용합니다.
return sum(snapshot)
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓브라우저와 Windows 버전을 별도로 조사하고 적용 가능한 공급자 업데이트를 설치하며 브라우저와 OS 재시작을 확인하세요.[2], [3], [4], [5]
- ✓콜백 변형 회귀 시험을 추가하세요. 유형 변화와 과도한 묶음을 최적화 처리 전에 거부하고 정상 정수의 합은 정확한지 확인하세요.[1]
- ✓검증과 사용 사이에 제어 가능한 코드가 실행되는 최적화 경로를 검토하세요. 조건을 다시 검증하거나 검증된 불변 복사본을 사용하세요.[1]
- ✓각 CVE를 별도로 추적하세요. Chrome은 CVE-2026-85046을 높음, CVE-2026-87491을 보통으로, Microsoft는 CVE-2026-85880을 높음(CVSS 7.8,
CWE-122)으로 평가했습니다. 플랫폼 완화는 패치를 대신하지 못합니다.[2], [3], [4], [5]