[12] MTE Hardening: CompactRefPtrTuple Stale Pointer Zeroing
Severity: Medium | Component: WTF CompactRefPtrTuple | 98bb748
Medium으로 분류된 이유는 독립적인 vulnerability가 아닌 mitigation 약화 문제이기 때문입니다. 해제 이후에도 남아 있는 stale compact pointer 데이터는, 별도의 UAF primitive를 이미 확보한 공격자에게 MTE bypass vector를 제공할 가능성이 있습니다. 다만 CompactRefPtrTuple이 MTE bypass에 관여한다는 점은 구체적인 exploit chain으로 입증된 것이 아니라, commit 메시지에서 추론한 것입니다. Confidence는 0.62입니다.
Patch Details
CompactRefPtrTuple의 destructor에서 기존 derefIfNotNull 호출 직후에 secureZeroBytes(m_data)가 추가되었습니다.
Source/WTF/wtf/CompactRefPtrTuple.h
~CompactRefPtrTuple()
{
WTF::DefaultRefDerefTraits<T>::derefIfNotNull(m_data.pointer());
+ secureZeroBytes(m_data);
}
하드웨어 memory tagging이 적용되지 않는 타입에서, 해제 이후에도 stale pointer 데이터가 남아 MTE bypass vector가 생성되는 패턴.
Background
ARM MTE(Memory Tagging Extension)는 memory granule과 pointer 값에 4비트 tag를 부여합니다. tag가 일치하지 않는 메모리에 접근하면 hardware fault가 발생하여, use-after-free와 out-of-bounds 접근을 탐지합니다. WebKit의 compact pointer는 pointer 상위 비트를 제거하거나 재활용하는 pointer compression 방식을 사용해 메모리를 절약합니다. 이 encoding 방식은 MTE tagging과 양립할 수 없습니다. MTE가 tag를 저장하는 상위 비트를 compact pointer compression이 그대로 사용하기 때문입니다. secureZeroBytes는 WebKit의 유틸리티 함수로, 컴파일러가 최적화로 제거할 수 없는 방식으로 메모리를 0으로 채웁니다. destructor 내의 dead store에 대해 컴파일러가 memset을 생략할 수 있는 것과 달리, 이 함수는 실행이 반드시 보장됩니다.
Analysis
패치 이전에는 CompactRefPtrTuple의 destructor가 보유 중인 pointer의 reference count를 감소시킬 뿐, m_data 스토리지를 0으로 초기화하지 않았습니다. compact pointer는 ARM MTE로 tagging할 수 없습니다. MTE tag가 위치하는 상위 비트를 compact pointer compression이 제거하거나 재활용하기 때문입니다(commit 메시지에 명시된 내용). 따라서 해제 후 재할당된 메모리에 남아 있는 stale compact pointer는, 접근 시 MTE tag 불일치를 발생시키지 않습니다. CompactRefPtrTuple을 포함하는 해제된 메모리를 재사용할 수 있는 공격자(commit 메시지에서 언급된 ThreadTimerHeapItem 등)는, 재사용된 슬롯에서 유효해 보이는 pointer 값을 발견하게 됩니다. 이를 통해 해당 pointer에 대한 MTE의 use-after-free 탐지를 우회할 가능성이 있습니다.
a Aaa Aaaa Aaaaaaaaaaaaa Aaa Aaa Aaaaaaaaaa Aa Aaaaaa Aaaaaa Aaaaa Aa Aaaa Aaaaaaaaaaaaaaaaaaaaa Aaaa Aaa Aa Aaaaaaaaaaaaaa Aaaaaaaaaa Aa Aaa Aaa Aaaaaa a Aaaa Aaa Aaaa Aaa Aaaa Aaaaa Aaaaaaa Aaaaaaaa Aaa Aaa Aaa Aaaa Aaa Aaaaaa
a Aaa Aaa Aaaaaa Aaaaaa Aaaaaaaaaa Aaa Aaaaaaa Aa Aaaa Aaaaa Aaaaaaa Aaaaaaa Aaaa Aaa Aaaa Aaa Aa Aaaaaa Aaaaaaaaaaaaaaaaaaaaa Aaaa Aaa Aaaaaaaaaaaaaaa Aaa Aaaaa Aaa Aaaaaa Aaaaa Aa Aaaaa Aaaaaaaa Aaa Aaaa Aaaa Aaaaaa
a Aaaaaaa Aaaaaaa Aaaaaaaaaaaaaaa Aaaaa Aaaaaaaa Aaaaaa Aaaaaaaaaaa Aaa Aaa Aaa Aaaaaa Aaaaaaa Aaaaaaaa Aaaa Aaa Aaa Aaaa Aaa Aaaaa Aaaa Aaaa Aaaa Aaa a Aa Aa Aaa Aaaaaaa Aaaaaaa Aa Aaaaaa Aaaaaaa Aaa Aaaa Aaaaaaa Aa Aaa Aaa Aaa Aaaaa Aaaaa Aa Aaaa Aaaaa
🔒Explores how pointer compression interacts with hardware memory tagging and the implications of stale data surviving object destruction
더 확인하려면 구독해 주세요
Audit directions
a Aaaa Aaa Aaaa Aaaaaaa Aaaaaaaaaaa Aaa Aaaa Aaa a Aa Aaaaaaaa Aaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaa Aa Aaa Aaaaaaaaaaaaaaaaa Aaaaaaa Aaa Aaaa Aa Aaaaaa Aaa Aaaaa Aa a Aaaaa Aaa Aaaaaa Aaaa Aaaa Aaaaaaaa Aaa Aaaa Aaa Aa Aa Aa Aa Aaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaa Aaaaa Aaaaa
a Aaaaaa Aaa a a Aa Aaaaaaaaaa Aaaaaaa Aaaaaaaa Aaa Aa Aaaa Aa Aaaa Aaaaaaa Aaaaaaa Aaa Aa Aaaa Aa Aaaaa Aaa Aaaaaaa Aaa Aaa Aaaaaaaa Aa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaa Aa Aaa Aa Aaa Aaaaa a Aa Aaa Aaaa Aaaa
a Aaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaaa Aaaaaaaaa Aaaa Aa Aaaaaaaaa Aaa a Aaaa Aaa Aaaa Aaaaa Aa Aaa Aaaaaaaaaaa Aaaaaaaaa Aaaa Aaaa Aa Aaaa Aa Aaa Aaaaaaaaaaaaaaaaaaaaa Aaa Aaa Aaaaa Aaaa Aaa Aaa Aa Aaaa Aaaaa
🔒Multiple audit patterns identified for compact pointer types that may share the same hardware tagging blind spot
더 확인하려면 구독해 주세요