Enviado por Mariano D'Agostino el 24 de Abril de 2009
El software libre es algo increíble. Hay que admitirlo, miles de personas trabajando en algo en común sin buscar rédito personal parece más una utopía que una realidad. Y sin embargo, desde hace muchos años es un fenómeno que crece y crece, cada vez más.
En lo que a seguridad respecta, es crucial la cantidad de ojos que revisan código. Imagine, un programador desarrolla una pieza de software, y cientos de personas, muchas con más conocimientos que él, validan y corrigen o sugieren mejoras. El resultado final es un mejor código, más seguro y estable.
Como ejemplo más cercano de esto está el núcleo de Drupal. Un día como cualquiera:
Károly Négyesi (chx) publica una idea sobre una nueva funcionalidad para el núcleo. Como primera medida, él envía un código inicial.
Horas después, Neil Drumm revisa ese código y sugiere mejoras. Le siguen Larry Garfield, Dave Reid, Dries Buytaert, Angie Byron y muchos otros.
Cuando uno se quiere dar cuenta, el código que fue revisado por decenas de personas y que cambió bastante desde su versión original esta listo para agregarse al núcleo.
Muchos meses después un tal Heine Deelstra descubre un pequeño error en ese código que representa una brecha en la seguridad de todo el sistema, y a las horas o tal vez minutos, el problema esta solucionado.
Mientras tanto, usted y yo, y muchos otros solo ven esto como un aviso en el sitio de www.drupal.org/security y piensa, ¡otra vez! pero actualicé Drupal hace dos semanas!.
Responsabilidades a la hora de desarrollar con software libre:
Lo crea o no, es mejor que esto suceda a que no suceda. Esto es como cuando el antivirus dice "Virus detectado", hubiese sido peor que no lo detecte, su pc seguramente ya estaría infectada.
Cada persona que utilice Drupal debería saber que tiene la responsabilidad de actualizar sus instalaciones cada vez que alguien descubre un nuevo agujero de seguridad. Más aún si su cliente desconoce que esto puede ocurrir y confía que usted se va a encargar "de todo".
Por eso, el primer consejo que me gustaría darle a los recién iniciados en Drupal es: No desestimen las advertencias de seguridad de Drupal. Esa gente sabe más que usted seguramente, y otros que saben tanto como ellos pueden estar interesados en explotar esa vulnerabilidad.
Los consejos infaltables
Sin embargo, aunque alguien mantenga su sitio perfectamente actualizado, probablemente esto no garantice la seguridad de su sitio.
Código en PHP, el camino más simple al desastre:
Me veo en la obligación de aclararlo, pido disculpas por su simplicidad pero es importante aclararlo: Nunca, nunca, en serio, nunca, le de acceso a la ejecución de código en PHP a alguien en que no confíe. Y de hecho, no debería confiar en nadie para esta tarea. Salvo que sea su compañero de trabajo (otro programador o diseñador como usted), la respuesta que encontrará en muchísimos lugares es: No, no lo haga.
Este detalle es tan importante que desde Drupal 6, la posibilidad de ejecutar código en PHP debe activarse desde un módulo aparte que viene desactivado por defecto.

Y nunca, nunca por lo que más quiera!, haga esto:

Ni esto:

Disculpen la efusividad, pero el tema es realmente crítico.
XSS. Ese pequeño diablillo
Según una estadística que ahora no puedo ubicar para citar, más del 40% de los ataques que sufren los sitios de Drupal son del tipo XSS.
Este tipo de ataques consiste en que alguien, de forma mal intencionada coloca un trozo de código en javascript en algún nodo, comentario, o lo que sea que permita el sitio. Y luego, otro usuario (generalmente un administrador), visualizando el contenido, le permite realizar tareas un tanto peligrosas.
Seguramente habrá visto ese simple ejemplo de ataque XSS:
<script>
alert("hola");
</script>Por favor, no crea que esto es lo más "peligroso" que puede hacer este tipo de ataques. Hay explicaciones detalladas de como cambiar la contraseña del administrador con este tipo de ataques. Si leyó bien.
Afortunadamente es bastante sencillo evitar este tipo de ataques, por lo menos a nivel básico:
- Primero: Revise sus filtros de entrada, nunca permita HTML sin filtrar en sus contenidos. Solo permita etiquetas confiables.
- Segundo: Actualice regularmente sus módulos si presentan fallas de seguridad.
- Tercero: Si programa sus propios módulos, siga las normas de seguridad.
Un cuarto ítem es importante de destacar. Si descubre que un sitio tiene problemas con sus filtros de entrada, avísele al administrador del sitio.
Si un usuario no confiable (como los usuarios anónimos) al momento de crear un comentario (o un nodo) puede ver esto en su sitio, usted debería revisar sus permisos:

Inyecciones SQL, la cosa se pone fea...
Atención programadores novatos. Drupal posee una capa de abstracción de base de datos para evitar este tipo de ataques. Úsela y su código será más robusto. No los use y seguramente su módulo sea un hoyo en la seguridad de todo su sitio.
Los ataques de inyección de SQL permiten ejecutar consultas directamente sobre la base de datos. El detalle, imagine si alguien le borra todos los nodos de su sitio. ¡Que bueno!, ¿no?.
En este error suelen caer los recién iniciados en Drupal. Alguien con unos pocos conocimientos de PHP puede programar un módulo para Drupal. Seguir estas normas es lo mínimo que podrían hacer para evitar ser despedidos :)
Este link es la referencia fundamental para todo aquel que quiera escribir código seguro:
A modo de ejemplo:
<?php
// código inseguro:
$res = db_query("SELECT nid FROM node WHERE type = '$tipo'");
// código seguro:
$res = db_query("SELECT nid FROM {node} WHERE type = '%s'", $tipo);
?>La diferencia principal entre ambos códigos es que en el primero si $tipo vale
'; DELETE FROM users;-- Todos los usuarios de su sitio se van de vacaciones. (y no volverán más...)
Pero espere, aún hay más... :(
No sólo a nivel superficial puede haber problemas de seguridad:
Controle los permisos de archivos
Si usted ve este cartel en su reporte de estado Administrar -> Reportes -> Reporte de estado

También tiene fallas de seguridad. Si settings.php no esta debidamente protegido por permisos de usuario, algún atacante podría leer nada más y nada menos que la clave de acceso a la base de datos del sitio. Ups, pequeño desliz...
Si usted aún utiliza Drupal 5, debería tomar muy en serio la seguridad, sobre todo si permite a sus usuarios que suban archivos a su sitio. Drupal 6 introduce muchas mejoras en lo que respecta al manejo de los archivos adjuntos en el sitio.
Algunas sugerencias
El reporte de estado es la primer fuente de información . En el figuran todas las configuraciones erroneas que detectó Drupal y pueden ser peligrosas para el sitio. No crea que si no hay errores esta todo bien. Simplemente intente que no se vean adevertencias en esa sección.
Habilite el módulo Update. Este módulo incluído en Drupal 6 y disponible para Drupal 5 bajo el nombre de Module Update Status, indica si hay algún módulo que esté desactualizado.
No se alarme si tiene algún módulo desactualizado. Despues de todo puede ser que el error corregido en la nueva versión no represente una mejora en lo que respecta a seguridad. Si lee en rojo brillante ¡Se requiere una actualización de seguridad! debería entonces considerar una actualización del módulo.

Revise los reportes de seguridad de Drupal. Lea de que se trata el reporte y cuan crítico es. Por ejemplo, meses atrás el módulo Views fue actualizado por un problema de SQL Injection, sin embargo fue indicado como Moderadamente Crítico porque tenian que cumplirse muchas condiciones para que el problema fuese posible de explotar.

Hay mucha documentación sobre como mejorar la seguridad de su sitio. La mayoría se aplican si usted es programador. Les dejo algunos links para aquellos que quieran profundizar más sobre esto de la seguridad en Drupal.
Vea que es lo que puede ver un usuario con menos privilegios. Cierre sesión y navegue su sitio anónimamente, muchas veces utilizamos el usuario admin y controlar que cosas estan activas y que no.
En inglés:
- Guía fundamental para programar código seguro: http://drupal.org/writing-secure-code
- Sitio oficial de anuncios de seguridad en Drupal: http://drupal.org/security
- Sito web de Heine Deelstra, miembro del equipo de seguridad de drupal: http://heine.familiedeelstra.com/security
- Artículo sobre multisitios seguros: http://justinhileman.info/articles/a-more-secure-drupal-multisite-install
En español:
- Carmel Hassan escribió un interesante artículo sobre ¿Cuándo actualizar drupal?
Lo importante de todo esto no es asustarse. Todo problema de seguridad conocido en Drupal tiene una solución, sólo hay que estar atento y las cosas funcionaran bien... Esperemos :)
Comentarios
muy interesante...
Enlace permanente Enviado por mama21mama (no verificado) el 24 de Abril de 2009
Hola; gracias por aclarar mis dudas.
SAludos
Seguridad en Drupal
Enlace permanente Enviado por Mariano D'Agostino el 25 de Abril de 2009
Hola Gabriel:
En principio sí. La comunidad de Drupal hace un esfuerzo grande en definir políticas de seguridad y buenas prácticas.
Algunos sitios sin embargo, requieren un nivel de seguridad un tanto mayor. Para esos casos existen una serie de módulos específicos para mejorar la seguridad en diferentes ámbitos.
Por nombrar algunos:
Drupal posee un grupo de modulos categorizados bajo el término Security. Dependiendo de las necesidades que tengas algunos te servirán más que otros.
Espero que aclare las dudas.
Saludos
que permiso hay que darles...
Enlace permanente Enviado por mama21mama (no verificado) el 07 de Mayo de 2009
Hola que permisos hay que darles a todo Drupal para estar bien seguro por medio del FTP, ya que en mi caso contrato un hosting?
Saludos
Sobre settings.php
Enlace permanente Enviado por Saúl (no verificado) el 19 de Junio de 2009
Hola:
Antes que nada buen post y buen blog :D, sólo una aclaración sobre settings.php, el error como el que mencionas es acerca de permisos de escritura, es la restiricción que pone Drupal, de hecho en el mensaje se ve. Los permisos de lectura ya son otra cosa. Saludos.
Seguridad
Enlace permanente Enviado por Mario (no verificado) el 04 de Agosto de 2009
Gracias por el artículo, el tema de seguridad es sumamente importante, en la red existe todo tipo de gente y siempre se debe de estar al día con este tipo de temas, como dices, cualquier desliz y ya fuimos...
Saludos
agradecer
Enlace permanente Enviado por Anónimo (no verificado) el 14 de Diciembre de 2009
Gracias por la información. Lenguaje ameno, con ejemplos, muy claro...
Enlace caído
Enlace permanente Enviado por adrag87 (no verificado) el 28 de Octubre de 2010
Gracias por la información.
El enlace que se encuentra en "Carmel Hassan escribió un interesante artículo sobre ¿Cuándo actualizar drupal?" está caído.