Skip to main content
Blog
Blog Attacks

Ce n'est pas la MFA qui a échoué, mais le modèle de confiance : phishing par code d'appareil et vol de jetons OAuth (Kali365)

Kali365 détourne l'octroi d'autorisation d'appareil d'OAuth 2.0 pour voler des jetons Microsoft 365 après la MFA. Décryptage technique du flux, de FOCI et de la détection.

Jun 05, 2026 12 min read
Un jeton d'accès OAuth 2.0 au centre d'un schéma reliant un appareil légitime à l'appareil d'un attaquant

Le 2026-05-21, le FBI a publié l'avis de service public I-052126-PSA, alertant sur un kit de Phishing-as-a-Service appelé Kali365 qui détourne des comptes Microsoft 365. Il ne vole pas de mots de passe. Il n'intercepte pas de codes MFA. La victime se connecte sur la page de Microsoft, termine l'authentification multifacteur, et l'attaquant repart quand même avec un accès persistant. Kali365 y parvient en détournant l'octroi d'autorisation d'appareil d'OAuth 2.0 pour capturer les jetons d'accès et de rafraîchissement que Microsoft émet après une connexion parfaitement légitime.

Ce n'est pas une technique nouvelle. En février 2025, Microsoft a documenté une campagne de phishing par code d'appareil menée par Storm-2372, un acteur qu'elle évalue comme aligné sur les intérêts étatiques russes, actif contre des cibles gouvernementales, de défense, de télécommunications et d'énergie. Ce qui a changé, c'est l'empaquetage. Kali365 transforme cette tactique en un kit par abonnement avec des leurres générés par IA, de sorte qu'un acteur peu qualifié peut l'exécuter. La connexion réussit, l'invite MFA réussit, et l'hypothèse sous-jacente aux deux échoue : qu'un événement d'authentification réussi indique qui détient la session une minute plus tard.

Cette hypothèse est la véritable cible. « L'utilisateur s'est authentifié avec succès » a cessé d'être une frontière de confiance. La session active, portée par un jeton au porteur lié à rien, l'est.

Ce que Kali365 automatise réellement

Le FBI décrit Kali365 comme une plateforme de PhaaS distribuée via Telegram, apparue pour la première fois en avril 2026. Elle regroupe des leurres de phishing générés par IA, des modèles de campagne automatisés, des tableaux de bord en temps réel pour suivre des personnes ciblées, et la capture de jetons OAuth. Selon les mots du FBI, elle « abaisse la barrière d'entrée, donnant aux attaquants moins techniques accès à des leurres de phishing générés par IA, des modèles de campagne automatisés, des tableaux de bord de suivi d'individus/entités en temps réel, et des capacités de capture de jetons OAuth ».

Voyez-y une division du travail. Les parties difficiles du phishing par code d'appareil étaient autrefois de rédiger un leurre convaincant et d'exploiter de manière fiable l'infrastructure de capture et d'échange de jetons dans une fenêtre de 15 minutes. L'IA rédige le leurre. Le kit gère la plomberie OAuth. L'opérateur ne fait que choisir des cibles. C'est ce qui en fait un exemple plus net d'IA qui met le fraude à l'échelle que la plupart : il n'invente pas une nouvelle attaque, il supprime la compétence qui gardait l'accès à une attaque existante.

Le flux de code d'appareil, étape par étape

L'octroi d'autorisation d'appareil existe pour une bonne raison. Il permet de se connecter sur des appareils où la saisie est malaisée, comme les téléviseurs connectés, les décodeurs et les outils en ligne de commande. Vous voyez un code court, vous le saisissez sur votre téléphone, l'appareil est connecté. La conception est légitime et utilisée en permanence dans Microsoft 365.

Voici le même flux transformé en attaque :

  1. L'attaquant envoie un POST à https://login.microsoftonline.com/common/oauth2/v2.0/devicecode en utilisant un client_id propre et public, souvent Microsoft Office (d3590ed6-52b3-4102-aeff-aad2292ab01c) ou Azure CLI (04b07795-8ddb-461a-bbee-02f9e1bf7b46). Ce sont des clients Microsoft pré-consentis, donc aucun enregistrement d'application personnalisée ni consentement d'administrateur n'est nécessaire.
  2. Microsoft renvoie un device_code, un user_code saisissable par un humain, l'URL de vérification https://microsoft.com/devicelogin et un expires_in de 900 secondes. L'attaquant dispose maintenant d'une fenêtre de 15 minutes.
  3. L'attaquant incite la victime à ouvrir microsoft.com/devicelogin et à saisir le user_code. Microsoft Entra ne prend pas en charge verification_uri_complete, la variante préremplie du lien, donc la victime doit taper le code à la main. Cette étape manuelle est précisément ce qu'un leurre à forte conversion rédigé par IA est conçu pour provoquer.
  4. La victime s'authentifie sur la vraie page de Microsoft, termine la MFA et donne son consentement. Chaque élément est réel : le domaine est Microsoft, le certificat est valide, l'invite MFA est celle qu'elle reçoit toujours.
  5. L'attaquant interroge https://login.microsoftonline.com/common/oauth2/v2.0/token avec grant_type=urn:ietf:params:oauth:grant-type:device_code et le device_code, en respectant l'interval (5 secondes) et en absorbant les réponses authorization_pending, jusqu'à ce que le point de terminaison renvoie un access_token et un refresh_token.

Il n'y a pas de domaine usurpé à signaler ni de charge utile sur le terminal à détecter. La partie frauduleuse est un flux Microsoft légitime effectué par la mauvaise personne, et le jeton qu'il produit est indiscernable d'un jeton émis pour une vraie session.

Pourquoi la MFA est satisfaite et l'Accès conditionnel laisse passer

C'est la partie qui prend les équipes au dépourvu. La victime a réellement effectué la connexion interactive, MFA comprise, contre le vrai point de terminaison de Microsoft. La connexion est donc enregistrée comme satisfaite par MFA, reflétée dans le détail d'authentification du journal de connexion d'Entra et, sur les jetons v1.0, dans le claim amr portant mfa. L'Accès conditionnel évalue cette connexion comme une connexion interactive conforme et validée par MFA, et émet les jetons en conséquence.

L'attaquant ne contourne pas la MFA au sens de vaincre le défi. Le défi s'est exécuté et a réussi. Ce que le modèle de jeton au porteur ne fait jamais, c'est lier le jeton émis à l'appareil qui a relevé le défi. La MFA a répondu à « la bonne personne s'authentifie-t-elle en ce moment ? ». Elle n'a pas répondu à « est-ce le bon appareil qui détient ce jeton trente secondes plus tard ? », et rien dans le flux standard ne le fait.

La portée des dégâts : jetons de rafraîchissement FOCI et escalade vers le PRT

Un jeton d'accès capturé est nuisible pendant une heure. Le jeton de rafraîchissement est le vrai prix, et le modèle de jetons de Microsoft le rend pire que la compromission d'une seule application.

Les jetons de rafraîchissement émis aux clients propres de Microsoft sont généralement des jetons FOCI, Family of Client IDs. Un jeton de rafraîchissement de famille obtenu via un client peut être échangé contre des jetons d'accès en tant qu'autres clients de la famille, de sorte qu'un jeton capturé via Microsoft Office peut être échangé contre un accès à Exchange Online, Teams, SharePoint et OneDrive, et Microsoft Graph. Un seul jeton de rafraîchissement volé est un mouvement latéral à travers les données du locataire, et non un point d'appui dans une application.

L'arithmétique de la durée de vie aggrave la situation. Depuis janvier 2021, les durées de vie des jetons de rafraîchissement ne sont plus réglables via les politiques de durée de vie des jetons ; la fenêtre d'inactivité par défaut du jeton de rafraîchissement est de 90 jours et l'âge maximal est, en pratique, jusqu'à révocation. Là où le client et la ressource prennent en charge l'Évaluation continue de l'accès, les jetons d'accès peuvent s'étendre à 24 à 28 heures, bien qu'ils soient révocables en quasi-temps réel lors d'événements critiques. Pour forcer la réauthentification, vous vous appuyez désormais sur la fréquence de connexion de l'Accès conditionnel, et non sur la politique de jeton.

Le plafond d'escalade est encore plus haut. Dans la mise à jour de février 2025 de son rapport sur Storm-2372, Microsoft a observé l'acteur basculer vers le client Microsoft Authentication Broker (29d9ed98-a469-4536-ade2-f981bc1d605e) pour obtenir un jeton de rafraîchissement, enregistrer un appareil contrôlé par l'attaquant dans Entra ID, puis frapper un Primary Refresh Token. Un PRT est un matériel d'identité durable et lié à l'appareil qui débloque une authentification unique étendue. Le code d'appareil est le point d'entrée ; le PRT est le locataire.

« Authentifié avec succès » a cessé d'être une frontière de confiance

Pendant des années, le modèle dominant était simple : vérifier l'utilisateur à la connexion, puis faire confiance au jeton jusqu'à son expiration. Les back-ends enregistrent l'événement d'authentification, les fournisseurs d'identité alertent sur les schémas de connexion inhabituels, et une fois la session établie, la plupart des applications cessent de demander qui se trouve de l'autre côté.

Le phishing par code d'appareil est une réfutation nette de ce modèle. L'événement de connexion est authentique, le jeton est authentique, et la seule chose qui cloche, c'est que le jeton est maintenant détenu par quelqu'un d'autre que la personne qui s'est authentifiée. Un jeton émis pour un utilisateur sur son ordinateur portable dans un pays peut être échangé et rejoué depuis l'infrastructure de l'attaquant dans un autre, et Entra voit une session valide et satisfaite par MFA parce que, au moment de l'authentification, elle l'était.

Il est utile de voir les trois chemins courants de vol de jetons côte à côte. Ils aboutissent tous à un jeton valide post-authentification, mais ils touchent des parties différentes de la surface d'attaque, ce qui change à la fois la façon dont ils évitent les contrôles et l'endroit où vous pouvez encore les attraper.

AttaqueJeton capturéCe qui touche la victimeOù se produit l'usage malveillantPrincipale lacune de télémétrie
Phishing par code d'appareil (Kali365)OAuth d'accès et de rafraîchissement (souvent FOCI)Un message de phishing plus la vraie page microsoft.com/deviceloginÉchange et réutilisation du jeton depuis l'infrastructure de l'attaquantLa connexion est la vraie connexion MFA de la victime ; l'échange lui est attribué
Phishing adversary-in-the-middleJeton de session ou cookie capturé en transitUne fausse page de connexion en proxy inverseSession rejouée depuis l'infrastructure de l'attaquantUn domaine ressemblant existe mais la session paraît valide en aval
Malware infostealerCookies de session copiés sur le disqueMalware s'exécutant sur le terminalSession reprise depuis le cookie voléCompromission du terminal, mais la session reprise passe les contrôles côté serveur

Le fil conducteur est la dernière colonne. Dans chaque cas, l'application détient un jeton valide et traite son détenteur comme l'utilisateur authentifié. L'appareil qui s'est authentifié et l'appareil qui utilise désormais le jeton sont différents, et le modèle standard n'a aucun contrôle natif pour cette différence.

Le détecter et le bloquer

Il y a deux tâches ici : fermer le flux, et trouver où il a déjà été utilisé.

Bloquer le flux dans l'Accès conditionnel d'Entra

Cela correspond directement à la recommandation principale du FBI. Dans l'Accès conditionnel, utilisez la condition de flux d'authentification et réglez le flux de code d'appareil sur Bloquer, et bloquez le transfert d'authentification dans la même politique. La propre recommandation de Microsoft est de bloquer le flux de code d'appareil partout où c'est possible.

  1. Appliquez la politique à tous les utilisateurs et à toutes les ressources, puis excluez les comptes de secours et d'accès d'urgence pour qu'une mauvaise configuration ne vous verrouille pas dehors.
  2. Si un processus légitime enregistre des appareils via le flux de code d'appareil, excluez le Service d'enregistrement des appareils (01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9), car les politiques de flux d'authentification y sont appliquées lorsque la politique vise toutes les ressources.
  3. Auditez l'usage actuel du code d'appareil avant d'appliquer, pour que les exceptions légitimes soient connues plutôt que devinées.

Chercher l'usage antérieur dans les journaux de connexion

Les connexions par code d'appareil sont visibles dans les journaux de connexion d'Entra ID. Le filtre de détection le plus utilisé est le protocole d'authentification :

SigninLogs
| where AuthenticationProtocol == "deviceCode"
| summarize logins=count() by UserPrincipalName, AppDisplayName, IPAddress, tostring(LocationDetails.countryOrRegion)

Surveillez aussi OriginalTransferMethod == "deviceCodeFlow" pour repérer les sessions suivies par protocole lors de rafraîchissements ultérieurs, et signalez les événements d'enregistrement d'appareil effectués par le client Microsoft Authentication Broker là où vous ne les attendez pas, qui est le signe de l'escalade vers le PRT.

La limite honnête est dans le tableau ci-dessus. L'événement d'authentification qui a produit le jeton est la vraie connexion satisfaite par MFA de la victime, donc la détection par journaux est forte sur le flux lui-même mais faible sur l'échange et la réutilisation qui suivent, qu'Entra attribue à cette connexion légitime.

Là où la faille du code d'appareil se ferme vraiment : la couche de session

Un jeton volé doit être utilisé quelque part, et cet endroit n'est presque jamais l'appareil qui s'est authentifié. Ce décalage est le signal que le modèle de jeton au porteur jette et celui que cside est conçu pour conserver.

L'empreinte d'appareil avancée de cside collecte plus de 100 signaux de navigateur, d'appareil et de réseau pour créer un identifiant persistant de chaque visiteur. À l'authentification, ces signaux établissent une base de référence pour la session. Quand un jeton est ensuite présenté depuis un environnement différent, une empreinte TLS et navigateur différente, un ASN ou une sortie par proxy résidentiel différents, des marqueurs d'automatisation ou de mode headless qui n'étaient pas présents à la connexion, l'empreinte ne correspond pas à la base de référence, et ce décalage peut déclencher l'invalidation du jeton ou un défi renforcé avant que l'attaquant n'atteigne les données. Nous approfondissons cela dans comment les données de localisation avancées détectent la réutilisation non sûre de jetons et sur le changement plus large dans pourquoi la session du navigateur est désormais un plan de contrôle de sécurité.

cside surveille également l'environnement côté client à la recherche des scripts malveillants et des charges de détournement de session qui opèrent entièrement sous la couche d'authentification. C'est la visibilité au niveau du navigateur que les journaux back-end ne peuvent pas fournir, et c'est la partie de la surface d'attaque où le vol de jetons se décide réellement. Pour savoir où cela s'inscrit dans une pile plus large de prise de contrôle de compte, notre guide pour comparer les solutions de prévention de l'ATO cartographie où s'arrête la MFA et où commencent les signaux au niveau de la session.

Réservez une démo pour voir comment cside détecte les sessions compromises avant que les dégâts ne soient faits.

Les contrôles Microsoft 365, le comportement d'Entra et les recommandations du FBI sont exacts au 2026-05-31. Les flux des fournisseurs, les ID de client et les avis évoluent ; confirmez les options actuelles de flux de code d'appareil et d'Accès conditionnel de Microsoft avant de vous appuyer sur un réglage spécifique.

Simon Wijckmans
Founder & CEO Simon Wijckmans

Founder and CEO of cside. Building better security against client-side executed attacks, and making solutions more accessible to smaller businesses. Web security is not an enterprise only problem.

FAQ

Frequently Asked Questions

L'octroi d'autorisation d'appareil d'OAuth 2.0, défini dans le RFC 8628. Il existe pour que des appareils à saisie limitée comme les téléviseurs et les CLI puissent se connecter : l'appareil demande un code au serveur d'autorisation, l'utilisateur saisit ce code sur une page séparée et s'authentifie, et l'appareil interroge le point de terminaison de jeton jusqu'à recevoir les jetons. Kali365 lance ce flux lui-même, puis incite la victime à effectuer l'étape d'authentification sur la vraie page de Microsoft, de sorte que le kit récupère les jetons d'accès et de rafraîchissement émis par le flux.

Non. La victime effectue la MFA sur la page de connexion authentique de Microsoft, donc l'authentification est enregistrée comme satisfaite par MFA et l'Accès conditionnel la traite comme une connexion interactive conforme. Les jetons émis à partir de cette connexion sont légitimes. La MFA a prouvé qui s'est authentifié ; elle n'a pas lié le jeton obtenu à l'appareil qui s'est authentifié, et c'est la faille par laquelle passe l'attaquant.

FOCI (Family of Client IDs) est un comportement non documenté d'Entra où un groupe de clients propres à Microsoft partage une famille de jetons. Un jeton de rafraîchissement de famille capturé via un client, comme Microsoft Office, peut être échangé au point de terminaison de jeton contre des jetons d'accès pour d'autres applications de la famille : Outlook et Exchange, Teams, OneDrive et SharePoint, et Microsoft Graph. Un seul jeton de rafraîchissement volé devient une portée latérale dans tout Microsoft 365, et non un accès à une seule application.

Créez une politique d'Accès conditionnel avec la condition de flux d'authentification, réglez le flux de code d'appareil sur Bloquer et bloquez le transfert d'authentification dans la même politique. Microsoft recommande de bloquer le flux de code d'appareil partout où c'est possible. Excluez les comptes de secours, et excluez le Service d'enregistrement des appareils si un processus légitime enregistre des appareils via ce flux. Auditez ensuite les journaux de connexion d'Entra en filtrant sur le protocole d'authentification de code d'appareil.

Surveillez et sécurisez vos scripts tiers

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Commencez gratuitement, ou essayez Business avec un essai de 14 jours.

cside Interface du tableau de bord affichant la surveillance des scripts et les analyses de sécurité
Related Articles
Réserver une démonstration