[Ubuntu-ni] debilidad reportada en PHP pero en guin2

yury zapata ya2533137 en gmail.com
Mar Oct 21 22:51:01 BST 2008


http://markmail.org/message/ywyzdx3nvkkmfnlo#query:debilidad%20de%20apache+page:1+mid:ywyzdx3nvkkmfnlo+state:results

la *debilidad* reportada en PHP es un problema relacionado con la forma
típica en la cual PHP es instalado en Windows.... es una *debilidad* típica
*de* los programas CGI (tanto en Unix/Linux como en Windows)... y es
particularmente compleja debido a que Windows no cuenta con el usuario
"nobody " que tiene Unix/Linux para evitar la ejecución *de* programas...

OJO : este error ocurre en cualquier versión *de* PHP y *de* *Apache* en
Windows !!

Cuando se crea un login/shell a "nobody" es posible que un "hueco
*de*seguridad" similar se defina para tu sistema Unix/Linux !!

_____________________________________________________________

1 - PHP permite acceso total a sistemas críticos

_____________________________________________________________

Son vulnerables la versión PHP 4.0 con *Apache* Server versión 2.0.

correción... esto no es cierto !!... es vulnerable cualquier versión
*de*PHP (naturalmente he revisado 4.0.5, 4.0.6, 4.0.8-devel, y 4.1.1)
con
cualquier versión *de* *Apache* sobre Windows (incluyendo a *Apache* 1.3.x)
!!... la vulnerabilidad se debe a la forma como se instala PHP en Windows !!


normalmente no es vulnerable una instalación *de* PHP usando Personal Web
Server o Internet Information Server... debido a que típicamente usa un
módulo SAPI o usa un "definición *de* extensión *de* archivo" y no un CGI *
de* PHP

El exploit se produce ejecutando en el navegador una línea HTML como esta:
http://www.dominio.com/<?%20system('comando a ejecutar');%20?>

todas las peticiones (incluyendo las peticiones GET como esta), se anexan al
archivo "access.log"...

aqui se agrega una linea con el comando php al access.log... <%
system('comando'); ?>

Desde allí puede ser leída por el atacante por medio *de* una línea como la
siguiente: http://www.dominio.com/php/php.exe?c:\*apache*\logs\access.log

debido a que en *Apache*/Windows, lo nomal es tener un CGI aparte para
configurar el PHP... es posible ejecutar el PHP desde una petición GET
http://www.dominio.com/php/php.exe

... solamente hay que especificar el archivo que desean "ver" o
"ejecutar"...

== Ejemplos *de* acceso a archivos...

desea ver un archivo *de* su equipo ??... por ejemplo, el autoexec.bat...
use... http://www.dominio.com/php/php.exe?c:\autoexec.bat

desea ejecutar un comando ??... guarde el comando en un archivo
cualquiera... para el caso, el más fácil, el access.log...
http://www.dominio.com/<?%20phpinfo();%20?> y...
http://www.dominio.com/php/php.exe?c:\*apache*\logs\access.log

== Cual es el problema ??...

el problema se debe a la configuración del *Apache*... cuando se configura
el *apache* como un CGI, debe definirse en *apache* un "alias" para el
programa php.exe... haciéndo que ese programa sea accesible desde una
petición GET !!

por ejemplo...

# crea el alias /php/... puede usarse desde una petición GET ScriptAlias
/php3/ "C:/php/" ScriptAlias /php/ "C:/php/"

# define las extensiones *de* los archivos AddType application/x-httpd-php3
.phtml AddType application/x-httpd-php3 .php3 AddType
application/x-httpd-php3 .php AddType application/x-httpd-php3-source .phps

# define que programa ejecutar cuando se tiene esas extensiones # note que
se usa el alias Action application/x-httpd-php3 /php/php.exe

== por que no pasa en Unix /Linux ??...

no pasa en Unix/linux por dos razones...

- la primera, normalmente PHP se ejecuta como un "módulo" del *apache*... no
como un CGI... eso hace que el programa no sea ejecutable desde una petición
GET...

- la segunda, el "nobody"... ahora, aunque tu Unix/linux use un CGI... el
hecho que *Apache* sea ejecutado por el usuario "nobody" hace que PHP no
pueda ejecutar aplicaciones Unix... lo cual elimina la posibilidad
*de*ejecutar comandos peligrosos o tenga acceso a archivos a los
cuales no tiene
permiso... si se modifica la configuración del "nobody" (su shell) por
ejemplo.... puede ser posible que se pueda ejecutar o visualizar un archivo
*de* tu máquina...

por ejemplo... /etc/passwd http://www.dominio.com/php/php.exe?/etc/passwd

El acceso a estos archivos puede evitarse con el esquema *de*
seguridad *de*los archivos en Linux... para evitar el problema
*de* ejecución *de* programas indeseados, recuerde utilizar el "safe_mode" *
de* PHP, y definir el "safe_mode_exec_dir" !!

== como se puede solucionar ??

para evitar el acceso a PHP desde una petición GET, debe eliminarse el
"ScriptAlias" *de* la configuración del PHP... lo cual solo puede hacerse si
se usa un módulo *de* *apache* (o del servidor web que estas usando)... Este
mismo problema puede pasar cuando usas un alias para "perl" y no usas
"mod_perl" en tu *apache* !!

si deseas usar el módulo *de* *apache*, debes cambiar la configuración del *
Apache*

LoadModule php4_module c:/php/sapi/php4apache.dll AddType
application/x-httpd-php .php

si no tienes forma *de* instalar un módulo *de* *Apache*, puedes usar
"personal web server" o "internet information server"... claro está, sin
definir un directorio ejecutable con "php.exe" !!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://lists.ubuntu.com/archives/ubuntu-ni/attachments/20081021/b2c3977b/attachment.htm 


Más información sobre la lista de distribución Ubuntu-ni