/
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