@JulienTopcu
beyondxscratch.com
julien.topcu@owasp.org
Julien Topçu
Coach Tech
@JulienTopcu
Chapitre 1 : Les squatteurs
@JulienTopcu
@JulienTopcu
Un petit problème de révocation, non ?
@JulienTopcu
@JulienTopcu
Vous
Gmail
Facebook, Linkedin
Resource :
Resource Owner :
Resource Server :
Client :
Vos Contacts
Quel est le problème de révocation ?
@JulienTopcu
@JulienTopcu
Chambres : Resource
Grand Budapest Hôtel (entreprise) : Resource Owner
Hôtel : Resource Server
Convives : Client(s)
@JulienTopcu
Distribuer des codes d'accès temporaires
et personnalisés
@JulienTopcu
Numéro de réservation
=
Code d'Autorisation
Authorization Code
@JulienTopcu
... Jusqu'à ce que
Chapitre 2 : Le détournement d'ardoise
@JulienTopcu
@JulienTopcu
Dmitri (VIP)
???
Je veux commander
Donnez moi votre # de compte
et votre mot de passe
au Grand Budapest Hôtel
Les voici
@JulienTopcu
👿
Bonjour, C'est Dmitri
J'aimerais faire une dinguerie
avec mon ardoise
Donnez moi
votre numéro de compte
et votre mot de passe svp,
que je confirme que c'est bien vous
Les voici
@JulienTopcu
👿
@JulienTopcu
Un petit problème d'imposture, non ?
@JulienTopcu
Ne plus divulguer l'identifiant et le mot de passe de l'utilisateur
Dmitri (VIP)
Je veux commander
Vous le connaissez ?
Je vous le passe puis
Rappelez moi au
0123456789
Donnez moi
votre numéro de compte
et votre mot de passe svp
Les voici
C'est bien lui
Authentification
1
@JulienTopcu
Authorization Server
Authentifie et protège l'End User (Dmitri)
Confirme les accès du End User auprès de Robert Hits
@JulienTopcu
Dmitri (VIP)
Je veux commander
Vous le connaissez ?
Je vous le passe puis
Rappelez moi au
0123456789
Donnez moi
votre numéro de compte
et votre mot de passe svp
Les voici
C'est bien lui
1
@JulienTopcu
Dmitri (VIP)
2
Que désirez vous ?
Un courtesan
Je viens chercher
la commande de Dmitri (code)
Voici # de commande
(authorization code)
pour la pâtisserie
Je vous repasse Dmitri
@JulienTopcu
Authorization Server
Distribue les accès temporaires
(Authorization Code)
@JulienTopcu
Ardoise, Pâtisseries : Resource
Dmitri : Resource Owner & End User
Hôtel : Resource Server
# de Commande : Authorization Code
Gustave : Authorization Server
Robert Hits : Client
@JulienTopcu
End User qui délègue la manipulation de Resources à un Service Tiers (Client)
@JulienTopcu
Client de Resources
auprès du Resource Server
à la demande d'un End User
pour lui offrir un service
@JulienTopcu
@JulienTopcu
Vous
End User
Resource Server
Client
des contacts !!!
il a un compte ?
/authorize
t'es qui ? Log toi !
Authorization Server
Voilà mon compte et mon mot de passe
File les contacts !!!!
Authorization Code ???
Tu peux accéder à son Gmail
Authorization Code
Contacts
Resources
@JulienTopcu
Et c'est alors...
Chapitre 3 :
Les margoulins de la concurrence
Dmitri (VIP)
Je veux commander
Vous le connaissez ?
Je vous le passe puis
Rappelez moi au
0123456789
Donnez moi
votre numéro de compte
et votre mot de passe svp
Les voici
Voici
le code
@JulienTopcu
Dmitri (VIP)
Oui, je veux bien
C'est Robert Hits
Vous le connaissez ?
Rappelez moi au
01666666 👿
Donnez moi
votre numéro de compte
et votre mot de passe svp
Les voici
Voici
le #de commande
(code)
@JulienTopcu
Bonjour c'est Robert Hits 👿,
Ça vous dit une pâtisserie ?
@JulienTopcu
Référencer les Clients avec leurs adresses de contact
Robert Hits | 0123456789 |
---|---|
Robert Hits | 0123456790 |
C'est Robert Hits
Rappelez moi au
01666666 👿
Je ne connais pas ce numéro, au revoir
@JulienTopcu
Numéro de téléphone : Redirect URI
Robert Hits : Client ID
@JulienTopcu
Authorization Server
Maintient une liste de Redirect URI autorisées (exact match) par Client ID
@JulienTopcu
Vous
End User
Resource Server
Client
des contacts !!!
il a un compte ?
/authorize
t'es qui ? Log toi !
Authorization Server
Voilà mon compte et mon mot de passe
File les contacts !!!!
Authorization Code ???
Tu peux accéder à son Gmail
Authorization Code
@JulienTopcu
@JulienTopcu
@JulienTopcu
Une nouvelle fois !?
Chapitre 4 : Les regards indiscrets
@JulienTopcu
Envoi par courrier : Front Channel
@JulienTopcu
@JulienTopcu
Remise en main propre des accès
@JulienTopcu
@JulienTopcu
Voici mon numéro de réservation
Bonjour Dmitri,
Voici votre carte d'accès
En Main Propre
Authorization Code
Access Token
Back Channel
@JulienTopcu
Numéro de réservation : Authorization Code
Carte : Access Token
Courrier : Front Channel
En Main Propre : Back Channel
@JulienTopcu
@JulienTopcu
Par Courrier (Front Channel) ,
on envoie le numéro de réservation (Authorization Code)
Mais on ne peut pas être sur que quelqu'un l'a vu par dessus l'épaule de Dmitri
@JulienTopcu
En Main Propre (Back Channel) ,
est remise la carte d'accès (Access Token)
en échange du # de réservation (Authorization Code)
On est sur que personne d'autre que Dmitri n'a pu la prendre !
@JulienTopcu
Le numéro de réservation (Authorization Code)
est à usage unique.
Une fois utilisé, on ne peut plus récupérer
une nouvelle carte (Access Token) avec.
La carte d'accès se désactive à la fin de la réservation
Vous
End User
Resource Server
Client
des contacts !!!
il a un compte ?
/authorize
t'es qui ? Log toi !
Authorization Server
Voilà mon compte et mon mot de passe
File les contacts !!!!
Authorization Code ???
Tu peux accéder à son Gmail
Authorization Code
Resource Server
Client
Authorization Server
Je change l'adresse du navigateur pour redirect_uri?code =Authorization Code
facebook.com?code=XXXX
Front Channel 🧐
Je peux avoir un Access Token du coup ?
Authorization Code + Client ID dans le payload HTTPS
Back Channel
File les contacts !!!!
Access Token
Access Token
Implicit Flow
@JulienTopcu
Implicit Flow
⛔
@JulienTopcu
@JulienTopcu
Sérieusement ?
Chapitre 5 : Les infiltrés
@JulienTopcu
Dmitri (VIP)
Que désirez vous ?
Un courtesan
Je viens chercher
la commande de Dmitri (code)
Voici le code d'accès
pour la pâtisserie
Je vous repasse Dmitri
@JulienTopcu
Voici le # de commande (authorization code)
ne le divulguez pas 📞
Je viens pour ce # de commande
Voici votre carte d'accès (access token)
pour la pâtisserie
👂🔭
De visu ! 🤝
Front Channel
Back Channel
@JulienTopcu
@JulienTopcu
S'assurer que c'est bien l'initiateur de la demande à qui on octroie l'accès
@JulienTopcu
@JulienTopcu
Code Verifier : un nombre aléatoire
@JulienTopcu
On fait un calcul sur le nombre aléatoire
(Code Verifier)
qui donne un résultat (Code Challenge)
Le calcul (Code Challenge Method) est publique
mais son calcul inverse est quasiment impossible !
On ne peut pas utiliser un simple mot de passe au téléphone 📞 !
(Front Channel)
On ne donne que le code de vérification que de visu 🤝!
(Back Channel)
@JulienTopcu
@JulienTopcu
Fonction de hachage
Code Challenge Method
Hash
Code Challenge
Numéro Aléatoire Secret
Code Verifier
Vous
End User
Resource Server
Client
des contacts !!!
il a un compte ?
/authorize
t'es qui ? Log toi !
Authorization Server
Voilà mon compte et mon mot de passe
Code Challenge (CC) y
Code Challenge Method (CCM) f
Resource Server
Client
Authorization Server
Je change l'adresse du navigateur pour redirect_uri?code =Authorization Code
facebook.com?code=XXXX
Back Channel
File les contacts !!!!
Access Token
Access Token
CC = CCM(CV) ???
f(x)=y ???
Je peux avoir un Access Token du coup ?
Authorization Code + Client ID + Code Verifier (CV)
x
@JulienTopcu
Authorization Code Flow
with PKCE
Bonne pratique OAUTH 2.1
... Oh nan !
@JulienTopcu
Chapitre 6 :
Lavage de linge sale en privé
@JulienTopcu
@JulienTopcu
Dmitri (VIP)
Prenez mon linge, je n'en peux plus !
Vous le connaissez ?
Je vous le passe puis
Rappelez moi au
0123456789
Donnez moi
votre numéro de compte
et votre mot de passe svp
Les voici
@JulienTopcu
Dmitri (VIP)
Robert Hits souhaite
accéder à votre chambre.
Consentez-vous à ce qu'ils récupèrent
votre linge ?
Bien-sûr
Voici le # de commande
La carte que vous aurez en échange
n'aura accès qu'au casier à linge sale
à l'extérieur de la chambre
@JulienTopcu
La Carte d'Accès est Scopée au consentement de Dmitri
@JulienTopcu
@JulienTopcu
Linge : Resource
Récupération du Linge : Scope
Dmitri : Resource Owner, End User
Casier à linge sale : Resource Server
Robert Hits : Client, Client ID
Gustave : Authorization Server
Numéro de Commande : Authorization Code
Carte : Access Token
Numéro de Téléphone : Redirect URI
Téléphone : Front Channel
En Main Propre : Back Channel
Vous
End User
Resource Server
Client
t'es qui ? Log toi !
Authorization Server
Voilà mon compte et mon mot de passe
Tu consens à laisser Facebook accéder à tes contacts ?
Yes !
Authorization Code
Je peux avoir un Access Token ?
Voilà l'Access Token avec le Scope contact
File les contacts, j'ai l'Access Token!!
@JulienTopcu
Les Scopes ne permettent que d'octroyer des accès à un Client (une application) à des Resources
Ils ne permettent PAS d'assigner des accès
à un End User sur des Resources
@JulienTopcu
@JulienTopcu
Un homme heureux !
@JulienTopcu
https://oauth.net/2.1/
OAuth2.1 expliqué simplement (même si tu n'es pas dev) !
By Julien Topçu
OAuth2.1 expliqué simplement (même si tu n'es pas dev) !
- 2,385