/
Broken Access Control

Broken Access Control

Debido a una incorrecta validación de la autorización, el atacante puede acceder a información a la cual no debería. Por ejemplo, una validación de autorización en cliente o mediante datos provenientes de este.

Riesgo del ataque

  • Robo de información no autorizada.

  • Posibilidad de modificación o borrado de datos no autorizados.

  • Ejecución de acciones no autorizadas.

  • Posibilidad de suplantación del rol administrador.

Código vulnerable 1:

[...]     public String adminShowUsers() {         Map results = new HashMap();         boolean isAdmin = false;           for(Cookie c: getServletRequest().getCookies()) {             if(c.getName().equals("admin") && c.getValue().equals("1")) {                 isAdmin = true;                 break;             }         }           if(isAdmin) {             List<Map<String, String>> userList = new ArrayList<Map<String,String>>();               for(User u: userService.findAllUsers()) {                 Map<String, String> m = new HashMap<String, String>();                   m.put("id", Integer.toString(u.getId()));                 m.put("login", u.getLogin());                 m.put("email", u.getEmail());                 m.put("role", u.getRole());                   userList.add(m);             }               results.put("count", userList.size());             results.put("users", userList);         }           return renderJSON(results);     } [...]

Solución:

Se debe garantizar que la validación de la autenticación se realiza del lado del servidor.

[...]     public String adminShowUsers() {         Map results = new HashMap();            if(sessionGetUser().isAdmin()) {             List<Map<String, String>> userList = new ArrayList<Map<String,String>>();               for(User u: userService.findAllUsers()) {                 Map<String, String> m = new HashMap<String, String>();                   m.put("id", Integer.toString(u.getId()));                 m.put("login", u.getLogin());                 m.put("email", u.getEmail());                 m.put("role", u.getRole());                   userList.add(m);             }               results.put("count", userList.size());             results.put("users", userList);         }           return renderJSON(results);     } [...]

Referencias:

https://owasp.org/www-community/Broken_Access_Control

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

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



Related content