Piratage de compte ?! J'ai testé IDOR [HackTheBox Armaxis writeup]

Piratage de compte ?! J'ai testé IDOR [HackTheBox Armaxis writeup]

Les applications web sont souvent considérées comme « sécurisées » du simple fait de la mise en œuvre de mécanismes tels que l'authentification et les jetons.
Cependant, dans les faits, détermine quelles données utilisateur sont accessibles , peut mener directement à un piratage de compte.

Plus précisément, l'IDOR (Insecure Direct Object Reference) est une vulnérabilité qui se produit lorsque des données saisies par l'utilisateur sont utilisées directement pour référencer un objet interne, même en présence d'une authentification et de jetons.
De ce fait, il peut être possible de manipuler les comptes d'autres personnes ou de s'emparer de leurs privilèges.

Dans cet article, nous utiliserons le défi CTF Armaxis comme sujet pour recréer le malware IDOR qui se cachait dans la fonction de réinitialisation du mot de passe et examiner comment le détournement de compte peut être réalisé.

table des matières

À propos de HackTheBox

Cette fois, nous utilisons en fait HackTheBox (HTB) pour vérifier les vulnérabilités.

HackTheBox est une plateforme CTF pratique où les participants peuvent s'entraîner dans divers domaines de la sécurité, notamment les applications web, les serveurs et les réseaux.
Son principal atout est de permettre aux participants d'apprendre en accédant aux machines et applications qui seront attaquées et en se livrant à des expériences concrètes.

Armaxis que nous allons examiner cette fois-ci des catégories de défis qui étaient auparavant proposées sur HackTheBox, et il s'agit actuellement d'un abonnement VIP ou supérieur (notez que seuls les défis actifs sont disponibles pour les utilisateurs disposant de l'abonnement gratuit).

Il existe également des machines et des défis dans diverses catégories, notamment Web, Reversing, Pwn et Forensics, afin que vous puissiez les aborder à un niveau qui vous convient.

Si vous souhaitez sérieusement perfectionner vos compétences avec HackTheBox, assurez-vous au plan VIP et de profiter pleinement des machines et des défis passés.

👉 Visitez le site officiel de HackTheBox ici

La sécurité ne peut être maîtrisée qu'en pratiquant du point de vue d'un attaquant

La simple lecture de la référence ne suffit pas. attaque concrète permet de comprendre véritablement la vulnérabilité d'un élément et comment le protéger.

HackTheBox propose un environnement de formation où vous pouvez expérimenter en toute sécurité les vulnérabilités d'une machine virtuelle.
Même les débutants peuvent apprendre à penser comme un attaquant en progressant étape par étape.

  • Exercices de machines virtuelles basés sur des scénarios d'attaque réalistes
  • Traite un large éventail de vulnérabilités, notamment RCE, SQLi et XSS
  • Le plan VIP vous donne accès à des machines plus anciennes

*HackTheBox Académie (matériel pédagogique) et Laboratoires (environnement de pratique), chacune avec des structures de facturation différentes.
Pour ceux qui souhaitent se concentrer sur la pratique, nous recommandons vivement l'offre Laboratoires VIP ou supérieure.

👉 Pour des informations détaillées sur la façon de s'inscrire à HackTheBox et les différences entre les plans, veuillez cliquer ici.

Résumé du défi : Armaxis

est une tâche CTF (Capture The Flag) basée sur une application web et utilisant
le système de contrôle d'armes fictif « Armaxis ». Les joueurs accèdent au système en tant qu'utilisateurs ordinaires, en étudiant ses fonctions et en exploitant ses vulnérabilités.

Outre les fonctions d'inscription et de connexion, Armaxis propose une fonction de réinitialisation de mot de passe une fonction de distribution d'armes réservée aux administrateurs .
Lors de la distribution d'armes, les utilisateurs peuvent saisir du texte en Markdown dans un champ mémo ; le contenu est traité côté serveur avant d'être enregistré et affiché.

À première vue, il s'agit d'une application web classique, mais le contrôle d'autorisation de l'utilisateur lors de la réinitialisation du mot de passe est insuffisant une vulnérabilité IDOR (Insecure Direct Object Reference) dans certaines conditions .
En exploitant cette faille, il devient possible d'agir sur d'autres utilisateurs, y compris des comptes administrateur, ce qui est normalement impossible.

L'obtention de privilèges d'administrateur débloque de nouvelles capacités et des surfaces d'attaque supplémentaires,
permettant finalement à un joueur d'exploiter les effets en cascade de multiples failles de conception pour accéder à des informations sur le serveur.

indiquer

  • Type de défi : Application Web
  • Vulnérabilité : IDOR, LFI
  • Séquence d'attaque :
    • Analyse des fonctionnalités en tant qu'utilisateur lambda
    • Exploitation des failles dans les processus de réinitialisation des mots de passe pour obtenir des privilèges (IDOR)
    • Accédez aux fonctions d'administration et découvrez des surfaces d'attaque supplémentaires.
    • Vol d'informations internes au serveur (LFI)
  • Ce que vous pouvez apprendre
    • La différence entre authentification et autorisation
    • Comment l'IDOR est établi

Qu'est-ce que l'IDOR ?

L'authentification et l'autorisation sont souvent confondues
lorsqu'on parle de sécurité des applications web, mais il est essentiel de bien les distinguer pour comprendre l'IDOR.

L'authentification est un mécanisme permettant de vérifier « qui vous êtes », et le traitement des connexions ainsi que la validation des jetons jouent ce rôle.
En revanche, l'autorisation est un mécanisme permettant de déterminer ce que vous êtes autorisé à faire

L'IDOR (Insecure Direct Object Reference) est une vulnérabilité qui survient en l'
absence de contrôle d'autorisation Elle se produit lorsqu'une valeur spécifiée par l'utilisateur (telle qu'un identifiant, une adresse e-mail ou un nom de fichier) est utilisée pour référencer directement un objet sur le serveur, sans vérifier que cet objet appartient bien à cet utilisateur.

Il est important de que le principe IDOR reste valable même en présence d'une authentification :
être connecté ou posséder un jeton valide n'a aucun sens si les contrôles d'autorisation pour l'objet référencé n'ont pas été effectués.

Par exemple, si une application utilise l'adresse e-mail dans une requête de recherche ou de mise à jour d'informations utilisateur,
il serait possible de manipuler le compte d'une autre personne en remplaçant simplement la valeur saisie.
Il s'agit d'un exemple typique d'attaque IDOR.

Le défi CTF « Armaxis » évoqué dans cet article ne comportait pas non plus ce contrôle d'autorisation dans la fonction de réinitialisation du mot de passe, ce qui
a finalement conduit au piratage du compte.

J'ai effectivement essayé IDOR !

Avant de lancer notre attaque, vérifions d'abord l'écran.

Le premier est l'écran de connexion d'un système appelé Armaxis.
Il semble que les administrateurs et les utilisateurs ordinaires utilisent le même écran de connexion.

La seconde est une boîte aux lettres. C'est là que l'adresse électronique de l'attaquant est préparée.
Notre adresse électronique est test@email.htb, vérifions-la.

Phase de reconnaissance : Créez un compte à l’adresse test@email.htb

Commençons par créer un compte en utilisant l'adresse e-mail test@email.htb fournie.
L'inscription est simple : il suffit de saisir votre adresse e-mail et votre mot de passe, puis de cliquer sur le bouton « S'inscrire ».

Si votre inscription a réussi, le message « Inscription réussie » s’affichera.

Une fois inscrit, essayez de vous connecter.

À ce stade, le message « Aucune arme envoyée pour le moment » devrait s'afficher.
Vous obtiendrez ensuite probablement les privilèges d'administrateur et pourrez commencer à envoyer des armes à ce compte.

Phase de reconnaissance : Analyse du code source

La phase de reconnaissance se poursuit, alors jetons un œil au code source.

En cherchant un peu, j'ai trouvé une implémentation qui a attiré mon attention dans "/reset-password".

router.post("/reset-password", async (req, res) => { const { token, newPassword, email } = req.body; // Ajout du paramètre 'email' if (!token || !newPassword || !email) return res.status(400).send("Le jeton, l'adresse e-mail et le nouveau mot de passe sont requis."); try { const reset = await getPasswordReset(token); if (!reset) return res.status(400).send("Jeton invalide ou expiré."); const user = await getUserByEmail(email); if (!user) return res.status(404).send("Utilisateur introuvable."); await updateUserPassword(user.id, newPassword); await deletePasswordReset(token); res.send("Réinitialisation du mot de passe réussie."); } catch (err) { console.error("Erreur lors de la réinitialisation du mot de passe :", err); res.status(500).send("Erreur lors de la réinitialisation du mot de passe."); } });

Tout semble correct jusqu'à ce que je vérifie le jeton, mais il semble qu'aucun utilisateur ne lui soit associé. J'essaie donc de récupérer l'utilisateur par e-mail.
Essayons la méthode getUserByEmail.

fonction asynchrone getUserByEmail(email) { const query = `SELECT * FROM users WHERE email = ?`; try { const user = await get(query, [email]); return user; } catch (error) { throw error; } }

Lorsque je vérifie la requête SQL, il semble que l'utilisateur soit récupéré uniquement à partir de son adresse e-mail.

La fonction updateUserPassword est appelée avec l'identifiant utilisateur et le nouveau mot de passe obtenus à partir de l'e-mail.
Vérifions cela également.

fonction asynchrone updateUserPassword(id, nouveauMotDePasse) { const query = `UPDATE users SET password = ? WHERE id = ?`; try { await run(query, [nouveauMotDePasse, id]); } catch (error) { throw error; } }

Comme il n'existe aucun contrôle particulier sur le jeton, nous avons constaté qu'il est possible de modifier le mot de passe d'un autre utilisateur en utilisant les paramètres email et nouveauMotDePasse.

De plus, le code source contient l'adresse e-mail de l'administrateur.
Notez bien « admin@armaxis.htb », car vous en aurez besoin pour vous connecter au compte administrateur ultérieurement.

Phase de reconnaissance : vérification des demandes de changement de mot de passe réelles

Ensuite, utilisons l'écran pour confirmer la demande de changement de mot de passe.
Un bouton « Mot de passe oublié ? » est disponible sur l'écran de connexion ; appuyez dessus pour accéder à l'écran de réinitialisation du mot de passe.

essayons de mettre à jour votre mot de passe avec
l'adresse e-mail fournie « test@email.htb « test@email.htb » et cliquez sur le bouton Demander un code.

Une boîte de dialogue apparaîtra à l'écran vous demandant de saisir votre jeton et votre nouveau mot de passe.

Vous pouvez vérifier le jeton en rechargeant votre boîte mail.

Lorsque j'ai tenté de mettre à jour mon mot de passe en saisissant le jeton et le nouveau mot de passe, j'ai constaté que la requête suivante avait été envoyée.

Si vous parvenez à configurer chaque paramètre comme indiqué ci-dessous, vous devriez pouvoir modifier le mot de passe administrateur.

  • jeton : Jeton émis par  test@email.htb 
  • Courriel : adresse courriel de l’administrateur
  • nouveauMotDePasse : N'importe quel mot de passe

Maintenant que nous disposons de toutes les informations, lançons une attaque basée sur ces informations.

Phase d'attaque : Prise de contrôle du compte administrateur

Exploitons la vulnérabilité IDOR et utilisons le jeton émis par test@email.htb pour modifier le mot de passe du compte administrateur et prendre le contrôle de ce compte.

Tout d'abord, obtenez un jeton avec "test@email.htb".

Une fois cet écran atteint, vous devriez avoir reçu le jeton dans votre boîte mail.

Il est bien arrivé. (J'ai appuyé deux fois par erreur sur le bouton, il y a donc trois courriels.)

Modifions maintenant le JSON avec les informations suivantes :

  • jeton : le jeton pour test@email.htb obtenu précédemment
  • nouveauMotDePasse : N’importe quel mot de passe (test)
  • Courriel : admin@armaxis.htb (adresse courriel de l’administrateur)

Vous devriez maintenant pouvoir envoyer une demande de modification du mot de passe d'un autre compte en utilisant le jeton provenant de test@email.htb.

La réponse est 200 OK, donc je pense que tout s'est bien passé.
Vérifions cela à l'écran.

Saisissez l'adresse e-mail admin@armaxis.htb, entrez le mot de passe que vous avez défini dans nouveauMotDePasse et cliquez sur le bouton Connexion.

Nous avons piraté le compte administrateur !
Grâce à l'arme de dépêche, nous pouvons récupérer le drapeau.

Bonus : Obtenez le drapeau en utilisant LFI

Cet article étant consacré à l'IDOR, je résumerai brièvement les prochaines étapes.

Tout d'abord, un champ permettait de saisir du Markdown. Nous allons maintenant utiliser ce champ pour charger un fichier sur un serveur normalement inaccessible à LFI.

La commande « COPY flag.txt /flag.txt » nous indique que flag.txt se trouve directement sous le répertoire racine.

# Utiliser l'image de base Node.js avec Alpine Linux FROM node:alpine # Installer les dépendances requises pour MailHog et supervisord RUN apk add --no-cache \ wget \ supervisor \ apache2-utils \ curl \ build-base # Installer le binaire MailHog WORKDIR / RUN wget https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64 RUN chmod +x MailHog_linux_amd64 # Préparer le répertoire de messagerie et copier les fichiers de l'application RUN mkdir -p /email COPY email-app /email WORKDIR /email RUN npm install # Générer un mot de passe aléatoire et créer un fichier d'authentification pour MailHog RUN RANDOM_VALUE=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) \ && htpasswd -nbBC 10 test "$RANDOM_VALUE" > /mailhog-auth \ && echo $RANDOM_VALUE > /email/password.txt # Définir le répertoire de travail de l'application principale WORKDIR /app # Copier les fichiers de défi et installer les dépendances COPY challenge . RUN npm install # Copier la configuration de supervisord COPY config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf # Exposer les ports pour l'application et le client de messagerie EXPOSE 8080 EXPOSE 1337 COPY flag.txt /flag.txt # Démarrer supervisord CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

Markdown permet d'afficher des images grâce à « ![](chemin) ».
Normalement, on indiquerait ici le chemin de l'image, mais essayons d'y insérer du texte.

De plus, indiquez « file:// » au lieu de « image:// ».

![flag](file:///flag.txt)

Une fois que vous avez créé Dispatch Weapon, connectez-vous avec test@email.htb.

Bien sûr, l'image ne s'affichera pas, mais vous verrez du texte encodé en Base64 dans Elements.

<img src="data:image/*;base64,SFRCe200cmtkMHduX2J1Z3NfMW5fdGgzX3cxbGQhfQo=" alt="Image intégrée">

Décryptons ça, comme vous voulez.
J'utiliserai CyberChef.

Nous avons réussi à récupérer le fichier flag ! Il s'agissait du fichier flag.txt, mais si quelqu'un récupérait un fichier de mots de passe ou quelque chose de similaire, cela pourrait entraîner de graves problèmes. Soyez donc prudents.

Contre-mesures : Que peut-on faire pour prévenir l'IDOR ?

Le problème d'IDOR rencontré avec Armaxis n'était pas dû à un défaut de la méthode de génération des jetons ni à un problème d'aléatoire, mais plutôt un manque de contrôles d'autorisation . Par conséquent, un simple « renforcement du jeton » ne suffit pas.

Nous résumerons ici les mesures pratiques tirées de cette étude de cas.

Ne vous fiez pas aux entrées du client pour les références d'objets.

Le plus important est de ne pas utiliser les données saisies par le client, telles que les adresses e-mail ou les identifiants, comme références d'objets .

Lors de cette procédure de réinitialisation de mot de passe, l'adresse électronique fournie dans la requête a été utilisée pour rechercher l'utilisateur concerné.
Cette conception permet à une personne de manipuler le compte d'une autre en modifiant simplement la valeur saisie.

Initialement, les utilisateurs concernés par la mise à jour étaient :

  • Informations de l'utilisateur connecté
  • L'identifiant utilisateur associé au jeton

La décision devrait être prise sur la base d'informations pouvant être déterminées côté serveur , telles que 

J'ai personnellement vu de nombreuses applications qui fonctionnent en utilisant des références d'objets dépendant des entrées du client, alors assurez-vous de développer avec prudence.

Considérez les jetons comme une « autorisation d'opération » plutôt que comme une « vérification d'identité ».

Un jeton de réinitialisation de mot de passe ne se contente pas de vérifier sa validité.

  • ce jeton a-t-il délivré ?
  • Est-ce que cet utilisateur l'utilise comme une opération ?

doit être vérifié côté serveur .

Dans ce cas précis, le jeton a été vérifié, mais concernant l'utilisateur autorisé à l'utiliser ont été ignorées.

ne doivent pas être considérés comme une « preuve d'identité », mais des « clés autorisant des opérations spécifiques pour des utilisateurs spécifiques ».

Voilà ce qui arrive souvent lorsqu'on développe avec une approche légère, en pensant qu'il n'y a pas de problème tant qu'on se contente d'émettre des tokens. Je crois que
beaucoup d'ingénieurs développent sans vraiment comprendre la signification des tokens.

Vérifiez plus rigoureusement les fonctions d'administration et les flux d'exceptions.

Les flux exceptionnels, comme les réinitialisations de mots de passe et les fonctions réservées aux administrateurs, ont tendance à avoir une autorisation moins stricte que les processus normaux,
mais en réalité, ces flux exceptionnels constituent le point de départ des attaques .

  • Réinitialisation du mot de passe
  • Récupération de compte
  • Opérations réservées à l'administrateur

Des fonctions de ce type nécessitent une conception et une mise en œuvre claires définissant qui peut accéder à quelles données et pourquoi.

De plus, étant donné que le grand public peut parfois se montrer négligent, il peut être judicieux de réserver les fonctions réservées aux administrateurs à un système distinct.

Résumé : IDOR et les pièges des dessins et modèles autorisés

Dans ce test, que le fait de se fier aux données saisies par l'utilisateur sans contrôles d'autorisation suffisants entraînait une prise de contrôle du compte. Même avec des jetons et une authentification, la sécurité n'est pas garantie à elle seule.

Le problème fondamental réside dans le fait que le serveur n'a pas déterminé « quelles données il est autorisé à manipuler ».
Une conception utilisant directement les adresses électroniques comme références d'objets est un exemple typique provoquant une erreur d'identité de référence (IDOR).

Pour éviter les erreurs d'identification de la cible (IDOR), il est essentiel de déterminer de manière univoque la cible de l'opération côté serveur et de vérifier explicitement l'autorisation pour chaque processus.
Il ne s'agit pas d'une mesure particulière, mais d'un principe de conception fondamental.

En testant concrètement le jeu via un CTF, j'ai pu constater à quel point le problème d'échec d'autorisation est réel.
Si cela vous intéresse, je vous recommande Hack the Box .

La sécurité ne peut être maîtrisée qu'en pratiquant du point de vue d'un attaquant

La simple lecture de la référence ne suffit pas. attaque concrète permet de comprendre véritablement la vulnérabilité d'un élément et comment le protéger.

HackTheBox propose un environnement de formation où vous pouvez expérimenter en toute sécurité les vulnérabilités d'une machine virtuelle.
Même les débutants peuvent apprendre à penser comme un attaquant en progressant étape par étape.

  • Exercices de machines virtuelles basés sur des scénarios d'attaque réalistes
  • Traite un large éventail de vulnérabilités, notamment RCE, SQLi et XSS
  • Le plan VIP vous donne accès à des machines plus anciennes

*HackTheBox Académie (matériel pédagogique) et Laboratoires (environnement de pratique), chacune avec des structures de facturation différentes.
Pour ceux qui souhaitent se concentrer sur la pratique, nous recommandons vivement l'offre Laboratoires VIP ou supérieure.

👉 Pour des informations détaillées sur la façon de s'inscrire à HackTheBox et les différences entre les plans, veuillez cliquer ici.

Partagez si vous le souhaitez!

Qui a écrit cet article

Ceci est un blog que j'ai commencé à étudier la sécurité de l'information. En tant que nouvel employé, je serais heureux si vous pouviez regarder avec un cœur large.
Il y a aussi Teech Lab, qui est l'occasion d'étudier le plaisir en programmation, donc si vous êtes intéressé par le développement de logiciels, assurez-vous de jeter un œil!

table des matières