ASA-2019-00375 – MyBB: Stored Cross-Site Scripting (XSS) através do bbcode video


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00375

Identificador(es)

ASA-2019-00375, CVE-2019-12830

Título

Stored Cross-Site Scripting (XSS) através do bbcode video

Fabricante(s)

MyBB Group

Produto(s)

MyBB

Versão(ões) afetada(s)

MyBB versão anterior a 1.8.21

Versão(ões) corrigida(s)

MyBB versão 1.8.21 ou posterior

Prova de conceito

Desconhecido

Descrição

Existe uma vulnerabilidade de Stored Cross-Site Scripting (XSS) que ocorreu devido a um erro de análise em postagens e mensagens privadas no MyBB 1.8.20 e versões anteriores.

Detalhes técnicos

O MyBB tem um processo de 3 passos para analisar e renderizar tópicos, posts e mensagens privadas. O objetivo deste processo é higienizar a entrada do usuário e renderizar os chamados mycodes ou bbcodes. Bbcodes são uma maneira simples de os usuários do fórum incorporarem, por exemplo, imagens, links e vídeos nas postagens.

O processo começa simplesmente escapando todas as tags HTML e aspas duplas. Em seguida, ele converterá todos os mycodes de vídeo em tags iframe que incorporam vídeos de por exemplo, Youtube. A razão pela qual os bbcodes de vídeo são renderizados em uma única etapa é porque eles podem ser desabilitados pelos administradores (eles são habilitados por padrão). Finalmente, ele converterá todos os outros mycodes, como url, quote e email em marcação HTML.

O fato de que os códigos BB de vídeo foram convertidos em marcação HTML em uma etapa diferente de todos os outros BBCodes leva à ideia de que é possível criar um bbcode de vídeo que resulte em marcação HTML que contenha outros códigos de acesso em seus atributos.

A ideia é que o MyBB substitua o código do URL url no src do iframe com mais código HTML contendo aspas duplas (“), corrompendo o HTML e levando a uma injeção de atributo.

Como pode ser visto, o atributo src do iframe é fechado pelo atributo href injetado e sua cotação. Isso agora leva ao manipulador de eventos onload sendo injetado na tag HTML iframe.

Normalmente, não seria possível injetar códigos bb dentro de outros códigos bb, pois os filtros regex estão em vigor para evitar esses ataques. No entanto, o método de retorno de chamada que é responsável por renderizar bbcodes de vídeo chama urldecode() no URL do vídeo que deve ser incorporado (por exemplo, youtube.com/xyz). Isso é mostrado no seguinte trecho de código:

inc/class_parser.php

function mycode_parse_video($video, $url)
1385 {
1386 global $templates;
1387
1388 if(empty($video) || empty($url))
1389return "";
1390
1391 $parsed_url = @parse_url(urldecode($url));
1392
1393 // [...]
1394

O fato de o URL do vídeo ser codificado por url permite ignorar a proteção de regex e injetar um código de url da url, conforme descrito acima, por meio de URL codificado. Isso leva a um manipulador de eventos onload sendo injetado na tag <iframe>. Esse manipulador de eventos é acionado assim que a página dentro do iframe é carregada, portanto, nenhuma interação do usuário é necessária para acionar o código JavaScript malicioso.

Solução alternativa

Desconhecido

Créditos

Simon Scannell (RIPS Techonologies)

Referência(s)

MyBB 1.8.21 Released — Security & Maintenance Release
https://blog.mybb.com/2019/06/10/mybb-1-8-21-released-security-maintenance-release/

MyBB <= 1.8.20: From Stored XSS to RCE
https://blog.ripstech.com/2019/mybb-stored-xss-to-rce/

MyBB 1.8.21
https://github.com/mybb/mybb/commit/44fc01f723b122be1bc8daaca324e29b690901d6

CVE-2019-12830
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12830

CVE-2019-12830
https://nvd.nist.gov/vuln/detail/CVE-2019-12830

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 25 junho 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.