Incluso el software que se ha construido con procedimientos de desarrollo seguros puede seguir siendo vulnerable a los ataques, debido a fallos en los lenguajes de programación interpretados de los que dependen.
El investigador de IOActive Fernando Arnaboldi reveló en la conferencia Black Hat Europe de la semana pasada que graves fallos en los intérpretes de cinco lenguajes de programación populares ponen en peligro las aplicaciones analizadas por ellos.
Arnaboldi descubrió, por ejemplo, que Python tiene «métodos no documentados y variables de entorno locales que pueden utilizarse para la ejecución de comandos del sistema operativo».
Por su parte, NodeJS, un intérprete de JavaScript, podría filtrar el contenido dea los archivos a través de los mensajes de error que emite, mientras que JRuby, la implementación en Java de Ruby, «carga y ejecuta código remoto en una función no diseñada para la ejecución remota de código».
En cuanto a Perl, Arnaboldi cita la capacidad de su función typemaps, incluida en su conjunto de módulos por defecto, para ejecutar código. Mientras que en PHP, a ciertas funciones nativas se les puede pasar el nombre de una constante para realizar una ejecución remota de comandos.
Cree que estas vulnerabilidades pueden haber sido causadas por los intentos de simplificar el desarrollo de software.
«Las vulnerabilidades afectan en última instancia a las aplicaciones normales analizadas por los intérpretes afectados; sin embargo, las correcciones deben aplicarse a los intérpretes», señaló.
«En cuanto a las vulnerabilidades de los lenguajes de programación interpretados, los desarrolladores de software pueden incluir, sin saberlo, código en una aplicación que puede ser utilizado de una manera que el diseñador no previó. Algunos de estos comportamientos suponen un riesgo para la seguridad de las aplicaciones que fueron desarrolladas de forma segura según las directrices», escribió Arnaboldi.
El investigador descubrió los fallos utilizando el XDiFF, un «fuzzer diferencial» que creó y dirigió a varios intérpretes de diferentes lenguajes.
En el caso de JavaScript, los objetivos incluían el motor JavaScript v8 de Google, y el equivalente ChakraCore de Microsoft, SpiderMonkey de Mozilla, y NodeJS, y Node-ChakraCore.
En PHP, hizo fuzzing en PHP y HHVM, mientras que en Ruby los objetivos fueron Ruby y JRuby. También hizo fuzzing en Perl, ActivePerl, CPython, PyPy y Jython.
Como ha señalado anteriormente, la investigación muestra que las aplicaciones pueden sufrir problemas de seguridad al utilizar ciertas características de los lenguajes de programación.