
@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,012