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