flawopen.com/Incidents/angle-cross-platform-zero-day-december-2025
CVE-2025-14174: Chrome ANGLE 결함과 Apple의 CVE 참조
Google은 Chrome ANGLE의 악용을 확인했습니다. Apple은 별도의 WebKit 메모리 초기화 문제에도 이 CVE를 사용합니다.
양식을 옮겨 적는 사람이 지정 칸을 넘어 다음 기록에 쓰는 상황은 범위 밖 접근을 보여 줍니다. 장부에서 같은 번호가 다른 항목에 재사용되어도 결함이 같다는 뜻은 아닙니다.
핵심 개념 및 용어
ANGLE- Almost Native Graphics Layer Engine: OpenGL ES와 WebGL 호출을 Metal, Direct3D, Vulkan 같은 네이티브 API로 변환하는 Google의 오픈 소스 라이브러리입니다.
Metal 백엔드- Metal API를 대상으로 하는 ANGLE 부분입니다. Google은 Mac용 Chrome의 ANGLE 문제로 설명하지만 영향 함수나 수정 방식을 공개하지 않았습니다.
범위 밖 접근(CWE-787)- 범위 밖 접근(
CWE-787): 버퍼의 의도된 경계 밖 메모리에 접근하는 동작입니다. CWE-787은 범위 밖 쓰기를 구체적으로 분류합니다. Google은 정확한 동작이나 원인을 공개하지 않았습니다. 검사된 산술- 오버플로가 나면 조용히 값을 되감는 대신 이를 알려 주는 정수 연산입니다. Chromium과 ANGLE의 base::CheckedNumeric이 그 예입니다.
제로데이- 제로데이는 수정 사항이 나오기 전에 악용된 취약점입니다. Google은 Chrome ANGLE 문제의 악용을 확인했습니다. Apple은 iOS 26.2 공지에서 WebKit 문제와 관련된 표적 공격을 별도로 설명했습니다.
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-787
- CISA KEV — 추가일 2025-12-12 — CVE-2025-14174
사고 타임라인
Google이 macOS용 Chrome 143.0.7499.110을 배포하며 ANGLE 문제에 대한 익스플로잇이 실제로 존재한다고 밝힙니다(Chromium 이슈 466192044).
Apple 공지는 CVE-2025-14174를 WebKit 메모리 초기화 문제로, CVE-2025-43529를 별도의 WebKit 메모리 손상 문제로 기재합니다. Apple은 후자의 표적 악용 가능성을 언급하지만 Chrome ANGLE과 공통 원인이라는 증거는 아닙니다. CISA는 CVE-2025-14174를 KEV에 추가했습니다.
단계별 공격 실행 흐름
조작된 페이지가 그래픽 계층에 닿는다
CVE 기록은 조작된 HTML 페이지가 Mac용 Chrome의 ANGLE 문제를 유발한다고 설명합니다. CVSS 벡터는 사용자 상호작용을 요구하므로 피해자가 공격자 통제 웹 콘텐츠를 열어야 합니다.
ANGLE이 Metal로 변환한다
Google은 ANGLE을 Chrome의 영향받은 구성 요소로 지목합니다. 공개 공지는 원인 함수를 밝히지 않으며 WebKit이 같은 취약 코드를 쓴다고 하지 않습니다.
버퍼 밖 메모리에 접근한다
Google은 범위 밖 메모리 접근이라고 설명하지만 읽기 또는 쓰기인지, 영향받은 버퍼나 원인은 공개하지 않았습니다. 아래 코드는 일반 예시이며 ANGLE 소스나 CVE 재현이 아닙니다.
표적 공격에 쓰인다
Google은 CVE-2025-14174 악용을 확인했습니다. Apple은 WebKit 표적 악용을 별도로 보고하고 WebKit 메모리 초기화 항목에도 이 CVE를 사용합니다. 공개 공지는 Chrome과 WebKit의 공통 체인을 입증하지 않습니다.
소스 코드 비교: 취약한 구현 vs 보안 패치
Google은 함수 수준의 원인이나 패치 세부 사항을 공개하지 않았습니다. 이 일반 C++20 예시는 오프셋을 확인하고 뺄셈으로 요청 길이와 남은 용량을 비교해 오버플로를 피합니다. CVE 재현이나 ANGLE의 실제 수정 코드가 아닙니다.
// 일반화한 예시일 뿐이며 ANGLE 소스 코드나 CVE-2025-14174 구현이 아닙니다.
bool copyRange(std::span<std::byte> destination,
std::size_t offset,
std::span<const std::byte> source)
{
std::copy(source.begin(), source.end(), destination.begin() + offset);
return true;
}
// 일반화한 예시일 뿐이며 ANGLE 소스 코드나 CVE-2025-14174 패치가 아닙니다.
bool copyRange(std::span<std::byte> destination,
std::size_t offset,
std::span<const std::byte> source)
{
if (offset > destination.size() ||
source.size() > destination.size() - offset) {
return false;
}
std::copy(source.begin(), source.end(), destination.begin() + offset);
return true;
}
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓Mac용 Chrome을 143.0.7499.110 이상으로 업데이트하고, 현재 환경에는 지원되는 최신 버전을 설치하세요.
- ✓제품 전반에서 공유하는 파싱·그래픽 라이브러리(ANGLE, FreeType, libwebp, libxml2)를 파악하고, 각 브라우저뿐 아니라 해당 라이브러리의 보안 공지도 구독합니다.
- ✓호출자가 제어하는 치수로 계산하는 모든 버퍼 크기에 검사된 산술(base::CheckedNumeric, C23의 std::ckd_mul, Rust의 checked_mul)을 요구하고, 코드 리뷰에서 검사하지 않은 곱셈을 지적합니다.
- ✓CI에서 AddressSanitizer를 켜고 텍스처·버퍼 업로드 경로를 극단적인 치수와 0 치수로 퍼징해, 범위 밖 복사가 릴리스 전에 테스트를 실패시키게 합니다.
- ✓Chrome ANGLE 공지와 Apple WebKit 항목을 별도로 추적하세요. 식별자나 날짜가 같아도 공통 원인이나 익스플로잇 체인이 입증되지는 않습니다.