Posibles ataques
El uso de PHP como un binario CGI es una
opción para el tipo de situaciones en las que por alguna
razón no se desea integrar PHP como módulo de
algún software de servidor web (como Apache), o en donde
se espera usar PHP con diferentes tipos de capas que envuelven el
entorno CGI para crear ambientes chroot y setuid seguros para la
ejecución de scripts. Esta configuración usualmente
involucra la instalación de un binario ejecutable del
intérprete PHP en el directorio cgi-bin del servidor
web. El aviso de seguridad de CERT » CA-96.11 recomienda que se evite la
colocación de cualquier intérprete bajo
cgi-bin. Incluso si el binario PHP puede ser usado como un
intérprete independiente, PHP está diseñado
para prevenir el tipo de ataques que esta configuración
hace posible:
-
Acceso a archivos del sistema: http://mi.servidor/cgi-bin/php?/etc/passwd
La información del query en una URL, la cual viene
después del signo de interrogación (?), es pasada
como argumentos de línea de comandos al
intérprete por la interfaz CGI. Usualmente los
intérpretes abren y ejecutan el archivo especificado
como primer argumento de la línea de comandos.
Cuando es invocado como un binario CGI, PHP se rehúsa a
interpretar los argumentos de la línea de comandos.
-
Acceso a cualquier documento web en el servidor: http://mi.servidor/cgi-bin/php/zona_secreta/doc.html
El segmento de la URL que sigue al nombre del binario de PHP,
que contiene la información sobre la ruta /zona_secreta/doc.html es usada
convencionalmente para especificar el nombre de un archivo que
ha de ser abierto e interpretado por el programa
CGI. Usualmente, algunas directivas de
configuración del servidor web (Apache: Action) son
usadas para redireccionar peticiones de documentos
como http://mi.servidor/zona_secreta/script.php
al intérprete de PHP. Bajo este modelo, el servidor web
revisa primero los permisos de acceso al directorio /zona_secreta, y después de eso
crea la petición de redireccionamiento a http://mi.servidor/cgi-bin/php/zona_secreta/script.php.
Desafortunadamente, si la petición se hace originalmente
en esta forma, no se realizan chequeos de acceso por parte del
servidor web para el archivo /zona_secreta/script.php,
únicamente para el archivo /cgi-bin/php. De este modo, cualquier
usuario capaz de acceder a /cgi-bin/php es capaz también de
acceder a cualquier documento protegido en el servidor web.
En PHP, la configuración de tiempo de compilación
--enable-force-cgi-redirect
y las directivas de configuración en tiempo de
ejecución doc_root y
user_dir pueden ser usadas
para prevenir este tipo de ataques, si el árbol de
documentos del servidor llegara a tener directorio alguno con
restricciones de acceso. Consulte las siguientes secciones para
una explicación detallada de las diferentes
combinaciones.