This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
Difference between revisions of "Germany/Projekte/Top 10 fuer Entwickler-2013/A4-Unsichere direkte Objektreferenzen"
(objectType angepasst, Untertitel hinzugefügt) |
(Funktionalität in Helper Klassen ausgelagert, optische Anpassung zur Strukturierung) |
||
Line 46: | Line 46: | ||
====Zugriffe prüfen!==== | ====Zugriffe prüfen!==== | ||
{{Top_10_2010:ExampleBeginTemplate}} | {{Top_10_2010:ExampleBeginTemplate}} | ||
− | // | + | InjectionChecker für Parameter Prüfung |
− | + | class InjectionChecker { | |
− | + | public static void check(String value){ | |
− | + | // see Topic A1 | |
+ | ... | ||
+ | if(checkFailed){ | ||
+ | throw new InjectionCheckException("..."); | ||
+ | } | ||
+ | } | ||
+ | } | ||
<br> | <br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
<br> | <br> | ||
− | + | PermissionChecker für Prüfungung der Zugriffsrechte | |
− | // | + | class PermissionChecker { |
+ | public void check(String username, Action action, Class<? extends Object> objectType, String objectId){<br> | ||
+ | ... | ||
+ | if(checkFailed){ | ||
+ | throw new PermissionCheckException("..."); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | <br> | ||
+ | <br> | ||
+ | Pseudo Code für Zugriffsprüfung bei direkten Objektreferenzen | ||
+ | // get request parameter | ||
+ | String acct = request.getParameter("acct"); | ||
+ | InjectionChecker.check(acct); | ||
+ | <br> | ||
+ | // collect infos for permission check | ||
+ | String username = getUsername(request); | ||
+ | Action action = Action.READ; // (e.g. READ, WRITE, DELETE) | ||
+ | Class<? extends Object> objectType = ObjectBean.class; | ||
+ | String objectId = acct; | ||
+ | <br> | ||
+ | PermissionChecker permissionChecker = getPermissionChecker(); | ||
+ | check(username, action, objectType, objectId); | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
Revision as of 14:05, 15 April 2013
← Top_10_fuer_Entwickler/A3_Fehler in Authentifizierung und Session-Management | Top_10_fuer_Entwickler/A5_Cross-Site Request Forgery (CSRF) → |
Seite in Bearbeitung (BAUSTELLE!!)
A4 Unsichere direkte Objektreferenzen
______ | Ausnutzbarkeit EINFACH |
Verbreitung HÄUFIG |
Auffindbarkeit EINFACH |
Auswirkung MITTEL |
Application / Business Specific |
Denken Sie an verschiedene Typen von Nutzern, die auf Ihr System zugreifen. Gibt es Nutzer, die nur eingeschränkten Zugriff auf bestimmte Daten Ihres Systems haben sollen? | Der Angreifer ist autorisiert, auf ein Systemobjekt zuzugreifen. Durch einfache Änderung eines Parameters kann er auf Objekte zugreifen, für die er nicht autorisiert ist. | Webanwendungen nutzen oft den internen Namen oder die Kennung eines Objektes, um auf dieses zu verweisen. Anwendungen prüfen dabei nicht immer, ob der Nutzer für den Zugriff auf diese autorisiert ist. Dies führt zu unsicheren direkten Objektreferenzen. Tester können Parameter ändern, um diese Schwachstellen zu entdecken. Code-Analysen zeigen schnell, ob die Autorisierung in geeigneter Weise geprüft wird. | Diese Schwachstelle gefährdet alle Daten, die via Parameter referenziert werden können. Angreifer können auf alle verfügbaren Daten dieser Art zugreifen, außer der Namensraum ist dünn besetzt. | Prüfen Sie sorgfältig den geschäftlichen Wert ungeschützt verfügbarer Daten. Berücksichtigen Sie auch die geschäftlichen Auswirkungen, die mit der Veröffentlichung der Schwachstelle verbunden sein können. |
Mögliche Angriffsszenarien
Die Anwendung nutzt ungeprüfte Daten in einem SQL-Aufruf, der Account-Informationen abfragt: String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query , ... ); pstmt.setString( 1, request.getParameter("acct")); ResultSet results = pstmt.executeQuery(); Ein Angreifer ändert den Parameter ‘acct’ im Browser, um beliebige Zugangsnummern abzufragen. Wenn keine Prüfung erfolgt, können Angreifer nicht nur auf ihren eigenen, sondern auf jeden gewünschten Account Zugriff erhalten. http://example.com/app/accountInfo?acct=notmyacct
|
Wie kann ich 'Unsichere direkte Objektreferenzen' verhindern?
Um unsichere direkte Objektreferenzen zu verhindern, muss der Schutz eines jeden Objektes (z.B. Objektnummer, Dateiname), das für Nutzer erreichbar ist, gewährleistet werden:
|
Verteidigungs-Option 1 gegen 'Unsichere direkte Objektreferenzen':
Zugriffe prüfen!InjectionChecker für Parameter Prüfung class InjectionChecker { public static void check(String value){ // see Topic A1 ... if(checkFailed){ throw new InjectionCheckException("..."); } } }
class PermissionChecker { public void check(String username, Action action, Class<? extends Object> objectType, String objectId){
// get request parameter String acct = request.getParameter("acct"); InjectionChecker.check(acct); |
Verteidigungs-Option 2 gegen 'Unsichere direkte Objektreferenzen':
|
Verteidigungs-Option 3 gegen 'Unsichere direkte Objektreferenzen':
|
Referenzen
OWASP
Andere |
Verteidigungs-Option 1 gegen 'Unsichere direkte Objektreferenzen':
tbd Text |
Verteidigungs-Option 2 gegen 'Unsichere direkte Objektreferenzen':
tbd Text |
Verteidigungs-Option 3 gegen 'Unsichere direkte Objektreferenzen':
tbd Text | |
Auswirkung(en) auf den Benutzer
(ganze Breite) Text |
Referenzen
|
← Top_10_fuer_Entwickler/A3_Fehler in Authentifizierung und Session-Management | Top_10_fuer_Entwickler/A5_Cross-Site Request Forgery (CSRF) → |