jueves, 5 de octubre de 2017

Try Catch Stack Overflow

Interesante estudio de varios investigadores del Virginia Tech, en el que ponen en entredicho la calidad del código que podemos encontrar en sitios como StackOverflow y similares, desde el punto de vista de la seguridad.




Todo aquel que ha tenido que tirar alguna que otra línea de código (programar), se habrá encontrado en una situación en la que necesitaba la ayuda de alguien para soslayar un problema determinado. “¿Cómo implemento una conexión SSL?”, “¿Cómo hago para comprobar la validez de un certificado x.509?”, “¿Por qué no estudié gastronomía en vez de informática?”.

A menudo, un golpe de buscador nos arroja un listado de recursos sobre los que indagar en la implementación que “encaje” en nuestro código y lo haga funcionar. Sobre esta suerte de mecanismo de consultoría exprés se ha abusado tanto que incluso algunos gestores han llegado a creer que programar se reduce a buscar un trozo de código y pegarlo en un editor de texto (naturalmente, el Notepad).

Esa creencia, tanto por parte de la dilatada imaginación de algunos gestores como de la poca pericia de algunos junta-palabras-reservadas, hace que se construya una falsa concepción de lo que significa el sacro arte del diseño y programación de computadores digitales basados en la arquitectura Von Newmann (o en la Harvard). Es tan de chiste la cosa, que incluso existen librerías que atrapan una excepción y te buscan la traza en StackOverflow para que directamente copies la mejor respuesta. Verlo para creerlo.

Imagen de: https://github.com/gautamkrishnar/tcso



¿Cuál es el problema?

Basado en el estudio sobre las preguntas y respuestas dadas en torno al lenguaje y plataforma Java, los investigadores han encontrado multitud de errores en respuestas populares que contienen vulnerabilidades de seguridad. El problema, señalan, no se encuentra en las librerías usadas –que no deja de ser reutilización legítima de código-, sino en que estas no se usan de forma segura, dando lugar a la exposición de riesgo por falta de pericia en su uso.

Hay ejemplos de todo tipo, como sugerir deshabilitar la protección contra ataques CSRF del framework Spring para resolver un problema en la autenticación o auténticas chapuzas glorificadas acerca de la implementación correcta de criptografía en la aplicación, como la generación de claves sin la entropía adecuada o uso de algoritmos ya desfasados y retirados desde hace mucho, mucho tiempo.

No nos confundamos. StackOverflow es un recurso maravilloso para un programador; incluso debería tener su propia festividad en el calendario. En él puedes encontrar librerías, consejos, experiencias y algoritmos que jamás hubieses encontrado de no ser porque un colega ya lo ha hecho antes que tú. Lo que realmente sugieren en este estudio es que todo, absolutamente todo, ha de ser pasado por el filtro del sentido común y la capacidad crítica de cada uno. Herramientas que parecen inmunes ante el virus de la prisitis urgentia.

Cuando ves una respuesta que tiene más de 10 años en la que se hace uso del hash MD5 para almacenar hashes de contraseñas, es evidente que no es la respuesta adecuada. Hemos de ser precavidos, levantar el pie del acelerador y observar con detenimiento tareas que son críticas y podrían devenir en quebraderos de cabeza en un futuro. No en vano, existe código escrito que no ha pasado a revisión en décadas, con vulnerabilidades que estaban allí y de las que nadie se percató.


¿Os acordáis del infame ‘gotofail’?



David García
dgarcia@hispasec.com
@dgn1729

Más información:

Secure Coding Practices in Java: Challenges and Vulnerabilities: