OWASP Top 10: Die grössten Sicherheitslücken in Webanwendungen
Das OWASP Top 10 Ranking ist eines der wichtigsten Sensibilisierungsdokumente für die Webentwicklung. Lernen Sie die häufigsten Schwachstellen und geeignete Massnahmen für sichere Webanwendungen kennen.
OWASP, das ist die Abkürzung für Open Web Application Security Project. Etwa alle drei Jahre bringt die Non-Profit Organisation, eine aktualisierte Liste mit den zehn kritischsten Sicherheitslücken für Webanwendungen heraus.
Das Top 10 Ranking der Schwachstellen ist frei zugänglich und wird seit 2003 von Sicherheitsexperten aus der ganzen Welt erstellt und gepflegt.
Mit der OWASP Top 10 Schwachstellen erkennen und beheben
Das Ranking ist aber nicht nur als Fingerzeig zu verstehen, der auf die bedeutendsten Top 10 Risiken für Web-Anwendungen hinweist. Das Dokument enthält auch Handlungsempfehlungen und Best Practices, um die Sicherheitslücken zu schliessen.
Zuallererst richten sich die OWASP Top 10 deshalb an Webentwicklerinnen und Webentwickler, um sie für potenzielle Schwachstellen in ihren Anwendungen zu sensibilisieren. Die OWASP Top 10 soll helfen, mögliche Angriffe von Anfang an abzuwehren und Schaden und Verluste durch böswillige Akteure zu vermeiden.
Das aktuellste Ranking sind die OWASP Top 10 2021. Zur Vorgängerversion von 2017 gibt es einige wesentliche Unterschiede. Unser Security Trainer und Senior Pentester Yves Kraft hat sich die ausführliche Dokumentation in englischer Sprache für Sie angesehen und erläutert die aufgeführten Schwachstellen und die dazu geeigneten Sicherheitsmassnhamen.
Top 1: Broken Access Control
Mit der Access Control sollen Webanwendungen nur für einen beschränkten Personenkreis zugänglich sein, zum Beispiel für authentifizierte Benutzer und nur für bestimmte Berechtigungsstufen. Eine Broken Access Control liegt vor, wenn die vorgesehenen Beschränkungen nicht korrekt durchgesetzt werden. Unbefugte erhalten dann Zugriff auf sensible Daten, Angreifer können diese ändern oder zerstören.
Die häufigsten Schwachstellen:
- Angreifende können auf Rollen und Funktionen frei zugreifen
- Parameter und Metadaten lassen sich manipulieren
- Angreifende können Rechte aufgrund von Bugs oder Design Flaws in der Programmierung ausweiten
So schliessen Sie die Sicherheitslücke:
- Die Webanwendung muss auf einem vertrauenswürdigen Server oder von serverlosen APIs implementiert werden
- Nutzer dürfen keinen Zugriff auf neue Funktionen haben, bis sie ihnen vom Administrator ausdrücklich gewährt werden (Deny by Default)
- Protokollieren und überwachen Sie fehlgeschlagene Login-Versuche, die Administratoren müssen bei Auffälligkeiten alarmiert werden
- Melden sich die User ab oder sind längere Zeit inaktiv, muss die Session automatisch ungültig werden
- Die zustandslosen JSON Web Tokens, die beim Login mitgeliefert werden, sollten kurzlebig sein
- Löschen Sie inaktive Konten
Top 2: Cryptographic Failures
Diese Schwachstelle umfasst alle Probleme, die im weitesten Sinne mit der Kryptografie bzw. mit ihren Fehlern zu tun haben. Solche Fehler können zur Offenlegung von Daten führen.
Die häufigsten Schwachstellen:
- Sensible Daten werden im Klartext gespeichert oder übertragen
- Die Webanwendung verwendet veraltete oder schwache kryptografische Algorithmen und Protokolle
- Es erfolgt keine Schlüsselverwaltung und -rotation, weil schwache oder standardisierte Cryptographic Keys im Einsatz sind
So schliessen Sie die Sicherheitslücke:
- Klassifizieren Sie die Daten und implementieren Sie diese gemäss der geltenden Datenschutzverordnung
- Speichern Sie keine sensiblen Daten
- Im Ruhezustand gilt es Daten zu verschlüsseln
- Verwenden Sie keine Klartext-Protokolle
- Speichern Sie keine User Responses zwischen
Top 3: Injection
Eine Injection-Attacke bezieht sich auf nicht vertrauenswürdige Daten in der Webanwendung, die zur Ausführung von Befehlen führt. Angreifende fügen böswillige Daten ein und können in der Folge alle anderen Daten sehen, ändern, löschen – oder sogar die Kontrolle über den Server erlangen.
Die häufigsten Formen von Injections:
- SQL-Injection
- Cross Site Scripting (XSS)
- Code-Injection
- Command-Injection
Die häufigsten Schwachstellen:
- Daten, die die Benutzer liefern, werden nicht validiert, gefiltert oder bereinigt
- Der Interpreter der Webanwendung verwendet dynamische Abfragen oder nicht parametrisierte Aufrufe
- Gefährliche Daten werden direkt verwendet oder verkettet
So schliessen Sie die Sicherheitslücke:
- Nutzen Sie in Ihrer Webanwendung sichere APIs und Frameworks; dann lassen sich Interpretationsprogramme vermeiden und stattdessen parametrisierte Abfragen verwenden
- Erstellen Sie eine positive serverseitige Eingabevalidierung, legen Sie also eine White-List als Filter an
- Verwenden Sie Datenbankkontrollen innerhalb von Abfragen (z.B. LIMIT); im Falle einer erfolgreichen Injection werden dann nicht massenhaft Daten freigegeben
Top 4: Insecure Design
Hierunter fallen Mängel im Design oder in der Softwarearchitektur. Diese Schwachstellen sind gesondert von der Implementierung zu betrachten, denn: Auch ein gut implementiertes, aber dennoch unsicheres Design ist für Angriffe anfällig.
So schliessen Sie die Sicherheitslücke:
- Die Sicherheit des Designs muss möglichst früh in der Entwicklung der Webanwendung integriert werden; nutzen Sie frühzeitig das Wissen von Experten
- Definieren Sie Zugriffskontrollen, Geschäftslogiken und User Stories
- Führen Sie einen Integrationstest durch, um die Widerstandsfähigkeit der Architektur zu überprüfen
- Trennen Sie die Eben und Netzwerkschichten der Anwendung
- Führen Sie eine Bibliothek mit sicheren Entwurfsmustern oder gebrauchsfertigen Komponenten ein
Top 5: Security Misconfigurations
Als Schwachstelle gelten alle Sicherheitskontrollen, die nicht gesichert oder nicht richtig konfiguriert sind.
Die häufigsten Schwachstellen:
- Fehlende Sicherheitshärte
- Falsch konfigurierte Berechtigungen
- Unnötige Funktionen werden zugelassen oder installiert
- Standardpasswörter bleiben unverändert
- Die Software ist nicht auf dem neuesten Stand
So schliessen Sie die Sicherheitslücke:
- Implementieren Sie einen sicheren Installationsprozess
- Ein Hardening-Prozess sichert das System; jede separate Umgebung muss über unterschiedliche Anmeldeinformation zugänglich sein
- Entfernen Sie unnötige Funktionen und Komponenten, verwenden Sie eine Minimal-Plattform
- Berechtigungen für den Cloud-Speicher müssen überprüft, Beispieldateien entfernt werden
- Implementieren Sie eine segmentierte Anwendungsarchitektur, um Nutzer und Komponenten zu trennen
- Mit einem Patch-Management kann der Administrator die Updates der Webanwendung kontrollieren
- Überprüfen Sie die Wirksamkeit von Konfigurationen und Einstellungen in jeder Umgebung
Top 6: Vulnerable and Outdated Components
In der OWASP Top 10 war dieses Sicherheitsrisiko noch unter «Using Components with Known Vulnerabilities» und auf Platz 9 geführt. Offenbar hat sich seit 2017 daran nichts verbessert, im Gegenteil. Mit neuem Namen rankt es jetzt auf Rang 6.
Die häufigsten Schwachstellen:
- Die Versionen der verwendeten client- und serverseitigen Komponenten sind nicht bekannt
- Anfällige, nicht unterstützte oder veraltete Software im Einsatz
- Nach Schwachstellen wird nicht regelmässig gescannt
- Keine Kompatibilitätstests
- Die Konfigurationen der Komponenten sind nicht gesichert
So schliessen Sie die Sicherheitslücke:
- Entfernen Sie ungenutzte Abhängigkeiten, unnötige Funktionen, Komponenten, Dateien und Dokumentationen
- Führen Sie regelmässig eine Bestandsaufnahme der Versionen der client- und serverseitigen Komponenten sowie ihrer Abhängigkeiten durch. OWASP bietet hierfür ein passendes Tool, den Dependency-Check
- Verwenden Sie nur offizielle Quellen und sichere Links
- Achten Sie gemeinsam mit dem Hersteller auf Bibliotheken und Komponenten, die nicht gewartet werden und für die es keine Sicherheits-Patches oder nur alte Versionen gibt
Top 7: Identification and Authentication Failures
Um ein System zu kompromittieren, genügt es dem Angreifenden, nur wenige Zugänge oder den administrativen Zugang zu erlangen. Fehler in der Authentifizierung sind aufgrund von Design- oder Implementierungsfehlern bei der Identitäts- und Zugriffsüberprüfung recht weit verbreitet. Angreifer können eine fehlerhafte Authentifizierung mit manuellen Methoden oder automatisierten Tools (Passwort-Listen) leicht ausnutzen.
Die häufigsten Schwachstellen:
- Die Anwendung ist nicht gegen automatisierte Angriffe geschützt, Anmeldefelder oder Kontaktformulare können automatisiert ausgefüllt werden
- Bei der Anmeldung werden schwache oder bekannte Passwörter akzeptiert
- Es werden Klartext- oder schwach gehashte Kennwort-Datenspeicher benutzt
- Brute-Force-Angriffe sind schnell erfolgreich, weil der Angreifer zum Beispiel Mailadressen für die Anmeldung leicht erraten kann
- Benutzersitzungen werden nach Inaktivität oder Abmeldung nicht ordnungsgemäss ungültig gemacht
- Der Session Token liegt offen in der URL
So schliessen Sie diese Sicherheitslücke:
- Mit einer Multi-Faktor-Authentifizierung verhindern Sie Brute-Force-Angriffe, das automatisierte Ausfüllen von Anmeldefeldern und das Wiederverwenden gestohlener Anmeldedaten
- Standard-Anmeldedaten müssen umgehend geändert werden
- Überprüfen Sie schwache Passwörter, orientieren Sie sich bei der Erstellung an der Richtlinie 800-63b der NIST
- Passwörter müssen regelmässig geändert werden
- Sichern Sie die Registrierung und die Wiederherstellung der Anmeldedaten ab, indem Sie identische Nachrichten verwenden. Erhalten Angreifer beispielsweise die Info « Dieser Benutzername existiert bereits», kennt er bereits ein Teil des Puzzles und muss nur noch das Passwort knacken
- Begrenzen Sie die Anmeldeversuche nach einem Fehlversuch oder nutzen Sie eine progressive Verzögerung
- Mit einem serverseitigen, sicheren und integrierten Sitzungsmanager erhöhen Sie die Sicherheit, weil dieser nach der Anmeldung neue, zufällige Sitzungs-IDs mit hoher Entropie erzeugt
- Verwenden Sie ein absolutes Timeout
Top 8: Software and Data Integrity Failures
Diese Schwachstelle bezieht sich auf Softwareupdates, kritische Daten und CI/CD-Pipelines, deren Integrität nicht überprüft wird – zum Beispiel Plugins, Bibliotheken oder Module aus nicht verifizierbaren und nicht vertrauenswürdigen Quellen. Auch automatische Aktualisierungsfunktionen der Anwendungen ohne Integritätsprüfung fallen unter diese Sicherheitslücke.
So schliessen Sie die Sicherheitslücke:
- Verwenden Sie digitale Signaturen
- Bibliotheken und Abhängigkeiten sollten nur von vertrauenswürdigen Repositorien verwendet werden
- Führen Sie einen Prüfprozess für Code- und Konfigurationsänderungen ein
- Implementieren Sie eine grundsätzliche Trennung, Konfiguration und Zugriffskontrolle der CI/CD-Pipeline
- Senden Sie keine ungesicherten oder unverschlüsselten serialisierten Daten an nicht vertrauenswürdige Clients
Top 9: Security Logging und Monitoring Failures
Logging und Monitoring sind zwar schwierig zu testen, dennoch gilt auch dieser Schwachstelle ein besonderes Augenmerk. Denn Fehler können sich auf die Zuverlässigkeit, die Transparenz, die Alarmierung bei Vorfällen und die Forensik auswirken.
Die häufigsten Schwachstellen:
- Anmeldungen, fehlgeschlagene Anmeldungen und Transaktionen mit hohem Wert werden nicht protokolliert
- Bei Warnungen und Fehlern erfolgt nur eine unzureichende, unklare oder gar keine Meldung
- API- und Anwendungsprotokolle werden nicht auf verdächtige Aktivitäten überprüft
- Protokolle werden nur lokal gespeichert
- Es gibt keinen oder nur einen unwirksamen Schwellenwert für Warnungen und Eskalationsprozesse für Reaktionen
- Angriffe lassen sich nicht in Echtzeit erkennen
So schliessen Sie die Sicherheitslücke:
- Implementieren Sie eine Kontrolle und protokollieren Sie alles, was die Anmeldung betrifft
- Bewahren Sie Logs lang genug auf
- Speichern Sie die Daten in Formaten, die sich von Logmanagern verarbeiten lassen
Top 10: Server-Side Request Forgery (SSRF)
Eine SSRF tritt auf, wenn die Webanwendung die vom Benutzer angegebene URL beim Aufrufen einer entfernten Ressource nicht validiert. Angreifer können manipulierte Anfragen dann an ein unerwartetes Ziel senden. Da das Abrufen einer URL ein gängiges Merkmal moderner Webanwendungen ist, nehmen SSRF-Fälle zu. Der direkte Zugriff des Nutzers auf die Anwendung ist zwar durch eine Authentifizierung gesperrt, aber Angreifer missbrauchen immer öfter den Web-Server, um sich Zugang zum System zu verschaffen.
So schliessen Sie die Sicherheitslücke auf Netzwerkebene:
- Verringern Sie die Auswirkungen von SSRF durch Segmentierung der Fernzugriffsfunktionalität in getrennten Netzwerken
- Blockieren Sie den gesamten Datenverkehr nur mit Ausnahme des unverzichtbaren Datenverkehrs; führen Sie hierzu Deny by Default Richtlinien ein.
So schliessen Sie die Sicherheitslücke auf Anwendungsebene:
- Alle bereitgestellten Eingabedaten müssen bereinigt werden
- Verwenden Sie eine positive Allow-list
- Deaktivieren Sie http-Umleitungen