OWASP WebGoat:LAB Role Based Access Control

From aldeid
Jump to navigation Jump to search

LAB Role Based Access Control

Stage 1: Bypass Business Layer Access Control

L'objectif de cet exercice est de vous montrer comment bénéficier de droits plus élévés par rapport à ceux initialement prévus pour un profil donné

Pour ce faire, connectons-nous avec un profil "admin" (compte de John Wayne par exemple, mot de passe "john"). Interceptons le paramètre utilisé afin de supprimer un utilisateur à l'aide de WebScarab.

Sélectionner par exemple "Larry Stooge" dans la liste des utilisateurs puis cliquez sur le bouton "DeleteProfile", après avoir coché la case "Intercept requests" dans WebScarab. Nous constatons que le paramètre est "DeleteProfile" :

Se déconnecter (bouton "Logout") puis se reconnecter avec le profil "Tom Cat" (mot de passe "tom"). Comme nous pouvons le constater, l'application ne prévoit pas pour ce profil le bouton "DeleteProfile" comme nous l'avions avec le profil "admin".

Néanmoins, il est possible de contourner cette limitation par escalade de privilèges, en utilisant WebScarab. Pour ce faire, sélectionnons "TomCat (employee)" dans la liste des utilisateurs, puis cliquons sur "ViewProfile", fonction permettant de consulter le profil.

WebScarab intercepte l'appel, dans lequel nous allons modifier le paramètre "Action", en modifiant "ViewProfile" en "DeleteProfile" :

La leçon est terminée :

Stage 2: Add Business Layer Access Control

L'objectif de cet exercice est de modifier le code existant afin de mettre en place un "patch de sécurité" qui corrige la faille de vulnérabilité étudié au stage 1.

Note
Cet exercice ne peut être réalisé qu'avec la version "Developer" de WebGoat.
# cd ~/WebGoat-5.2/tomcat/webapps/WebGoat/JavaSource/org/owasp/webgoat/lessons/RoleBasedAccessControl/
# vim  RoleBasedAccessControl.java

Puis repérer la section "CODE HERE". Y insérer le code suivant :

//***************CODE HERE*************************
if(!isAuthorized(s, userId, requestedActionName))
{
   throw new UnauthorizedException();
}
//*************************************************

Enregistrer puis retester les droits de suppression.

Stage 3: Bypass Data Layer Access Control

L'objectif de cet exercice est de voir le profil d'une personne sans y être autorisé.

Pour ce faire, il suffit de récupérer le numéro d'identifiant d'un adminitrateur (John Wayne, employee_id=111) puis de se connecter avec un profil non autorisé à consulter le compte d'un administrateur (par exemple Bruce McGuirre, mot de passe "bruce", profil "employee") :

Sélectionner ensuite sur le profil "Bruce Mc Guirre (employee)" dans la liste puis cliquer sur "ViewProfile" après avoir coché la case "Intercept requests" dans WebScarab

Vous accédez alors au profil de l'administrateur, sans que l'application ne vous y autorise :

Stage 4: Add Data Layer Access Control

Note
Cette étape ne peut être réalisée qu'avec la version "Developer"

L'objectif de cet exercice est de mettre en place un patch de sécurité afin d'empêcher l'opération réalisée au stage précédent.

# ~/WebGoat-5.2/tomcat/webapps/WebGoat/JavaSource/org/owasp/webgoat/lessons/RoleBasedAccessControl/RoleBasedAccessControl.java
# vim RoleBasedAccessControl.java

Repérer la section "CODE HERE" puis y insérer le code suivant :

//***************CODE HERE*************************
if(!isAuthorized(s, userId, requestedActionName))
{
  throw new UnauthorizedException();
}
if(!action.isAuthorizedForEmployee(s, userId, employeeId))
{
  throw new UnauthorizedException();
}						
//*************************************************

Enregistrer le fichier puis répéter l'opération précédente afin de tester que le patch est effectif.