sábado, 13 de octubre de 2012

Vulnerabilidad en la creación de archivos en Ruby


Se ha detectado un problema de seguridad en Ruby que podría permitir a un atacante hacer que el programa cree inadvertidamente archivos no deseados en el sistema en el que funcione el código. Se trata de un típico caso de intrusión de carácter nulo en el nombre de archivo.

Ruby es un lenguaje de programación interpretado, orientado a objetos y presentado públicamente en 1995 por "Matz", su creador. Es una mezcla sintáctica inspirada en Python y Perl, y está publicado bajo una licencia de software compatible con la GPL, pero propia, llamada "Licencia Ruby".

En los lenguajes de programación, programas y sistemas operativos existen ciertos caracteres especiales, como NUL, SOH, STX, etc, que los programadores pueden usar a bajo nivel. Cada uno tiene un "significado". Por ejemplo, NUL, en la "mayoría" de lenguajes de programación y sistemas operativos, significa un final de cadena (000 en octal, 0x0 en hexadecimal o 0 en decimal, en resumen, el cero).

La vulnerabilidad, detectada por Peter Bex y con CVE-2012-4522 reside en los métodos de la clase IO. Para abrir un archivo, al método open (IO#open), se le deben proporcionar varios parámetros, entre ellos el nombre del archivo a abrir, este método a su vez lo proporciona a capas inferiores del sistema operativo. En una situación normal se le proveerá de un nombre estándar como 'file.txt', pero un atacante podría proporcionar un nombre especialmente manipulado y que contuviera el caracter NUL, por ejemplo 'file\0.txt' (\0 es la representación de NUL).

En este último caso, el método IO#open los aceptaría como válido y se lo proporcionaría a una capa inferior del sistema operativo, crearía el archivo llamado 'file', ya que el \0 para el sistema operativo representa el fin de cadena y lo toma como tal.

La publicación oficial de la vulnerabilidad de Ruby menciona el método open, aunque más métodos de la misma clase o de otras relacionadas pueden estar afectados.

Los intérpretes de Ruby afectados son los anteriores a la versión 1.9.3 (estables) y de la 2.0.0 en desarrollo.

El fallo ya está corregido y se puede actualizar a la última versión desde: http://www.ruby-lang.org/en/downloads/

Más información:

Ruby file creation due in insertion of illegal NUL character - SECLISTS

Unintentional file creation caused by inserting a illegal NUL character - - - Ruby


Antonio Sánchez



No hay comentarios:

Publicar un comentario en la entrada