CSIRTCV

Está usted visitando una publicación en la hemeroteca de CSIRT-CV.
Para acceder al portal y contenido actual, visite https://www.csirtcv.gva.es

06/02/2012

Greu vulnerabilitat en PHP introduïda amb un pegat anterior

La nova versió de PHP 5.3.10 resol una vulnerabilitat que permet l’execució de codi remot, i que va ser introduïda en intentar arreglar l’anterior actualització.

Risc: Crític

Si fa un parell de setmanes es publicava l’actualització 5.3.9 de PHP, ara es detecta una nova vulnerabilitat provocada pels canvis introduïts en el pegat que solucionaven l’anterior, relacionada amb les taules de resum (CVE-2011-4885).

Segons l'investigador Stefan Esser (i0n1c), esta nova vulnerabilitat (CVE-2012-0830) permetria l'execució remota de codi o si no n’hi ha, un atac de denegació de servici. Hi ha una prova de concepte que l’aprofita.

La vulnerabilitat es presenta en la introducció d’una nova propietat dins de php.ini, anomenada "max_input_vars" que limita el nombre màxim de paràmetres que poden ser usats en una petició (per ex:http://www.sitio.com/peticion.php?a=1&b=2&c=3). Per defecte se li assigna el valor 1000.

Açò, unit als canvis introduïts en la funció 'php_register_variable_ex' que no controlen correctament quan se supera el valor max_input_vars i s’utilitza una agrupació de variables, permet que es puga executar el codi remotament.

Si s’observa el codi canviat en php_variables.c, es comprova que només es controlen els valors menors o iguals a "max_input_vars":

if (zend_hash_núm_elements(symtable1) <= PG(max_input_vars)) { 
if (zend_hash_núm_elements(symtable1) == PG(max_input_vars)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variables exceeded %ld. To increase the limit change max_input_vars in php.ini.", PG(max_input_vars)); } 
...

Sense else que encamine per altres vies el codi. Per tant, si se supera el dit valor el codi seguiria executant-se fins a arribar a:

symtable1 = Z_ARRVAL_PP(gpc_element_p);

una macro que torna referències a la taula de resum actualitzada. És ací on es podria executar el codi arbitrari o, provocar una denegació de servici.

Sistemes Afectats:

PHP 5.3.9

Referències:

CVE-2012-0830

Solució:

PHP ha publicat ràpidament l’actualització de PHP 5.3.10 que es troba disponible en:
http://www.php.net/downloads.php

Notes:

Una vulnerabilitat podria permetre deixar sense servici la majoria de servicis web
http://unaaldia.hispasec.com/2011/12/una-vulnerabilidad-podria-permitir.html

Critical PHP Remote Vulnerability Introduced in Fix for PHP Hashtable Collision DOS
http://thexploit.com/sec/critical-php-remote-vulnerability-introduced-in-fix-for-php-hashtable-collision-dos/

Simple proof of concept for PHP bug described by Stefan Esser (@i0n1c)
https://gist.github.com/1725489

Font: Hispasec una-al-día

CSIRT-CV