Sob várias condições, a opção
$rewrite
filter, implementada no AdBlock, AdBlock Plus e uBlock
com atualização 3.2 de 17 de julho de 2018 , permite que código arbitrário seja executado em uma página da web exibida para um usuário,
relata o blog armin.dev .
Aqui está como a função problemática é descrita no próprio patch do AdBlock:
Esse patch implementa a nova opção de filtro $rewrite
, que permite aos autores das listas de filtros impedir a exibição (principalmente em vídeo) de anúncios que anteriormente não podiam ser bloqueados em vários sites.
A vulnerabilidade descrita afeta todos os três dos bloqueadores de anúncios mencionados, cujo público total excede 100 milhões de usuários. Você pode usá-lo para atacar qualquer serviço da Web, incluindo, entre outros, por exemplo, qualquer recurso do Google. O problema é generalizado, ou seja, um ataque com o mesmo sucesso pode ser realizado em qualquer navegador popular e não depende de sua versão.
A vulnerabilidade durou quase 9 meses e foi encontrada apenas agora.Essência do ataque
O blogueiro de origem explica que a opção
$rewrite
é usada pelo AdBlock e pelos outros bloqueadores mencionados para evitar o rastreamento do usuário e o bloqueio de anúncios, redirecionando solicitações da página da web visitada. Portanto,
$rewrite
permite redirecionar e não processar solicitações como
SCRIPT
,
SUBDOCUMENT
,
OBJECT
e
OBJECT_SUBREQUEST
.
Um ataque pode ocorrer se o site usar
XMLHttpRequest
ou
Fetch
para baixar e executar trechos de código, enquanto permite que solicitações arbitrárias sejam feitas.
Ou seja, para realizar um ataque, três condições devem ser atendidas:
- A página da web deve carregar a sequência JS usando
XMLHttpRequest
ou Fetch
e executar o código retornado. - A página da web não deve usar as diretivas de validação da Política de Segurança de Conteúdo e não deve verificar o URL final antes de executar o código baixado.
- A fonte do código extraído deve oferecer suporte a um redirecionamento do servidor ou conter conteúdo arbitrário gerado pelo usuário.
Parece que existem muitas condições, e o CSP está longe de ser uma novidade no mundo do desenvolvimento web. No entanto, a principal ameaça à vulnerabilidade encontrada não é como ela funciona, mas como ela se espalha.
Como os sistemas de filtro AdBlock, AdBlock Plus e uBlock são vulneráveis, a maneira de "infectar" a vítima final é extremamente simples - através do sistema de atualização automática de filtros. Não é segredo que grande parte dos usuários usa filtros prontos, mas não os configura. Nesse caso, o autor do pacote de filtro pode lançar uma atualização mal-intencionada, realizar um ataque e, em seguida, "rolar" o pacote e, assim, "varrer faixas".
Maneiras de lutar
A maneira mais fácil de se proteger da vulnerabilidade mencionada é mudar para o uBlock Origin. Esse bloqueador de anúncios não suporta a função
$rewrite
, ou seja, é impossível implementar o ataque descrito por meio dele.
Caso contrário, por sua conta e risco, você deve aguardar a próxima atualização do AdBlock. Literalmente, algumas horas após a publicação no blog armin.dev,
essa entrada do blog apareceu no blog oficial do bloqueador em resposta à vulnerabilidade
$rewrite
.
Nele, a administração do AdBlock garante que, embora a vulnerabilidade seja específica, eles são extremamente cuidadosos com a segurança de seu público e,
na próxima atualização, a função $rewrite
será cortada do AdBlock.
Além disso, de acordo com as garantias da administração, eles checam todas as listas de filtros e as checam agora. Com base nos resultados da auditoria, a administração relata que nenhuma das listas de filtros existentes descreveu o método de ataque ao usuário contido. Como apenas quatro horas se passaram entre o momento em que a postagem original foi publicada e a resposta ao blog do AdBlock, apenas nos alegramos com a capacidade de resposta da equipe do bloqueador.
Ao mesmo tempo, remover a função
$rewrite
do projeto é um retrocesso para o AbBlock, pois foi originalmente criado para combater anúncios em vídeo pop-up. Agora ela retornará por uma questão de segurança universal. Além disso, a velocidade com a qual foi decidido remover completamente
$rewrite
do projeto mostra que, embora o ataque seja específico, as consequências de sua conduta em massa são assustadoras demais.