Introduction
Issue 1101509를 짧게 소개하려고 한다.
이 취약점은 RawClipboardHostImpl의 lifetime 때문에 일어나는 취약점이다.
Root Causes
ClipboardHostImpl은 다음과 같이 이루어져 있다.
1 |
|
ClipboardHostImpl이 RenderFrameHost를 raw pointer
로 갖고 있다. Create 함수에서 ClipboardHostImpl 객체를 생성할 때 static_cast<RenderFrameHostImpl*>(render_frame_host)
을 인자로 넘겨주는 것을 확인할 수 있다. 해당 객체가 해제될 경우 render_frame_host
또한 같이 메모리에서 해제되어야 하지만 lifetime에 대한 어떠한 처리도 되어있지 않아 UaF가 발생하게 된다. 보통은 WebContentsObserver을 상속받게 하여 render_frame_host
와 Mojo interface
의 lifetime을 동일하게 맞춰주는 방법으로 패치를 진행한다.
PoC
reference에 올라온 PoC다.
다음은 child iframe에 들어갈 내용이다. poc_child.html
에서는 RawClipboardHost
에 대한 handle을 획득하고. child와 parent에 대한 바인딩을 생성한다.
1 |
|
poc.html
에서는 poc_child.html
을 주소로 하는 iframe을 하나 생성하고 MojoInterfaceInterceptor
로 child 소유의 RawClipboardHost handle
을 parent frame으로 가져온다. 그 후, iframe을 제거하여 render_frame_host
를 dangling 상태로 만들어 그 pointer을 획득한다. 그 후에는 dangling pointer
를 이용해 UaF를 trigger 할 수 있다.
1 |
|