Nível de Segurança: Perigoso
Nível de Exploração: Fácil/Remoto
DREAD Score: 7/10
Vulnerabilidade: XSS Armazenado
Versão Patched: bbPress 2.5.9
Durante uma audição de rotina para o Firewall da Sucuri, descobrimos uma vulnerabilidade de XSS armazenada que afeta o plugin bbPress para WordPress, atualmente está instalado em 300.000 websites ao vivo – um desses sites, é o popular fórum de suporte wordpress.org.
Linha do Tempo da Divulgação da Vulnerabilidade:
- 12 de abril de 2016 – Bug descoberto, relatório inicial à equipe do bbPress
- 2 de maio de 2016 – A equipe do bbPress anuncia o lançamento de segurança
- 3 de maio de 2016 – A Sucuri anuncia o lançamento
Seu Site está Correndo Risco?
Esse bug está presente em cada instalação padrão do bbPress < 2.5.9, então sim, seu site provavelmente está correndo risco. A vulnerabilidade permite que qualquer usuário malicioso participe em um fórum para inserir snippets de Javascript maliciosos nos posts e nas respostas. Isso é muito perigoso, devido a natureza social dos fóruns.
Como se trata de uma vulnerabilidade Cross-Site Scripting (XSS), pode permitir ao usuário sequestrar (hijack) a conta de outro usuário, e fazer ações em seu nome (como administradores, moderadores, etc.) para escalar os privilégios de usuários.
Detalhes Técnicos
Todos os posts e respostas são sanitizadas pela função do WordPress wp_kses(), que funciona como uma função de sanitização de whitelist. Isso significa que ela permite apenas tags HTML aprovadas e seus atributos whitelisted (e protocolo de URL para atributos como o href e src) pelo motor de filtro.
A função bbp_mention_filter é interessante, já que é uma das poucas funções que não provém do WordPress.
Esse código faz o seguinte:
- Procura menções no post: bbp_find_mentions, tendo como resultado cada combinação a partir do regex: /[@]+([A-Za-z0-9-_\.@]+)\b/
- Para cada combinação, verifica se ela corresponde a um usuário conhecido e se esse usuário está ativo ou não.
- Uma vez feito isso, ele irá substituir essas menções por uma tag HTML de hyperlink, com o link para a página de perfil do usuário.
O código não verifica se as menções encontradas já estão localizadas dentro de um atributo de tag HTML. Então, se um usuário com o nome ‘test’ enviar uma resposta contendo uma tag de=o hyperlink cujo atributo está configurado para @test, isso quebraria a tag do hyperlink.
Para ilustrar melhor, isto:
<a href="@test">link</a>
… tornaria-se:
<a href="<a href="http://targetsite/test/profile/" rel="nofollow">test</a>">link</a>
Esse código quebra a sequência de aspas duplas da tag do hyperlink, permitindo ao atacante inserir handlers de eventos arbitrários (parecido com a divulgação do Akismet), com o objetivo de executar o código malicioso do Javascript.
Atualize o Mais Rápido Possível
Se você estiver usando uma versão vulnerável desse plugin, atualize o mais rápido possível! Se você não puder fazê-lo, recomendamos que use um Firewall ou uma tecnologia equivalente para fazer seu patch virtual.
Share Your Comments: