fbpx

WebKit – Universal XSS Using Cached Pages

WebKit – Universal XSS Using Cached Pages

DETALHES DA VULNERABILIDADE
“ “
void FrameLoader :: detachChildren ()
{
[…]
SubframeLoadingDisabler subframeLoadingDisabler (m_frame.document ()); // *** 1 ***

Vetor <Ref <Frame>, 16> childrenToDetach;
childrenToDetach.reserveInitialCapacity (m_frame.tree (). childCount ());
for (Frame * child = m_frame.tree (). lastChild (); child; child = child-> tree (). previousSibling ())
childrenToDetach.uncheckedAppend (* child);
para (automático e filho: childrenToDetach)
child-> loader (). detachFromParent ();
}
“ “

Quando uma página em cache está sendo restaurada e a página que está sendo navegada não é armazenável em cache,
existe um período durante o qual dois documentos são anexados ao mesmo quadro. Se um atacante
encontrar uma maneira de executar JS durante esse período, ela poderá usar um dos documentos para
execute JavaScript no contexto do outro.

Uma pilha de chamadas possível que pode levar à execução de JS é:
“ “
o manipulador de descarregamento de um quadro filho

ContainerNode ::connectDescendantFrames ()
Documentação :: prepareForDestruction ()
FrameLoader :: clear ()
FrameLoader :: open ()
“ “

Quando o `FrameLoader :: clear` é chamado, os quadros filhos geralmente já estão desconectados do
documento via
“ “
FrameLoader :: detachChildren ()
FrameLoader :: setDocumentLoader ()
FrameLoader :: transitToCommitted ()
“ “

No entanto, o invasor pode iniciar um novo carregamento de página dentro de `detachChildren` para ignorar
SubframeLoadingDisabler e crie um novo quadro filho. Observe que não cancelará a página em cache
carga.

O ataque tem uma restrição que limita significativamente sua aplicabilidade – a página da vítima deve
carregar um <iframe> (potencialmente em área restrita) com conteúdo controlado pelo invasor, para que o JS do invasor tenha
uma chance de rodar dentro de `Document :: prepareForDestruction`. É o caso, por exemplo, de online
tradutores.

VERSÃO
Revisão do WebKit 246194
Não está claro se o bug é explorável no Safari 12.1.1. O caso de repro parece ter um problema
com uma chamada aninhada `showModalDialog`.

CASO DE REPRODUÇÃO
O caso de teste novamente conta com `showModalDialog` para executar carregamentos de página síncronos. Além disso, o
O código é envolvido em uma chamada `showModalDialog` para manter um token de gesto do usuário ativo durante todo o
execução.

INFORMAÇÃO DE CRÉDITO
Sergei Glazunov, do Google Project Zero

Prova de conceito:
https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/47453.zip

11 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900

Copyright © Linux Force Security  - Desde 2011.