@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

f(x)=y

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,342