Sensitive Data Exposure
El uso de información en aplicaciones web y API deben proteger adecuadamente los datos confidenciales, como los financieros, de salud y de información personal. Los atacantes pueden robar o modificar esos datos poco protegidos para cometer fraudes con tarjetas de crédito, robos de identidad u otros delitos. Los datos sensibles pueden verse comprometidos sin protección adicional, como el cifrado en reposo o en tránsito, y requieren precauciones especiales cuando se intercambian con el navegador.
Riesgo de la vulnerabilidad
Robo de información sensible: Números de tarjetas de crédito, cuentas bancarias, datos personales de identidad, sanitarios, direcciones, etc.
Robo de usuarios para acceder a sistemas o Productos: Nombres de usuario, contraseñas.
Pérdidas financieras.
Suplantación de identidades.
Disminución de confianza en la organización.
Código vulnerable 1:
[...]
public void save(User user) {
logger.debug("Saving user with login: " + user.getLogin() + " id: " + user.getId());
if(user.getPassword() != null)
user.setPassword(hashEncodePassword(user.getPassword()));
if(user.getId() != null) {
entityManager.merge(user);
}
else {
entityManager.persist(user);
}
}
[...] |
Solución:
Se recomienda siempre garantizar que la información sensible se maneja de manera adecuada, tal y como fija las normas de la del marco de Seguridad y la normativa vigente.
En este caso, no se guardan las contraseñas en la base de datos, sino su resumen criptográfico (hash) junto con un Salt para añadir mayor aleatoriedad.
[...]
public void save(User user) {
logger.debug("Saving user with login: " + user.getLogin() + " id: " + user.getId());
if(user.getPassword() != null)
user.setPassword(hashEncodePassword(user.getPassword() + user.getSalt()));
if(user.getId() != null) {
entityManager.merge(user);
}
else {
entityManager.persist(user);
}
}
[...] |
Referencias:
SQL Injection Prevention - OWASP Cheat Sheet Series
What is SQL Injection? Tutorial & Examples | Web Security Academy