← All issues

[12] [LDM] Ensure temporary pages use the correct Font Parser

Severity: Medium | Component: WebCore editing sanitization / SVGImage | 9fe9df5

paste/drag-drop 정제(sanitization) 또는 SVG 이미지 렌더링을 위해 생성된 임시 페이지에서 Lockdown Mode font-parsing이 우회됩니다. GPU process의 MESSAGE_CHECK를 통해 WebContent process 종료 형태로 드러나며, 영향 범위가 LDM 사용자로 한정되어 Medium으로 평가됩니다.

Source/WebCore/editing/markup.cpp

+ DownloadableBinaryFontTrustedTypes fontTrustedTypes = DownloadableBinaryFontTrustedTypes::Any;
if (destinationDocument) {
if (RefPtr destinationPage = destinationDocument->page()) {
fontGenericFamilies = destinationPage->settings().fontGenericFamilies();
+ fontTrustedTypes = destinationPage->settings().downloadableBinaryFontTrustedTypes();
}
}
+ page->settings().setDownloadableBinaryFontTrustedTypes(fontTrustedTypes);

Source/WebCore/svg/graphics/SVGImage.cpp

m_page->settings().fontGenericFamilies() = parentSettings->fontGenericFamilies();
+ m_page->settings().setDownloadableBinaryFontTrustedTypes(parentSettings->downloadableBinaryFontTrustedTypes());

createPageForSanitizingWebContentSVGImage::dataChanged 양측 모두에서, 부모/대상 페이지의 downloadableBinaryFontTrustedTypes 설정이 임시 내부 Page로 전달되도록 변경되었습니다. LayoutTest는 LDM process 내에서 OpenType blob을 포함한 SVG @font-face를 로드하는 케이스를 검증하며, API test는 LDM 대상 web view에 webarchive를 붙여넣을 때 process 종료가 발생하지 않는지를 확인합니다.

부모 페이지에서 파생/보조 페이지로 보안 정책 설정이 전달되지 않아, 보조 페이지가 process 모드 제한(Lockdown Mode font parsing)을 우회할 수 있는 패턴.

Lockdown Mode는 Apple이 제공하는 opt-in 기능으로, exploit primitive로 이어질 수 있는 것으로 알려진 기능들을 비활성화하거나 강화합니다. SafeFontParser는 LDM에서 적용되는 제한적 font parser로, OpenType/TrueType 구조의 일부 subset만 허용하고 위험한 테이블은 거부합니다. DownloadableBinaryFontTrustedTypesSettings enum으로, Any는 표준 parser를 선택하고 LDM 강제 값은 SafeFontParser를 선택합니다. createPageForSanitizingWebContent는 붙여넣기/드래그-드롭/web-archive 마크업 파싱을 위해 임시 Page를 생성합니다. SVGImage는 자체 m_page를 소유하며, 이 페이지의 document가 SVG를 이미지로 파싱하고 격리된 환경에서 렌더링하는 역할을 담당합니다. MESSAGE_CHECK는 검증 실패 시 요청을 보낸 WebContent process를 종료하는 IPC 검증 매크로입니다.

이들 임시 페이지는 부모 설정의 일부(dark appearance, font generic families, layer-based SVG engine)만을 복사했고, downloadableBinaryFontTrustedTypes는 전달하지 않았습니다. 그 결과 기본값인 Any가 적용되어, LDM이 활성화된 사용자 페이지에서도 표준 시스템 parser가 선택되는 상황이 발생했습니다.

🔒

Examines how a Lockdown Mode hardening can be silently bypassed on auxiliary code paths, and why a cross-process IPC check — not the WebContent-side font code — is what surfaced the bug.

더 확인하려면 구독해 주세요

🔒

Multiple reusable audit patterns for setting-propagation gaps across derived `Page` constructions and cross-process IPC policy mismatches, with concrete starting points.

더 확인하려면 구독해 주세요