|
Diversas vulnerabilidades no PHP 4 e 5 |
|
|
-
Categoria: Alertas
-
quarta, 22 dezembro 2004 18:46
| 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