Las versiones de PHP3 inferiores a la 3.0.14 permiten la ejecución de comandos arbitrarios con los privilegios del servidor web que ejecute el script, aún cuando se haya configurado con «safe-mode».
Aunque en «safe-mode» PHP3 sólo permite ejecutar los comandos nativos que se encuentren en un directorio determinado, un defecto de implementación en la función «popen()» permite insertar comandos adicionales no sujetos a esa restricción.
Para ello basta con que los comandos adicionales estén separados del primero por un «;» (punto y coma). Por ejemplo, si el comando «ls» está en el directorio de comandos nativos permitidos, una invocación PHP3 como «popen(ls; /bin/comando», «r»);» ejecutaría el comando «/bin/comando» sin restricciones.
Apenas una semana después de hacerse pública la vulnerabilidad, los autores del PHP3 han publicado una nueva versión del lenguaje, la 3.0.14, que corrige éste y otros problemas. La actualización debería ser urgente.
Aquellos administradores que no puedan actualizar su sistema de forma inmediata, y gracias a que PHP3 es un proyecto Open Source, pueden aplicar el siguiente parche como soluci¢n temporal:
— /tmp/php-3.0.13/functions/file.c Sat Jan 1 05:31:15 2000
+++ functions/file.c Tue Jan 4 23:35:16 2000
@@ -51,6 +51,7 @@
#include «safe_mode.h»
#include «php3_list.h»
#include «php3_string.h»
+#include «exec.h»
#include «file.h»
#if HAVE_PWD_H
#if MSVC5
@@ -575,7 +576,7 @@
pval *arg1, *arg2;
FILE *fp;
int id;
– char *p;
+ char *p, *tmp=NULL;
char *b, buf[1024];
TLS_VARS;
@@ -601,6 +602,11 @@
snprintf(buf,sizeof(buf),»%s/%s»,php3_ini.safe_mode_exec_dir,arg1->value.str.val);
}
– fp = popen(buf,p);
+
+ tmp = _php3_escapeshellcmd(buf);
+ fp = popen(tmp,p);
+ efree(tmp); /* temporary copy, no longer necessary */
+
if (!fp) {
php3_error(E_WARNING,»popen(«%s»,»%s») – %s»,buf,p,strerror(errno));
RETURN_FALSE;
PHP3 es un lenguaje de «script» con una sintaxis h¡brida entre el C y el Perl, utilizado para la generaci¢n din mica de p ginas web, fundamentalmente. Su funcionalidad es comparable al ASP (aunque el ASP est basado en el lenguaje BASIC), pero su gran ventaja es que no est vinculado a ningon sistema operativo ni a ningon servidor web concreto. Aunque fue dise_ado para funcionar bajo Unix y bajo el servidor Apache, tambi’n funciona en Windows y bajo Internet Information Server, Netscape Server, etc. Y, lo mejor de todo, es que se trata de un proyecto Open Source.
M s informaci¢n:
Web Programming – Introduction to PHP
http://www.builder.com/Programming/PHPIntro/?dd.bu.bb.0805.03
PHPBuilder.com – The Resource for PHP Developers
http://www.phpbuilder.com/
PHP/MySQL Tutorial
http://hotwired.lycos.com/webmonkey/databases/tutorials/tutorial4.html
Jesos Cea Avi¢n
jcea@hispasec.com