domingo, 3 de junio de 2012

Inyección SQL en Ruby on Rails

Se ha publicado una nueva versión de Ruby on Rails que soluciona varios problemas de seguridad. El más grave, permitiría a un atacante inyectar consultas SQL y obtener información sensible de las tablas en una base de datos.

Ruby on Rails, también conocido como RoR o Rails, es un framework de aplicaciones web de código abierto escrito en Ruby que sigue el paradigma de la arquitectura Modelo-Vista-Controlador (MVC).

Ben Murphy descubrió una vulnerabilidad en Active Record, que es la clase que se encarga de todo lo referente a conexiones y consultas a la base de datos. El error reside en el modo en el que esta clase maneja los parámetros de una petición, dejando la posibilidad a que un atacante remoto pueda llevar a cabo inyecciones SQL a través de una petición especialmente manipulada.

Esta vulnerabilidad tiene como identificador CVE-2012-2661 y afecta a las versiones 3.0.0 y anteriores con excepción de la versión 2.3.14, que no es vulnerable.

Aunque se han publicado nuevas versiones que solucionan este y otros fallos, un simple cambio en el código puede ser una contramedida eficaz para esta vulnerabildiad. Es necesario forzar el tipo del parámetro para que sea una cadena (string). Por lo tanto, si se tiene esta consulta:

  Post.where(:id => params[:id]).all

Se debería cambiar por esta otra:

  Post.where(:id => params[:id].to_s).all

Se han publicado parches para las ramas 3.0, 3.1 y 3.2. Los usuarios de versiones anteriores (que ya no tienen soporte) deberán implementar la contramedida anterior o actualizar a las últimas versiones (3.2.4, 3.1.5 o 3.0.13).

Más información:

Rails version 3.2.5 has been released!

SQL Injection Vulnerability in Ruby on Rails


Daniel Vaca

No hay comentarios:

Publicar un comentario en la entrada