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:

https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

https://portswigger.net/web-security/sql-injection