Seguridad de aplicaciones Java: top 10 vulnerabilidades — parte 2

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Seguridad de aplicaciones Java: top 10 vulnerabilidades — parte 2

En la primera parte analizamos las primeras cinco vulnerabilidades críticas de las aplicaciones Java. Hoy continuamos el aprendizaje y examinamos las cinco amenazas restantes que todo desarrollador debe conocer. Java para principiantes y programadores experimentados: esta información les ayudará a escribir código más seguro. En el mundo de la programación, la seguridad no es una opción, sino una necesidad.

6. Entidades XML externas (XXE)

Los ataques XXE ocurren cuando la aplicación procesa documentos XML que contienen referencias a entidades externas. Un atacante puede leer archivos locales, ejecutar un ataque SSRF o provocar una denegación de servicio.

Código vulnerable

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));

Protección

  • Deshabilite las entidades externas y DTD
  • Utilice analizadores seguros
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

7. Deserialización insegura

La deserialización de datos no confiables puede llevar a la ejecución de código arbitrario. Esta es una de las vulnerabilidades más peligrosas en Java, ya que a menudo permite comprometer completamente el servidor.

Ejemplo de ataque

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));
Object obj = ois.readObject(); // ¡peligroso!

Métodos de protección

  • No deserialice datos de fuentes no confiables
  • Utilice listas blancas de clases
  • Aplique formatos alternativos (JSON, Protocol Buffers)

8. Inyección SQL

Aunque es un clásico de la programación, las inyecciones SQL todavía se encuentran en aplicaciones Java. Utilice siempre consultas parametrizadas.

Incorrecto (vulnerable)

String query = "SELECT * FROM users WHERE name = '" + userName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Correcto (seguro)

String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, userName);
ResultSet rs = pstmt.executeQuery();

Para Java para principiantes, esta regla debe convertirse en un axioma: nunca concatenen cadenas para consultas SQL.

9. Deficiencias en la autenticación y gestión de sesiones

La autenticación débil, las sesiones vulnerables y la gestión incorrecta de contraseñas son un problema común en aplicaciones web Java.

Recomendaciones

  • Utilice algoritmos modernos de hash de contraseñas (bcrypt, Argon2)
  • Configure un tiempo de vida de sesión correcto
  • Aplique cookies seguras (HttpOnly, Secure, SameSite)
  • Implemente autenticación multifactor

10. Uso de componentes con vulnerabilidades conocidas

El ecosistema Java es rico en bibliotecas, pero muchos proyectos utilizan versiones obsoletas con CVE públicas. Este es uno de los problemas de seguridad más comunes.

Cómo protegerse

  • Actualice las dependencias regularmente
  • Utilice herramientas de análisis (OWASP Dependency-Check, Snyk)
  • Suscríbase a notificaciones de seguridad para las bibliotecas utilizadas
  • Automatice

Blogs

Book Recommendations