Las 10 principales vulnerabilidades de seguridad de Java divulgadas [2019 - Lista]
27 de mayo de 2019
0 minutos de lecturaNuestros amigos de OverOps publican un blog anual donde clasifican la popularidad de las bibliotecas de Java según sus menciones en GitHub. Por eso, en esta publicación veremos las vulnerabilidades encontradas en las diez principales bibliotecas de Java seleccionadas por OverOps y analizaremos tres de ellas en mayor profundidad. Primero, estas son las diez selecciones principales de OverOps, ordenadas por popularidad:
Jackson
Hadoop
org.junit
org.junit.runner
org.springframework
Jetty
com.amazonaws.services
org.apache.http.client
org.apache.shiro
org.apache.commons.lang3
Según Snyk Vulnerability Database, a lo largo de su existencia se han divulgado 162 vulnerabilidades en total en estas diez bibliotecas. Analizaremos con más detalle las bibliotecas Jackson, Spring Framework y Jetty para ver cómo se distribuyen sus vulnerabilidades entre las versiones; también veremos la gravedad y los tipos de vulnerabilidades de cada biblioteca. Estos tres ejemplos son especialmente interesantes, ya que acumulan las divulgaciones de seguridad más importantes y son bibliotecas clave muy conocidas que muchas aplicaciones usan en producción.
Si Snyk monitorea tus proyectos de Java, ya habrás recibido notificaciones sobre las vulnerabilidades detectadas en tus análisis de Snyk. Si no es así, puedes hacer una prueba gratis para saber si tu aplicación está afectada por alguna de las vulnerabilidades mencionadas en esta publicación: analiza el repositorio de código de tu aplicación con Snyk.
Vulnerabilidades de Jackson
La lista de las principales bibliotecas de 2018 cambió un poco con respecto al año anterior: esta vez Jackson llegó a la cima. Jackson es un paquete de procesamiento de datos muy común que suele usarse para analizar JSON en aplicaciones Java.
A lo largo de la vida útil de la biblioteca, se han registrado 21 vulnerabilidades en total, la mayoría de ellas relacionadas con la deserialización de datos no confiables.
Tipo de vulnerabilidad | Cantidad de vulnerabilidades |
|---|---|
Deserialización de datos no confiables | 16 |
Denegación de servicio | 2 |
Validación de entrada incorrecta | 1 |
Falsificación de solicitudes del lado del servidor | 1 |
Entidad externa XML | 1 |
La deserialización es el proceso mediante el cual se reciben archivos como JSON o XML y luego se convierten en un paquete que la aplicación que los aloja puede aceptar. La vulnerabilidad de deserialización de datos no confiables (CWE-502) ocurre cuando una aplicación deserializa datos que no provienen de una fuente confiable sin verificar suficientemente que sean válidos. Esto permite que el atacante controle el estado o el flujo de ejecución.
Los problemas de deserialización en Java se conocen desde hace años. Sin embargo, el interés por este problema aumentó considerablemente en 2015, cuando se encontraron clases que podían aprovecharse para ejecutar código de forma remota en una biblioteca popular (Apache Commons Collection). Estas clases se usaron en vulnerabilidades de día cero que afectaron a IBM WebSphere, Oracle WebLogic y muchos otros productos.
La deserialización es un blanco fácil: cualquier aplicación puede sufrir una intrusión si tiene una clase vulnerable en su ruta y deserializa datos no confiables. El atacante solo tiene que enviar la carga útil al deserializador para que se ejecute el comando.
Prácticamente todas las vulnerabilidades relacionadas se clasifican como de gravedad alta, porque en la mayoría de los casos solo se necesita deserializar datos no confiables. Hasta la fecha, estas se encuentran entre las vulnerabilidades más graves de la escala CVSS.

¿Tu aplicación está afectada?
La versión actual de Jackson, la 2.9.9, no contiene ninguna vulnerabilidad conocida. Esto es una gran señal de que se trata de una biblioteca popular y bien mantenida: las vulnerabilidades que se reportan reciben la atención necesaria y se corrigen rápidamente. Para saber si tus aplicaciones Java están afectadas, analízalas ahora gratis con Snyk. También recibirás recomendaciones de corrección sobre la versión más cercana que no tenga vulnerabilidades y a la que deberías actualizar.
Vulnerabilidades de Spring Framework
Spring Framework es, sin duda, el framework web más popular en las aplicaciones Java actuales y lo usan millones de desarrolladores. No es solo una biblioteca, sino todo un ecosistema que incluye varios componentes. Si tenemos en cuenta el amplio uso de este ecosistema, ¡las cifras de vulnerabilidades no parecen tan altas! A lo largo de las décadas desde la creación de Spring Framework, se han encontrado solo 96 vulnerabilidades. El siguiente gráfico muestra cómo se distribuyeron las vulnerabilidades identificadas entre las distintas versiones del framework:

Como te imaginarás, encontrar vulnerabilidades lleva tiempo. Por eso, muchas permanecieron en la biblioteca durante varias versiones antes de que se implementaran las correcciones. Además, se contabilizaron una vez por cada versión en la que se detectaron; por eso las cifras anteriores no suman 96. Esta también es la razón por la que la cantidad de vulnerabilidades disminuye en las versiones más recientes: es probable que existan vulnerabilidades que aún no se han encontrado.
La mayoría de las vulnerabilidades se califican como de gravedad alta o media, algo bastante común en una biblioteca o framework que ofrece una amplia variedad de funciones para las aplicaciones, entre ellas compatibilidad con endpoints, transporte y seguridad.

Ahora veamos estas vulnerabilidades por tipo. A continuación, enumeramos todos los tipos de vulnerabilidad que se han registrado cinco o más veces en la historia de Spring Framework. Como Spring Framework es tan amplio, vemos una variedad considerable de tipos de vulnerabilidad. También vale la pena mencionar la vulnerabilidad de ejecución arbitraria de código, que a veces se origina al explotar Spring Expression Language (SPEL), como en esta vulnerabilidad de ejecución arbitraria de código, también conocida como «Spring Break».
Tipo de vulnerabilidad | Cantidad de vulnerabilidades |
|---|---|
Ejecución arbitraria de código | 12 |
Entidad externa XML | 11 |
Elusión de restricciones de acceso | 9 |
Denegación de servicio | 9 |
Recorrido de directorios | 7 |
Falsificación de solicitudes entre sitios | 6 |
Elusión de autenticación | 6 |
Secuencias de comandos entre sitios | 5 |
¿Tu aplicación está afectada?
Como buena práctica, siempre deberías actualizar tu aplicación a las versiones más recientes disponibles. Sin embargo, por diversos motivos, esto no siempre se hace con regularidad. A menudo, las bibliotecas o los frameworks se actualizan cuando es necesario (con frecuencia), a veces para corregir una vulnerabilidad de seguridad, y puede ser difícil seguir el ritmo. Para saber si tus aplicaciones Spring están afectadas, analízalas ahora gratis con Snyk. También recibirás recomendaciones de corrección sobre la versión más cercana que no tenga vulnerabilidades y a la que deberías actualizar.
Vulnerabilidades de Jetty
El proyecto Eclipse Jetty a veces se usa como biblioteca, pero probablemente se utilice con más frecuencia como servidor de aplicaciones ligero (a menudo mediante Spring Boot, el framework relacionado con Spring Framework que acabamos de mencionar). Jetty también se ha desarrollado durante varias décadas y cuenta con una gran comunidad de usuarios y colaboradores. A lo largo de los años, el proyecto Jetty ha acumulado 38 vulnerabilidades, y más de la mitad son vulnerabilidades relacionadas con problemas criptográficos (13) o exposición de información (6). Una vez más, por la propia naturaleza de los componentes de seguridad y lo que buscan ofrecer a sus usuarios, los errores también pueden provocar problemas de seguridad. A continuación, se muestra la lista completa de los tipos de vulnerabilidad que se han detectado más de una vez en el proyecto Jetty.
Tipo de vulnerabilidad | Cantidad de vulnerabilidades |
|---|---|
Problemas criptográficos | 13 |
Exposición de información | 6 |
Secuencias de comandos entre sitios | 3 |
Ejecución arbitraria de comandos | 3 |
Elusión de autorización | 2 |
Falsificación de solicitudes entre sitios | 2 |
Secuestro de sesión | 2 |
¿Tu aplicación está afectada?
La mejor manera de saber si te afectan estas vulnerabilidades o cualquier vulnerabilidad presente en las dependencias transitivas que usan tus dependencias es analizarlas ahora gratis con Snyk. También recibirás recomendaciones de corrección sobre la versión más cercana que no tenga vulnerabilidades y a la que deberías actualizar.
En Snyk, nos esforzamos por facilitar el análisis de proyectos a los desarrolladores, con integraciones para tus IDE favoritos, repositorios de código como GitHub, GitLab y BitBucket, servidores de CI y mucho más. Puedes hacer análisis gratis y esperamos que aproveches las funciones de corrección automática para actualizar a una versión más segura. ¡Mantente protegido!
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.
