Flask debug = True exploitation

7

È risaputo che l'opzione debug=True di Flask può portare all'esecuzione di codice in modalità remota tramite le funzionalità di debugger werkzeug e anche diversi sono state compromesse . Ho deciso di esaminarlo e si è scoperto che la tecnica non funziona se l'app viene eseguita da un server di applicazioni forking come uwsgi o gunicorn. Quindi le domande sono:

  1. Esiste l'opportunità di sfruttare l'applicazione Flask con debug=True abilitata anche se viene eseguita da un server di applicazioni forking (gunicorn, uwsgi)? Non posso credere che tutte queste risorse compromesse abbiano utilizzato in produzione il server Web di Flask.
  2. Tutti i siti hackerati eseguivano direttamente l'app Flask senza utilizzare l'approccio "standard" come nginx + gunicorn / uwsgi + Flask?
posta CaptainRR 24.10.2016 - 10:19
fonte

1 risposta

3

Se abilitiamo il debugger con questo codice:

app = flask.Flask(__name__)
app.debug = True

Questo abilita solo il debugger con il server di sviluppo integrato. Per utilizzare il debugger di Werkzeug con un altro server WSGI, dobbiamo includere esplicitamente il middleware:

from werkzeug.debug import DebuggedApplication 
from waitress import serve
app = DebuggedApplication(app, evalex=True, pin_security=False)
serve(app, listen='*:8080')

Quando lo fai, con le opzioni evalex e pin_security come sopra, l'applicazione è banalmente vulnerabile a compromessi da remoto.

    
risposta data 25.10.2016 - 23:04
fonte

Leggi altre domande sui tag