Skip to main content

Cómo corregir problemas de seguridad en Java mientras programas en IntelliJ IDEA

Escrito por
Blog Design IntelliJ IDEA

8 de abril de 2021

0 minutos de lectura

Hoy 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:

Secure Coding with IntelliJ

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.

Marketplace de plugins de IntelliJ IDEA que muestra los resultados de búsqueda de Snyk Vulnerability Scanner con un botón para instalar

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.

IntelliJ IDEA y el panel de Snyk resaltan una vulnerabilidad de denegación de servicio en snakeYAML y su solución en la versión 1.26.

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.

Panel de seguridad de código de IntelliJ que destaca una vulnerabilidad de recorrido de rutas en UploadController.java, en la línea 50, y muestra el flujo de datos hacia Files.write.

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.

Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
String target = new File(UPLOADED_FOLDER).getCanonicalPath();
if (path.toFile().getCanonicalPath().startsWith(target)) {
   Files.write(path, bytes);
}

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.

Interfaz de Snyk que destaca una vulnerabilidad de inyección SQL y muestra un flujo de datos de cinco pasos a través del código del controlador y el repositorio de Java.

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.

String query = "SELECT * FROM message WHERE text LIKE ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, text);
ResultSet result = statement.executeQuery();

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.

El plugin de Snyk para IntelliJ muestra problemas de calidad del código de gravedad media en MessageRepo.java, incluidas advertencias por falta de cierre en consultas y sentencias de bases de datos.

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.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA en 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y mantiene en verde la compilación y las pruebas.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.