A01:2021 – Mangelhafte Zugriffskontrolle
Beurteilungskriterien
Zugeordnete CWEs | Maximale Häufigkeit | Durchschn. Häufigkeit | Durchschn. Ausnutzbarkeit (gewichtet) | Durchschn. Auswirkungen (gewichtet) | Maximale Abdeckung | Durchschnittliche Abdeckung | Gesamtanzahl | CVEs insgesamt |
---|---|---|---|---|---|---|---|---|
34 | 55.97 % | 3.81 % | 6.92 | 5.93 | 94.55 % | 47.72 % | 318,487 | 19,013 |
Übersicht
94 % der Anwendungen wurden auf irgendeine Form fehlerhafter Zugriffskontrolle getestet. Vom fünften Platz aufgestiegen, weist die fehlerhafte Zugriffskontrolle mit einer durchschnittlichen Inzidenzrate von 3,81 % und mit über 318.000 die meisten Vorkommnisse im vorliegenden Datensatz auf. Bemerkenswerte Common Weakness Enumerations (CWEs) sind CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, CWE-201: Insertion of Sensitive Information Into Sent Data und CWE-352: Cross-Site Request Forgery.
Beschreibung
Die Zugriffskontrolle erzwingt Richtlinien, sodass Nutzende nicht außerhalb ihrer vorgesehenen Berechtigungen handeln können. Fehler führen in der Regel zur unbefugten Offenlegung, Änderung oder Zerstörung aller Daten oder zur Ausführung einer Geschäftsfunktion außerhalb der Verfügungen der anwendenden Person. Zu den häufigsten Schwachstellen bei der Zugriffskontrolle gehören:
-
Verstoß gegen die Prinzipien der geringsten Rechte oder der standardmäßigen Verweigerung, bei dem der Zugriff nur für bestimmte Fähigkeiten, Rollen oder Nutzende gewährt werden sollte, aber für jedermann verfügbar ist.
-
Umgehen von Zugriffskontrollprüfungen durch Ändern der URL (Parametermanipulation oder erzwungenes Durchsuchen), des internen Anwendungsstatus oder der HTML-Seite oder durch Verwendung eines Angriffstools zur Änderung von API-Anfragen.
-
Ermöglichen, das Konto einer anderen Person anzuzeigen oder zu bearbeiten, indem dessen eindeutige Kennung angegeben wird (unsichere direkte Objektreferenzen).
-
Zugriff auf die API mit fehlenden Zugriffskontrollen für POST, PUT und DELETE.
-
Erhöhung der Privilegien. Als Nutzerin/Nutzer fungieren, ohne angemeldet zu sein oder als Administrator fungieren, wenn man als Standard-Nutzerin/Nutzer angemeldet ist.
-
Manipulation von Metadaten, wie z. B. das Abfangen oder Manipulieren eines JSON Web Token (JWT)-Zugriffskontrolltokens oder die Manipulation eines Cookies oder eines versteckten Felds, um Berechtigungen zu erhöhen oder die Ungültigerklärung von JWTs zu missbrauchen.
-
CORS-Fehlkonfiguration ermöglicht API-Zugriff von nicht autorisierten/nicht vertrauenswürdigen Quellen.
-
Erzwingen des Zugriffs auf authentifizierte Seiten als nicht authentifizierte Person oder zu privilegierten Seiten als Standard-Nutzerin/Nutzer.
Prävention und Gegenmaßnahmen
Die Zugriffskontrolle ist nur wirksam bei vertrauenswürdigem serverseitigem Code oder serverlosen APIs, bei denen Angreifende die Zugriffskontrollprüfung oder Metadaten nicht ändern können.
-
Verweigern Sie standardmäßig den Zugriff, mit Ausnahme öffentlicher Ressourcen.
-
Implementieren Sie Zugriffskontrollmechanismen einmalig und verwenden Sie diese in der gesamten Anwendung wieder, einschließlich der Minimierung der Nutzung von Cross-Origin Resource Sharing (CORS).
-
Modellzugriffskontrollen sollten die Datensatzeigentümerschaft erzwingen, anstatt zu akzeptieren, dass Nutzerinnen/Nutzer Datensätze erstellen, lesen, aktualisieren oder löschen können.
-
Durch Domänenmodelle sollten eindeutige Geschäftslimitanforderungen für Anwendungen durchgesetzt werden.
-
Deaktivieren Sie die Verzeichnisliste des Webservers und stellen Sie sicher, dass Dateimetadaten (z. B. .git) und Sicherungsdateien nicht in Web-Roots vorhanden sind.
-
Protokollieren Sie Fehler bei der Zugriffskontrolle und benachrichtigen Sie Administratoren bei Bedarf (z. B. wiederholte Fehler).
-
Setzen Sie Ratenbegrenzung für API- und Controller-Zugriff, um den Schaden durch automatisierte Angriffstools zu minimieren.
-
Statusbehaftete Sitzungskennungen sollten nach dem Abmelden auf dem Server ungültig gemacht werden. Zustandslose JWT-Token sollten eher kurzlebig sein, damit das Zeitfenster für Angreifende minimiert wird. Für langlebigere JWTs wird dringend empfohlen, die OAuth-Standards zu befolgen, um den Zugriff zu widerrufen.
Entwickler und QA-Mitarbeiter sollten funktionale Zugriffskontrolleinheiten und Integrationstests durchführen.
Beispielhafte Angriffsszenarien
Szenario Nr. 1: Die Anwendung verwendet nicht überprüfte Daten in einem SQL-Aufruf, der auf Kontoinformationen zugreift:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
Angreifende ändern einfach den „acct“-Parameter des Browsers, um die gewünschte Kontonummer zu senden. Bei nicht korrekter Überprüfung kann die angreifende Person auf das Konto einer beliebigen Nutzerin/Nutzers zugreifen.
https://example.com/app/accountInfo?acct=notmyacct
Szenario Nr. 2: Eine angreifende Person erzwingt einfach die Suche nach Ziel-URLs. Für den Zugriff auf die Admin-Seite sind Admin-Rechte erforderlich.
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
Wenn eine nicht authentifizierte Benutzerin/Benutzer auf eine der Seiten zugreifen kann, liegt ein Fehler vor. Wenn ein Benutzerin/Benutzer ohne Administrationsrechte auf die Admin-Seite zugreifen kann, handelt es sich um einen Fehler.
Referenzen
- OWASP Proactive Controls: C7: Enforce Access Controls
- OWASP Application Security Verification Standard (ASVS): V4 Access Control
- OWASP Web Security Testing Guide: Authorization Testing
- OWASP Cheat Sheet Series: Authorization Cheat Sheet
- Portswigger Research: Exploiting CORS misconfigurations for Bitcoins and bounties
- OAuth 2.0: Revoking Access
Liste der zugeordneten CWEs
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
- CWE-23: Relative Path Traversal
- CWE-35: Path Traversal: '.../...//'
- CWE-59: Improper Link Resolution Before File Access ('Link Following')
- CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
- CWE-201: Insertion of Sensitive Information Into Sent Data
- CWE-219: Storage of File with Sensitive Data Under Web Root
- CWE-264: Permissions, Privileges, and Access Controls (CWE CATEGORY)
- CWE-275: Permission Issues (CWE CATEGORY)
- CWE-276: Incorrect Default Permissions
- CWE-284: Improper Access Control
- CWE-285: Improper Authorization
- CWE-352: Cross-Site Request Forgery (CSRF)
- CWE-359: Exposure of Private Personal Information to an Unauthorized Actor
- CWE-377: Insecure Temporary File
- CWE-402: Transmission of Private Resources into a New Sphere ('Resource Leak')
- CWE-425: Direct Request ('Forced Browsing')
- CWE-441: Unintended Proxy or Intermediary ('Confused Deputy')
- CWE-497: Exposure of Sensitive System Information to an Unauthorized Control Sphere
- CWE-538: Insertion of Sensitive Information into Externally-Accessible File or Directory
- CWE-540: Inclusion of Sensitive Information in Source Code
- CWE-548: Exposure of Information Through Directory Listing
- CWE-552: Files or Directories Accessible to External Parties
- CWE-566: Authorization Bypass Through User-Controlled SQL Primary Key
- CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
- CWE-639: Authorization Bypass Through User-Controlled Key
- CWE-651: Exposure of WSDL File Containing Sensitive Information
- CWE-668: Exposure of Resource to Wrong Sphere
- CWE-706: Use of Incorrectly-Resolved Name or Reference
- CWE-862: Missing Authorization
- CWE-863: Incorrect Authorization
- CWE-913: Improper Control of Dynamically-Managed Code Resources
- CWE-922: Insecure Storage of Sensitive Information
- CWE-1275: Sensitive Cookie with Improper SameSite Attribute