ASA-2019-00376 – MyBB: Execução Remota de Código (RCE) no painel do administrador por meio de gravação de arquivo


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00376

Identificador(es)

ASA-2019-00376, CVE-2019-12831

Título

Execução Remota de Código (RCE) no painel do administrador por meio de gravação de arquivo

Fabricante(s)

MyBB Group

Produto(s)

MyBB

Versão(ões) afetada(s)

MyBB versiões anteriores 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 Execução Remota de Código (RCE) autenticada que pode ser explorada por administradores de um fórum.

Detalhes técnicos

Os administradores de um fórum MyBB podem gerenciar stylesheets do tema ativo de sua instalação no Painel do Administrador. Eles também podem criar novos arquivos de stylesheets no servidor e escolher o nome do arquivo.

Uma vulnerabilidade de gravação de arquivo óbvia ocorreria se um atacante na função de uma conta de administrador pudesse simplesmente criar um novo arquivo de stylesheets e chamá-lo, por exemplo, shell.php.

No entanto, uma investigação rápida do código-fonte por trás dessa funcionalidade revelou que apenas a extensão de arquivo .css era permitida:

admin/inc/functions_themes.php

    foreach($theme['stylesheets']['stylesheet'] as $stylesheet) {
263 if(substr($stylesheet['attributes']['name'], -4) != ".css"){
264 continue;
265

O que chamou a atenção foi o que aconteceu depois que a extensão foi verificada. Em vez de simplesmente criar o arquivo de stylesheets no sistema de arquivos, o MyBB primeiro armazena o nome do arquivo da stylesheets, bem como o conteúdo do banco de dados MySQL que alimenta a placa. Quando olhamos a tabela mybb_themestylesheets e como ela foi estruturada, notamos algo interessante: a coluna name que armazena o nome do arquivo de uma stylesheets recém-importada é definida como uma coluna varchar com um máximo de 30 caracteres.

Table definition of mybb_themestylesheets
    MariaDB [mybb]> DESC mybb_themestylesheets;
1    +--------------+----------------------+------+-----+---------+----------------+
2    | Field | Type | Null | Key | Default | Extra |
3    +--------------+----------------------+------+-----+---------+----------------+
4    | sid | int(10) unsigned | NO | PRI | NULL | auto_increment |
5    | name | varchar(30) | NO | | | |
6    [...]
7    | stylesheet | longtext | NO | | NULL | |
8    [...]
9    +--------------+----------------------+------+-----+---------+----------------+
10

Em seguida, notamos que o comprimento de um nome de arquivo de stylesheets não é verificado quando importado através de um arquivo XML, resultando em atacantes sendo capazes de enganar o MyBB para inserir um nome de arquivo com mais do que os 30 caracteres permitidos. O comportamento padrão do MySQL em muitos sistemas é truncar o nome do arquivo para 30 caracteres.

Um atacante pode abusar desse comportamento definindo um nome de arquivo como, por exemplo, aaaaaaaaaaaaaaaaaaaaaaaaaa.php.css. Este nome do arquivo tem 34 caracteres. Uma vez que termina com a extensão .css, passa as verificações de segurança do MyBB. No entanto, quando essa sequência é inserida no banco de dados, ela é truncada para 30 caracteres e somente aaaaaaaaaaaaaaaaaaaaaaaaaa.php permanece armazenada no banco de dados.

Um atacante pode usar o painel de administração para gerar os arquivos de stylesheets recém-importados e gravá-los no sistema de arquivos. Isso criaria um shell PHP dentro do diretório de cache.

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-12831
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12831

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

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.