ASA-2018-00052 – phpBB: Execução remota de código autenticada via desserialização de arquivo Phar


For the English version of this alert, click here.

Allele Security Alert

ASA-2018-00052

Identificador(es)

ASA-2018-00052, CVE-2018-19274

Título

Execução remota de código autenticada via desserialização de arquivo Phar

Fabricante(s)

phpBB

Produto(s)

phpBB

Versão(ões) afetada(s)

phpBB anterior 3.2.4

Versão(ões) corrigida(s)

phpBB 3.2.4

Prova de conceito

Desconhecido

Descrição

Passar um caminho absoluto para a validação em file_exists() no phpBB anterior 3.2.4 permite execução remota de código através da injeção de objetos, empregando desserialização de um arquivo Phar quando um atacante tem acesso ao painel de controle do administrador com permissões do fundador.

Detalhes técnicos

Vulnerabilidades de desserialização Phar  ocorre se entrada de dados do usuário é passada sem verificação para qualquer função do sistema de arquivo em PHP, como file_exists().

A vulnerabilidade no phpBB3 está em um recurso que permite administradores editar imagens que foram enviadas para o fórum. O recurso utiliza um editor de imagem binária chamada Imagick. Administradores são capazes de atribuir caminhos absolutos para o editor de imagem binária no servidor rodando phpBB3. Antes de atualizar as configurações, phpBB3 tenta validar o novo caminho com a função validate_config_vars(). A função realiza esta validação checando se o arquivo atualmente existe.

Para realizar a exploração, os seguintes passos são necessários.

Enviando um arquivo Phar malicioso

A fim de acionar a desserialização do arquivo Phar, o caminho local para o arquivo Phar no servidor alvo deverá ser especificado.

Isto significa que um atacante deve enviar um arquivo Phar malicioso para o alvo. No phpBB3 é permitido usuários enviar anexos e adicionar em tópicos e posts, enviar um arquivo Phar malicioso é trivial. Embora somente um conjunto de extensões são permitidas, como .jpg e .pdf, um atacante pode ainda enviar um arquivo válido Phar para o servidor. Isto acontece devido a arquivos Phar ser independentes de extensões. Se o arquivo evil.phar for renomeado para evil.jpg, o exemplo acima de acionar a desserialização Phar ainda funcionaria. Há também arquivos poliglotas que são imagens JPG e arquivos Phar válidos ao mesmo tempo.

Derrotando a randomização de nome de arquivo

Quando arquivos são enviados para o fórum phpBB3 (exemplo: anexos de posts ou imagens), seus nomes de arquivos serão aleatórios. Quando evil.jpg é enviado, ele será armazenado no diretório /phpBB3/files/ como um hash MD5 gerado aleatoriamente, por exemplo 2_08cc076da659b5b30de5fbfe10c05270. A fim de realizar a exploração da desserialização do arquivo Phar, um atacante deve saber o caminho exato do arquivo no servidor. A randomização do nome de arquivo do phpBB3 é criptograficamente segura, então ataques de força bruta não é uma opção confiável. Isto significa que o primeiro passo de enviar o arquivo pode ser facilmente feito mas o segundo passo de acionar a desserialização Phar falha porque o atacante não sabe o caminho do arquivo Phar.

Contudo, uma fraqueza no processo de enviar arquivos permite um atacante prever o nome no servidor. phpBB3 oferece aos usuários a opção de enviar arquivos em pedaços, qual significa que um arquivo grande pode ser enviado em múltiplas requisições. Todos os pedaços do arquivo são escritos em um arquivo temporário. Uma vez todos os pedaços tiverem sido anexados ao arquivo, seu nome de arquivo é randomizado e movido para o diretório /phpBB3/files. O nome de arquivo temporário é gerado pela função temporary_filepath(). A função recebe um argumento que é o nome do arquivo Phar malicioso que o atacante quer enviar, neste caso evil.jpg.

A função então retorna o nome do arquivo, que consiste no salt do arquivo enviado, o hash MD55  de $filename, que é evil.jjpg e a extensão de $file_name que é .jpg. Desde $file_name está em controle do atacante, somente uma parte do nome do arquivo é desconhecida devido plupload_salt. Este salt  é criptograficamente seguro, um hash randômico que é único para cada board do phpBB3 e é gerado quando o board em questão é criado. Contudo, o hash é armazenado no banco de dados na tabela phpbb_config. Administradores com privilégios de fundador pode obter backups do banco de dados MySQL e extrair o salt plpupload. Isto permite um atacante prever o caminho completo do arquivo Phar no servidor.

O arquivo temporário será armazenado até todos os pedaços serem enviados. Um atacante pode iniciar o envio de um arquivo e dizer ao phpBB3 que dois pedaços serão enviados. Ao enviar um arquivo Phar com o primeiro pedaço mas nunca enviar o segundo, ele pode conduzir o phpBB3 em aguardar até o segundo pedaço chegar e não deletar o arquivo temporário. Deste modo ele pode enviar um arquivo e saber o nome do arquivo no servidor.

Acionando a falha e executando código

O último passo para explorar a desserialização do arquivo Phar é encontrar gadgets POP que podem ser abusados para realizar ações maliciosas. Nós conseguimos encontrar uma cadeia de POPs que permite atacantes criar arquivos arbitrários no servidor e injetar código PHP no arquivo. Isto significa que um atacante pode facilmente criar uma shell.php e então executar códigos arbitrários no servidor, conduzindo ao controle total.

Créditos

Simon Scannell and Robin Peraglie of RIPS Technologies

Referência(s)

phpBB 3.2.3: Phar Deserialization to RCE
https://blog.ripstech.com/2018/phpbb3-phar-deserialization-to-remote-code-execution/

phpBB 3.2.4 Release – Please Update
https://www.phpbb.com/community/viewtopic.php?f=14&p=15131871

Implementation and improvements of PharGGC, –output and –ascii-strings
https://github.com/ambionics/phpggc/issues/24

CVE-2018-19274
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19274

CVE-2018-19274
https://nvd.nist.gov/vuln/detail/CVE-2018-19274

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

Última modificação: 25 de novembro de 2018