Cómo corregir problemas de seguridad en Java mientras programas en IntelliJ IDEA
8 de abril de 2021
0 minutos de lecturaHoy en día, los desarrolladores son responsables de mucho más que crear la aplicación. Además de trabajar en nuevas funciones, deben enfocarse en la facilidad de mantenimiento, la escalabilidad, la confiabilidad y la seguridad de sus aplicaciones. Muchos no saben por dónde empezar con la seguridad. Además, la mayoría de las empresas aún trabaja con un equipo de seguridad dedicado, en lugar de incorporar conocimientos sobre seguridad en el equipo de desarrollo.
Muchos desarrolladores prácticamente viven en su entorno de desarrollo integrado (IDE). Un buen IDE es como una navaja suiza: es la herramienta a la que recurres para hacer casi todo. Tener todo lo que necesito para crear, ejecutar, probar, depurar y proteger mi aplicación hace que un buen IDE sea invaluable para muchos desarrolladores.
Según el informe sobre el ecosistema Java de Snyk del año pasado, IntelliJ IDEA es el IDE más popular y utilizado en el ámbito de la seguridad de Java. Recientemente, Snyk lanzó un nuevo complemento de análisis de vulnerabilidades para IntelliJ IDE. Veamos cómo integrar la seguridad y el desarrollo seguro en este IDE con el nuevo complemento.
Pero primero, aquí tienes un resumen rápido de lo que veremos en esta publicación:

Te recomiendo que uses el modo de pantalla completa para ver los ejemplos de código.
Snyk Vulnerability Scanner para IntelliJ IDEA
¿No existía ya un complemento de Snyk IDE para IntelliJ IDEA?
Sí, existía. Pero el complemento anterior se enfocaba por completo en el análisis de Snyk Open Source y ayudaba a encontrar y corregir vulnerabilidades en dependencias de código abierto. El nuevo complemento también integra las nuevas capacidades de Snyk Code, para ayudar a los desarrolladores en varios niveles.
Instalar el complemento Snyk IDE
La forma recomendada de instalar el complemento es desde el marketplace de IntelliJ IDEA. Si buscas “snyk” en el marketplace de complementos desde IntelliJ IDEA, lo encontrarás enseguida.

Después de instalar el complemento y reiniciar el IDE, debes autenticarlo. Para usarlo, necesitas tener al menos una cuenta gratuita de Snyk. Si ya tienes una cuenta de Snyk, solo tienes que iniciar sesión. Si aún no conoces Snyk, el proceso de incorporación te guiará para registrarte y crear una cuenta gratuita.
Integración de Snyk Code en IntelliJ IDEA
Como mencioné antes, la versión anterior del complemento de Snyk para IntelliJ IDEA solo aprovechaba las capacidades de Snyk Open Source. Te permitía analizar tus proyectos para encontrar vulnerabilidades de seguridad en tus dependencias de código abierto. Con el nuevo complemento, también puedes usar las capacidades de Snyk Code junto con el análisis de Snyk Open Source. Snyk Code es un producto de seguridad que analiza estáticamente tu código para detectar posibles construcciones vulnerables que tú o tu equipo hayan creado. Esto significa que puedes proteger toda tu aplicación con un solo complemento. Pongámoslo a prueba.
Corregir vulnerabilidades de seguridad en IntelliJ
Después de analizar mi aplicación, veo varias secciones en la pantalla. La primera corresponde al conocido análisis de Snyk Open Source. Esta sección me indica que incluyo bibliotecas, directas o transitivas, que tienen vulnerabilidades conocidas. Una de esas bibliotecas vulnerables es snakeyaml, versión 1.24. Esta versión es vulnerable a un ataque de denegación de servicio. Expliqué cómo funciona este ataque y cómo prevenirlo en la publicación Cómo prevenir vulnerabilidades al analizar YAML con snakeyaml en Java.
La solución es muy sencilla. Si actualizo al menos a la versión 1.26, la vulnerabilidad se corrige. Ten en cuenta que la versión que incluye la corrección no es necesariamente la más reciente. Es la versión más cercana que no contiene la vulnerabilidad. Después de actualizar la versión en mi archivo pom y volver a analizar la aplicación, la vulnerabilidad desaparece. Las recomendaciones prácticas para corregir vulnerabilidades que ofrece el complemento Snyk para IntelliJ IDE son una excelente guía para solucionar el problema.

Analizar el código para detectar vulnerabilidades de seguridad
La siguiente sección incluye información sobre las vulnerabilidades de código que encontró el complemento de Snyk. Las capacidades de Snyk Code señalan errores en mi código que pueden provocar vulnerabilidades de seguridad específicas.
El primer problema es un “recorrido de rutas” (Path Traversal). El complemento de Snyk para IntelliJ IDEA me muestra dónde está el problema y el flujo de datos actual. En este momento, escribo un archivo en el disco sin verificar el nombre real del archivo. Si el nombre contiene algo como “../../../textfile.txt”, mi código no guardará el archivo en el lugar correcto. Este nombre de archivo recorre la ruta hacia atrás y sale de la carpeta de destino. Esto significa que el archivo termina en algún lugar de mi sistema donde no quiero que esté. Y lo que es más importante, puede sobrescribir archivos existentes fuera de la carpeta de destino, en cualquier parte del sistema, según los privilegios del proceso.

Para evitarlo, puedo comprobar que la ruta canónica del nuevo archivo comience con la ruta de mi destino previsto, como se muestra a continuación.
Así, el recorrido de rutas ya no funcionará porque el archivo no se guardará fuera de mi carpeta de destino. Después de volver a analizar mi aplicación, veo que Snyk Code está de acuerdo.
Veamos otro ejemplo. Según la inspección del código, creé una vulnerabilidad de inyección SQL en MessageController.java, en la línea 33. Al revisar el flujo de datos, veo que la inyección SQL real está en MessageRepo.java. Es increíblemente útil que Snyk Code pueda analizar varios archivos para encontrar este problema entre archivos, ya que no muchas herramientas tienen esa capacidad. Debido a MessageController, la inyección SQL está expuesta al mundo exterior y representa una amenaza inmediata que debo corregir.

Ahora que conozco el problema, corregiré el código en MessageRepo.java. Ya no concatenaré el parámetro directamente a la cadena de consulta, sino que usaré una instrucción preparada con parámetros de consulta. Si implemento la instrucción preparada como se muestra a continuación y vuelvo a analizar mi aplicación, el complemento dejará de reportar la vulnerabilidad.
Si quieres saber más sobre cómo prevenir las inyecciones SQL, consulta también nuestra práctica guía rápida para prevenir inyecciones SQL.
Calidad del código
Además de analizar las dependencias de código abierto y tu propio código para detectar vulnerabilidades de seguridad, el complemento de Snyk para IntelliJ IDEA también puede ayudarte a mejorar la calidad de tu código.
En el siguiente ejemplo, el complemento de Snyk señala que no estoy cerrando ciertas conexiones. Esto puede provocar fugas de recursos, por lo que deben cerrarse en un bloque finally.

Integra la seguridad en IntelliJ IDEA hoy mismo
El Snyk Vulnerability Scanner para IntelliJ IDEA es básicamente una solución integral para los desarrolladores de Java. Combinar la potencia del análisis de Snyk Open Source con el de Snyk Code te brinda una nueva y poderosa herramienta para evitar errores de seguridad en tu aplicación. La función de calidad del código también es un excelente complemento para el equipo. Ten en cuenta que puedes configurar el complemento según tus preferencias; por ejemplo, puedes desactivar la función de calidad del código.
Aun así, los desarrolladores de Java como tú y yo debemos asumir la responsabilidad de las aplicaciones que creamos. Esto incluye prevenir problemas de seguridad. Con el complemento de Snyk para IntelliJ IDEA, puedes hacerlo cómodamente desde tu IDE favorito. ¿Por qué no lo pruebas?
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.



