CSRF e OAuth2

118
CSRF com OAuth 2 Leonardo B. Cordeiro

Transcript of CSRF e OAuth2

CSRF com OAuth 2Leonardo B. Cordeiro

Cartão de crédito

Cartão de crédito

?

?

?

?

Você confia?

X

Sistema Confiável

Sistema Confiável

E agora?

Você confia?

Veremos :)

Desenvolvedor e Instrutor

github.com/leonardocordeiro

[email protected]

Leonardo Bernardino Cordeiro

Relembrando …

OAuth 2

Cuida de como aplicações clientes podem acessar os dados dos clientes cadastrados no resource server

Grant Types

Authorization: Bearer 123

Authorization: Bearer 123

Resource Owner Credentials Grant

Resource Owner Credentials Grant

Confiabilidade

Você confia?

Comprar!

302 (Moved Temporarily)

client_id: 987 location: /login

EXPLICAR COMO OBTEVE CLIENT_ID

Cadastra

client_id client_secret

client_id: 987

Validando…

OK!

302 (Moved Temporarily)

auth_token: 1234 location: /token/1234

/token/1234

client_id: 987 client_secret: **** auth_token: 1234

access_token: 765

Gera o Access Token e associa a sessão do usuário na livraria.

/pagar access_token: 765

/endereco access_token: 765

endereco: Rua do Ouvidor, 50

access_token: 765

Access Token

access_token: 765

O acesso aos recursos (dados) do usuário foi concedido a um client_id.

Access Token

access_token: 765

O acesso aos recursos (dados) do usuário foi concedido a um client_id.

Access Token

Deve ser invalidado (revogação) depois de um tempo.

Evitar que outras aplicações descubram

Authorization Code Credentials Grant

Não preciso passar minha senha do Paypal

pra Casa do Código!

Estou seguro!

Cadastra

client_id client_secret

302 (Moved Temporarily)

client_id: 1001 location: /login

client_id: 1001

Validando…

OK!

302 (Moved Temporarily)

auth_token: 4567 location: /casacodigo/token

auth_token: 4567

Como trocar o auth_token pelo access_token?

/token/1234

O que faz essa URI?

client_id: 987 client_secret: **** auth_token: 1234

access_token: 765

Sessão

/pagar access_token: 765

/token/1234

/token/4567

Sessão

Sessão

/endereco access_token: 543

endereco: <endereço do hacker>

Jamais acessarei essa URI!

<img src=“/images/carro.png”>

<img src=“/images/flores.png”>

404

<img src=“http://casadocodigo.com.br/.../token/4567”>

?????

<img src=“/token/4567”>

<img src=“/token/4567”>

?

Cross Site Request Forgery

Força o cliente a executar algo que ele nao deseja

Gerar um token e associá-lo a sessão?

Gerar um token e associá-lo a sessão?

E validá-lo na hora de receber um Authorization Code?

Comprar!

Gerando Token

Sessão

302 (Moved Temporarily)

state: 9998 client_id: 987

location: /login

state: 9998 client_id: 987

Validando…

OK!

302 (Moved Temporarily)

state: 9998 auth_token: 1234

location: /token/1234/9998

/token/1234/ 9998

Sessão

client_id: 987 client_secret: **** auth_token: 1234

<img src=“/token/4567/????”>

Representa a sessão do usuário no Client Application

state

Representa a sessão do usuário no Client Application

Gerado antes do redirect ao Authorization Server (login)

state

Representa a sessão do usuário no Client Application

Gerado antes do redirect ao Authorization Server (login)

Client Application irá validar ao recebê-lo junto com Authorization Token

state

Recomendado no request

state

OAuth2 Spec 4.1.1

Obrigatório na resposta, caso esteja presente no request

state

OAuth2 Spec 4.1.2

Desenvolvedor e Instrutor

github.com/leonardocordeiro

[email protected]

Leonardo Bernardino Cordeiro

Obrigado!