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