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