http://www.iec.csic.es/criptonomicon/cgi/
Seguridad
en CGI
Cada vez que rellenamos un formulario y enviamos nuestros
datos o cada vez que utilizamos un buscador para encontrar información, tanto
si lo sabemos como si no, estamos haciendo uso de programas CGI. En esta
sección del Criptonomicón se describirán las amenazas
a que están expuestos los servidores Web que incluyen aplicaciones CGI para
llevar a cabo funciones avanzadas de interacción con el cliente, así como los
propios usuarios, que al enviar información posiblemente confidencial, podrían
ver violada su intimidad si dicha información fuera capturada por un atacante.
Se describirán a lo largo de estas páginas los riesgos y
fallos más comunes, suministrándose abundantes consejos y ejemplos de cómo
deben escribirse los CGI y de cómo configurar el servidor para que esta clase
de problemas no tenga lugar.
Cuando los usuarios envían un formulario o invocan un CGI de alguna otra
forma, en definitiva se les está permitiendo ejecutar remotamente un programa
en el servidor. Es más, puesto que la mayoría de CGI's
aceptan datos de la entrada de usuario (bien después de rellenar un formulario
o directamente desde la línea de URL), en esencia se les brinda a los usuarios
la oportunidad de controlar cómo se ejecutará el CGI, de manera que podrían
intentar la introducción de una serie de parámetros inesperados hábilmente
manipulados para que el CGI funcionase maliciosamente.
Vulnerabilidad
El punto vulnerable de la programación en CGI, es decir, la
amenaza que representan para la seguridad del servidor, es doble:
Server-side includes
(SSI)
Los server-side includes (SSI) son directivas que se pueden incrustar en
una página HTML, de manera que presentará como parte de la página el contenido
de un fichero o la salida de un comando. Aunque los SSI pueden ser muy útiles y
dotan de gran flexibilidad a una página Web, también pueden resultar computacionalmente costosos, pueden impedir la portabilidad
de las páginas Web y tal vez más importante, pueden llegar a abrir agujeros de
seguridad, ya que el autor de la página HTML decide qué programas se ejecutarán
y con qué argumentos. En el caso peor, se podría llegar a ejecutar cualquier
comando y así producir daños irreparables o revelar información. Por este
motivo, a no ser que se tenga una buena razón para usarlos, lo más conveniente
es deshabilitarlos.
Para más información sobre riesgos de las directivas de Server-Side Includes, visita la sección sobre SSI.
Preguntas tomadas de
Los campos ocultos se denominan así porque no se visualizan en la pantalla
del navegador, pero sí se ven si se lista el código fuente en HTML de la
página. Por lo tanto, cualquiera puede cargar la página en su disco local y
editarla, modificando los valores de los campos ocultos. En consecuencia, nunca
se deben utilizar para contener información confidencial ni confiar en ellos
para almacenar información sensible (como precio de un producto). El servidor
deberá contrastar la información recibida procedente de los campos ocultos.
Como ya se ha dicho, los CGI's no tienen por qué
ejecutarse necesariamente desde el formulario donde aparecen. Pueden mandarse
ejecutar directamente desde la ventana de URL, por lo que podrían faltar
parámetros o estar manipulados.
A continuación cito los recursos que he utilizado como fuentes para esta sección
sobre CGI y otros que me han parecido interesantes.
Capítulo de
Capítulo 9 del libro CGI Developer's Guide por Eugene Eric Kim.
Extensa compilación de textos sobre seguridad en CGI, con ejemplos en C y Perl.
Completo curso sobre seguridad en CGI.
Security Issues When Installing and Customizing
Pre-Built Web Scripts
Recomendaciones a tener en cuenta cuando se instalan guiones CGI en nuestro
servidor.
Algunas ideas sobre seguridad en el servidor y también en CGI.
Algunos breves consejos a la hora de escribir guiones CGI.
Colección de punteros a recursos sobre seguridad en CGI.
Más punteros a recursos sobre el tema.
The CGI Resource Index: Documentation: Security