Diversas vulnerabilidades no PHP 4 e 5 PDF Imprimir
Sistemas Operativos Implicados: Indefinido
Aplicações Implicadas: PHP

Diversas vulnerabilidades no PHP permitem a execução local e remota de código arbitrário. I. Sinopse

Diversas vulnerabilidades no PHP permitem a execução local e remota de código arbitrário

II. Enquadramento

PHP é uma línguagem de scripting desenvolvida especialmente para a WEB.

III. Versões Afectadas

Vulneráveis:
PHP4 <= 4.3.9
PHP5 <= 5.0.2

IV. Descrição

Diversas vulnerabilidade foram descobertas dentro do código base do PHP, desde "buffer overflows", passando por fugas de informação e corte de "paths" até "bypass" a restrições de safe_mode.

V. Detalhes técnicos:

pack() - integer overflow conduzindo a heap bufferoverflow
A validação insuficiente dos parâmetros passados à função pack() pode conduzir a um overflow que pode ser usado para executar código arbitrário a partir de uma script PHP. Isto permite a um atacante contornar limitações do safe_mode e de executar o código arbitrário com as permissões do webserver. Dada a natureza desta função, é pouco provável que uma script a deixe, acidentalmente, exposta a atacantes remotos.

unpack() - integer overflow conduzindo a fuga de informação da heap
A Validação insuficiente dos parâmetros passados à função unpack() pode conduzir a uma fuga de informação da heap, a qual pode ser usada para obter dados secretos de processos do apache.

safe_mode_exec_dir bypass em multithreaded PHP
Quando o safe_mode é activado dentro de PHP, permite somente executar comandos dentro da safe_mode_exec_dir configurada. Infelizmente, o PHP acrescenta um "cd [directoria_actual] ;" a qualquer executável quando PHP corre em webservers unix multithreaded (exe. algumas instalações de apache2). Um atacante pode contornar as restrições de safe_mode_exec_dir "injectando" comandos no nome da directoria "actual".

safe_mode bypass actravés de truncagem de path
As verificações do safe_mode truncam o filepath em MAXPATHLEN bytes antes de passá-lo ao realpath().
Em combinação com determinadas implementações defeituosas do realpath() dentro do glibc isto permite criar um filepath que passa a verificação do safe_mode embora aponte para um ficheiro que deva falhar a verificação do safe_mode.

truncagem de path na função realpath()
O PHP usa o realpath() em diversos locais para obter a verdadeira path dos ficheiros.
Infelizmente, algumas implementações do realpath() truncam nomes de ficheiros demasiado longos(exe. OpenBSD, versões antigas de eNetBSD/FreeBSD ). Isto pode conduzir a vulnerabilidades que permitam inclusão "ilegal" de ficheiros arbitrários, se algo como "include" modules/$userinput/config.inc.php "; for usado em tais sistemas.

unserialize() - manuseamento incorrecto de referências negativas
A variável unserializer pode ser ludibriada com referências negativas para adicionar zvalues às hashtables.
Quando essas hashtables são destruidas podem conduzir a efree()s de endereços de memória arbitrários, o que pode resultar na execução de código arbitrário.

unserialize() - manuseamento incorrecto de referências para dados libertos
Adicionalmente ao bug anterior, a versão prévia da variável unserializer permitia criar referências para entradas já libertas na hash de variáveis. Um atacante habilidoso poderá explorar isto para criar uma string universal que transportará a execução para um endereço de memória arbitrário, quando passado para a função unserialize(). Para sistemas AMD64 foi até possível desenvolver uma string que transporta a execução directamente para código shell contido na própria string.

É importante compreender que estas strings podem explorar remotamente um grande conjunto de aplicações PHP, simplesmente por passarem dados de cookies à função unserialize().

Exemplos de scripts vulneráveis:

- phpBB2
- Invision Board
- vBulletin
- Woltlab Burning Board 2.x
- Serendipity Weblog
- phpAds(New)
- (...)

VI. Recomendação
Recomenda-se fazer upgrade para as últimas versões de PHP o mais cedo possível, devido ao elevado número de aplicações PHP vulneráveis ao exploit da função "unserialize()", facilmente expostas a atacantes remotos.

VII. Referências
Fonte do alerta: http://www.hardened-php.net/advisories/012004.txt

Missão

O CERT.PT tem como missão contribuir para o esforço de cibersegurança nacional nomeadamente no tratamento e coordenação da resposta a incidentes, na produção de alertas e recomendações de segurança e na promoção de uma cultura de segurança em Portugal.

PT EN
Participe Incidente

Contactos

Av. do Brasil 101 
1700-066 Lisboa 
Portugal

Tel: +351 218440177 (9h30-12h30, 14h00-17h30; GMT)  
Fax: +351 218472167

email:

pgp: 342A 17BA DF71 E193 6871 0357 8BDE A247 C523 AAE7

Filiação

FIRST
Acreditação Internacional
Membro da Rede Nacional CSIRTs