¿Se puede usar el nivel de Ruby $ SAFE contra las vulnerabilidades de las vulnerabilidades de Rails?

Las vulnerabilidades de Rails como CVE-2013-0155 y CVE-2013-0156 podrían permitir que un usuario ejecute código arbitrario, construido a partir de una fuente no confiable (parámetros XML / YAML).

¿El uso de $ SAFE = 4 (por ejemplo) previene tales explotaciones o no? Si es así, ¿los desarrolladores de Rails usan ese nivel de seguridad? Si no, ¿por qué?

Gracias

Objetos contaminados y operaciones protegidas

Básicamente, los niveles de $ SAFE se reducen a proteger una aplicación de datos contaminados, pero el demonio está en los detalles. Hay un capítulo completo en Progtwigción de Ruby que aborda los distintos niveles, y vale la pena leerlo.

Las aplicaciones de Rails generalmente necesitan datos contaminados

En términos generales, la aplicación Rails promedio invita a una entrada contaminada. El hash de params está contaminado por definición, y la mayoría de las interacciones de sus usuarios se basan en datos contaminados. Por supuesto, puede desinfectar la entrada o usar las características del marco para evitar vulnerabilidades de asignación masiva , en la mayoría de los casos, su aplicación todavía necesitará interactuar con los datos proporcionados por el usuario para que sea realmente útil.

Compensaciones de seguridad y otras consideraciones

Puede o no puede ser posible ejecutar una aplicación Rails de manera útil cuando $SAFE = 4 . Francamente, nunca he visto a nadie hacerlo con el código de producción “en la naturaleza”. Incluso si puede, es probable que tenga que saltar a través de tantos problemas para descontar los datos proporcionados por el usuario, crear una instancia de los objetos ActiveRecord y realizar escrituras del sistema de archivos (por ejemplo, registro o carga de archivos), por lo que puede no valer la pena las concesiones de seguridad.

Puede obtener un mejor servicio utilizando un nivel de $ SAFE más bajo y confiando en otras mejores prácticas de seguridad para lograr sus objectives. Realmente solo depende de lo que estás tratando de lograr. Al igual que con todos los controles de seguridad, su kilometraje definitivamente variará.

Cuando todo Rails tiene $ SAFE establecido en 4, nada puede pasarte. Dicho esto, su aplicación está dañada para ofrecer vistas estáticas solamente. Al menos esa es mi experiencia de hace un tiempo.