In this article
Broken Access Control in Python-Flask-Anwendungen verhindern
Manche Sicherheitslücken lassen sich leicht mit statischen Analysetools wie Snyk erkennen. Andere sind Grenzfälle, die die Anwendungslogik betreffen und beabsichtigt oder unbeabsichtigt sein können. Broken Access Control ist ein solcher Grenzfall. Wenn Sie Python-Flask-Anwendungen für moderne SaaS-ähnliche Geschäftsanwendungen entwickeln, handelt es sich mit Sicherheit um eine Schwachstelle.
Die Zugriffskontrolle ist ein grundlegender Aspekt der Anwendungssicherheit. Sie stellt sicher, dass Nutzerinnen und Nutzer nur auf ihre eigenen Ressourcen oder auf Ressourcen zugreifen können, für die sie eine Berechtigung haben. Auf nichts anderes. Sind die Zugriffskontrollmechanismen in Python-Anwendungen schwach oder durch die Geschäftslogik falsch implementiert, können böswillige Akteure sie ausnutzen, um sich unbefugten Zugriff zu verschaffen. Das kann zu schwerwiegenden Sicherheitsverletzungen und erhöhten Sicherheitsrisiken führen.
Sehen wir uns zunächst einige Sicherheitsbegriffe genauer an, um besser zu verstehen, was Broken Access Control aus Sicherheitssicht bedeutet.
Was ist Broken Access Control?
Broken Access Control ist eine kritische Sicherheitslücke. Sie tritt auf, wenn eine Anwendung Einschränkungen (Autorisierungskontrollen) für die Aktionen angemeldeter Nutzerinnen und Nutzer nicht durchsetzt. Diese Schwachstelle wurde 2021 im OWASP Top 10 als größtes Sicherheitsrisiko aufgeführt. Sie ermöglicht Angreifern, auf nicht autorisierte Ressourcen zuzugreifen oder Aktionen außerhalb ihrer vorgesehenen Berechtigungen auszuführen, etwa Datensätze zu ändern, zu erstellen oder zu löschen.
Sehr empfehlenswert: Absolvieren Sie jetzt gleich die kostenlose, kurze Snyk Lesson zu Broken Access Control in Ihrem Browser!
Beispiel für Broken Access Control in einer Python-Flask-Anwendung
In diesem Abschnitt sehen wir uns ein häufiges Beispiel für Broken Access Control in einer Python-Flask-Anwendung an. Der Codeausschnitt veranschaulicht eine Schwachstelle, die auf unzureichende Zugriffskontrollen im Python-Code zurückgeht. Im Beispielcode sind die Autorisierungsprüfungen nicht nur unzureichend, sondern fehlen vollständig. Wäre diese Python-Anwendung öffentlich zugänglich, könnten sogar angemeldete Nutzerinnen und Nutzer diese Art von Schwachstelle ausnutzen, um unbefugte Aktionen auszuführen oder auf Daten zuzugreifen, für die sie keine Berechtigung haben.
Beispielcode: Eine verwundbare Python-Flask-Anwendung
Nachfolgend finden Sie den Code für eine einfache Python-Flask-Anwendung mit einer Schwachstelle durch Broken Access Control:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
# Service to handle user account information
class AccountManager:
def retrieve_account_details(self, account_identifier):
"""Fetches the account details based on the provided identifier."""
# Database interaction to retrieve account data
pass
def save_account_changes(self, modified_account):
"""Persists the updated account information to the database."""
# Database interaction to update account data
pass
account_manager = AccountManager()
def is_user_logged_in():
"""Determines if a user is currently authenticated."""
# Logic to check user authentication status
return True # Replace with actual authentication check
@app.route('/update-account', methods=['POST'])
def update_account():
"""Handles the submission of updated account information."""
if not is_user_logged_in():
return redirect(url_for('login'))
account_name = request.form.get('username')
account_record = account_manager.retrieve_account_details(account_name)
if account_record.get_username() == account_name:
account_manager.save_account_changes(account_record)
return redirect(url_for('/user'))
@app.route('/user')
def user_home():
"""Displays the user's dashboard."""
return render_template('dashboard.html')
if __name__ == '__main__':
app.run(debug=False)Analyse der Schwachstellen im Code
Die fehlerhafte Autorisierung in diesem Python-Code liegt darin, dass beim Aktualisieren eines Nutzerprofils keine angemessenen Zugriffskontrollen geprüft werden. Die Funktion `update-account` liest den Nutzernamen aus den Formulardaten (über das Formularfeld `username`) und ruft das zugehörige Nutzerprofil ab. Anschließend prüft sie, ob der Nutzername aus dem Formular mit dem Nutzernamen im abgerufenen Profil übereinstimmt, bevor sie das Profil aktualisiert.
Diese Prüfung reicht jedoch nicht aus, um sicherzustellen, dass die anfragende Person tatsächlich dieselbe Person ist, die zur Aktualisierung des Profils berechtigt ist. Ein Angreifer könnte die Formulardaten so manipulieren, dass ein anderer Nutzername angegeben wird. Dadurch könnte er sich unbefugten Zugriff verschaffen und das Profil einer anderen Person aktualisieren.
Um diese Schwachstelle zu beheben, sollte die Anwendung strengere Zugriffskontrollen einführen. Beispielsweise sollte sie überprüfen, ob die anfragende Person tatsächlich Inhaberin oder Inhaber des zu aktualisierenden Profils ist. Dazu kann die Sitzung der Nutzerin oder des Nutzers mit dem Profil verknüpft und sichergestellt werden, dass nur die angemeldete Person ihr Profil aktualisieren kann.
Häufige Schwachstellen im Zusammenhang mit Broken Access Control
Wie oben gezeigt, lässt sich eine fehlende Autorisierungsprüfung leicht übersehen, da es sich meist um ein Problem der Anwendungslogik handelt. Sollten alle Personen die Daten anderer einsehen oder ändern können, oder ist das ein Fehler? Auf welcher Ebene sollte dies durchgesetzt werden? Vielleicht schützt bereits die Sicherheit auf Zeilenebene in der Datenbank vor diesem Problem.
Sehen wir uns weitere Schwachstellen und Sicherheitsrisiken mit großer Auswirkung an, die durch Broken Access Control entstehen:
Unsichere direkte Objektreferenzen (IDOR): Diese Schwachstelle tritt auf, wenn eine Anwendung ohne angemessene Zugriffskontrollen eine Referenz auf ein internes Implementierungsobjekt offenlegt, beispielsweise auf eine Datei oder einen Datenbankschlüssel (z. B. den Primärschlüssel `id` einer Tabelle). Angreifer können diese Referenzen manipulieren, um direkt auf nicht autorisierte Daten zuzugreifen, da sich die Kennung leicht erraten lässt.
Fehlende Zugriffskontrolle auf Funktionsebene: Diese Schwachstelle entsteht, wenn eine Anwendung die Zugriffskontrolle nicht auf Funktions- oder Methodenebene durchsetzt. Dadurch können nicht autorisierte Personen eingeschränkte Aktionen ausführen.
Rechteausweitung: Dabei verschafft sich ein Angreifer höhere Berechtigungen als vorgesehen, oft durch das Ausnutzen von Fehlern in der Zugriffskontrolllogik. Kann der Angreifer beispielsweise die Anmeldedaten oder E-Mail-Adresse des Administratorkontos ändern, kann er seine Berechtigungen vom eigenen Nutzerkonto ausweiten, auf das Administratorkonto zugreifen und so im verwundbaren System höhere Rechte erlangen.
Cross-Site Request Forgery (CSRF): CSRF ist zwar streng genommen kein Problem der Zugriffskontrolle, kann aber im Namen einer angemeldeten Person nicht autorisierte Aktionen ausführen.
Auswirkungen von Broken Access Control auf die Anwendungssicherheit
Die Auswirkungen von Broken Access Control auf die Anwendungssicherheit und insbesondere auf Python-Flask-Anwendungen können verheerend sein. Unbefugter Zugriff auf sensible Daten kann zu Datenschutzverletzungen führen und die Einhaltung gesetzlicher Vorschriften gefährden. Wie die Beispiele oben zeigen, können Angreifer außerdem Daten manipulieren oder löschen, die Funktionalität der Anwendung beeinträchtigen und sogar die Kontrolle über die gesamte Anwendungsinfrastruktur übernehmen.
Für Entwicklerinnen und Entwickler ist es entscheidend, Schwachstellen durch Broken Access Control zu verstehen und zu beheben, damit sie die Sicherheit und Integrität ihrer Anwendungen gewährleisten können. Starke Zugriffskontrollmechanismen, gründliche Sicherheitstests und Tools wie Snyk Code, die unsichere Programmiermuster erkennen, helfen dabei, diese Schwachstellen zu identifizieren und zu beheben, bevor böswillige Akteure sie ausnutzen.
Nächste Schritte zur Vermeidung von Broken Access Control
Weitere Informationen zur Vermeidung von Broken Access Control finden Sie in den OWASP-Richtlinien. Mit Tools wie Snyk Code können Sie Sicherheitslücken in Ihrem Code erkennen und beheben. Sie können sich bei Snyk anmelden. Das ist kostenlos!
Hier finden Sie empfohlene Lernressourcen, um Broken Access Control zu vermeiden und Ihr Entwicklerteam darin zu schulen, sich vor unbefugtem Zugriff zu schützen:
Absolvieren Sie den Snyk Learn-Lernpfad zum OWASP Top 10. Er beginnt mit einem interaktiven Lernprogramm zu Broken Access Control und bietet Einblicke und Best Practices.
JavaScript- und Node.js-Nutzende finden im Leitfaden Broken Access Control in Express-Node.js-Anwendungen verhindern weitere Informationen.
Wenn Sie sich mit Authentifizierung und Autorisierung beschäftigen, entwickeln Sie wahrscheinlich Backends für APIs. In diesem Fall finden Sie weitere Informationen zu den OWASP API Security Top 10 Risks.
Verbessern Sie Ihre Fähigkeiten im sicheren Programmieren
Kostenlose, hochwertige Schulungen zur Entwicklersicherheit – wann und wo Sie möchten.