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"
m |
(Prepared style of 2013; 'SummaryTableHeaderBeginTemplate' nun mit transparenten Bildern (type=images), 'Top_10:SummaryTableTemplate' ersetzt einzelne 'SummaryTableValue-...'-Werte) |
||
Line 14: | Line 14: | ||
== A4 Unsichere direkte Objektreferenzen == | == A4 Unsichere direkte Objektreferenzen == | ||
− | + | {{Top_10_2010:SummaryTableHeaderBeginTemplate|type=images|year=2013|language=de}} | |
− | {{ | + | {{Top_10:SummaryTableTemplate|exploitability=1|prevalence=2|detectability=1|impact=2|language=de|year=2013}} |
− | {{ | ||
− | |||
− | |||
− | |||
{{Top_10_2010:SummaryTableHeaderEndTemplate}} | {{Top_10_2010:SummaryTableHeaderEndTemplate}} | ||
<td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>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?</td> | <td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}>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?</td> | ||
Line 29: | Line 25: | ||
{{Top_10_2010:SummaryTableEndTemplate}} | {{Top_10_2010:SummaryTableEndTemplate}} | ||
− | {{Top_10:SubsectionTableBeginTemplate|type=main}} {{ | + | {{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=4|year=2013|language=de}} |
Die Anwendung nutzt ungeprüfte Daten in einem SQL-Aufruf, der Account-Informationen abfragt: | Die Anwendung nutzt ungeprüfte Daten in einem SQL-Aufruf, der Account-Informationen abfragt: | ||
{{Top_10_2010:ExampleBeginTemplate}}String query = "SELECT * FROM accts WHERE account = ?";<br/> PreparedStatement pstmt = connection.prepareStatement(query , ... );<br/><span style="color:red">pstmt.setString( 1, request.getParameter("acct"));</span><br/>ResultSet results = pstmt.executeQuery();{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleBeginTemplate}}String query = "SELECT * FROM accts WHERE account = ?";<br/> PreparedStatement pstmt = connection.prepareStatement(query , ... );<br/><span style="color:red">pstmt.setString( 1, request.getParameter("acct"));</span><br/>ResultSet results = pstmt.executeQuery();{{Top_10_2010:ExampleEndTemplate}} | ||
Line 35: | Line 31: | ||
{{Top_10_2010:ExampleBeginTemplate}}<nowiki>http://example.com/app/accountInfo?acct=notmyacct</nowiki>{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleBeginTemplate}}<nowiki>http://example.com/app/accountInfo?acct=notmyacct</nowiki>{{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=4|year=2013|language=de}} |
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: | 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: | ||
# <b>Indirekte Objektreferenzen verwenden!</b> Dies verhindert den direkten Angriff auf nicht autorisierte Ressourcen. So sollte eine Auswahlbox mit sechs für den Nutzer verfügbaren Objekten die Ziffern 1 bis 6 als Referenzen enthalten, statt deren echte Datenbankschlüssel. Die Anwendung muss dann diese indirekten Objektreferenzen den echten Datenbankschlüsseln zuordnen. Die OWASP ESAPI enthält Referenzzuordnungen für sequentiellen wie wahlfreien Zugriff, die von Entwicklern zur Vermeidung direkter Referenzen genutzt werden können. | # <b>Indirekte Objektreferenzen verwenden!</b> Dies verhindert den direkten Angriff auf nicht autorisierte Ressourcen. So sollte eine Auswahlbox mit sechs für den Nutzer verfügbaren Objekten die Ziffern 1 bis 6 als Referenzen enthalten, statt deren echte Datenbankschlüssel. Die Anwendung muss dann diese indirekten Objektreferenzen den echten Datenbankschlüsseln zuordnen. Die OWASP ESAPI enthält Referenzzuordnungen für sequentiellen wie wahlfreien Zugriff, die von Entwicklern zur Vermeidung direkter Referenzen genutzt werden können. | ||
Line 43: | Line 39: | ||
= '''JAVA''' = | = '''JAVA''' = | ||
<!-- Beispiele für JAVA ---> | <!-- Beispiele für JAVA ---> | ||
− | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{ | + | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=4|year=2013|language=de}} |
====Zugriffe prüfen!==== | ====Zugriffe prüfen!==== | ||
{{Top_10_2010:ExampleBeginTemplate}} | {{Top_10_2010:ExampleBeginTemplate}} | ||
Line 95: | Line 91: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=4|year=2013|language=de}} |
====ESAPI==== | ====ESAPI==== | ||
Line 115: | Line 111: | ||
[http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/AccessReferenceMap.html '''Quelle: ESAPI''']<br/> | [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/AccessReferenceMap.html '''Quelle: ESAPI''']<br/> | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=4|year=2013|language=de}} |
{{Top_10_2010:ExampleBeginTemplate}} | {{Top_10_2010:ExampleBeginTemplate}} | ||
Line 121: | Line 117: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=4|year=2013|language=de}} |
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}} | {{Top_10_2010:SubSubsectionOWASPReferencesTemplate}} | ||
* [https://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference OWASP Top 10-2007 on Insecure Dir Object References] | * [https://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference OWASP Top 10-2007 on Insecure Dir Object References] | ||
Line 130: | Line 126: | ||
: [https://www.owasp.org/index.php/ASVS ASVS requirements area for Access Control (V4)]. | : [https://www.owasp.org/index.php/ASVS ASVS requirements area for Access Control (V4)]. | ||
− | {{ | + | {{Top_10_2010:SubSubsectionExternalReferencesTemplate|language=de}} |
* [http://cwe.mitre.org/data/definitions/639.html CWE Entry 639 on Insecure Direct Object References] | * [http://cwe.mitre.org/data/definitions/639.html CWE Entry 639 on Insecure Direct Object References] | ||
* [http://cwe.mitre.org/data/definitions/22.html CWE Entry 22 on Path Traversal] (Beispiel für einen Angriff über direkte Objektreferenzen) | * [http://cwe.mitre.org/data/definitions/22.html CWE Entry 22 on Path Traversal] (Beispiel für einen Angriff über direkte Objektreferenzen) | ||
Line 136: | Line 132: | ||
= '''dotNET''' = | = '''dotNET''' = | ||
− | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{ | + | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=4|year=2013|language=de}} |
<br/> | <br/> | ||
;(A) Methoden definieren (im Beispiel ohne Fehlerbehandlung) | ;(A) Methoden definieren (im Beispiel ohne Fehlerbehandlung) | ||
Line 182: | Line 178: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
[http://www.troyhunt.com/2010/09/owasp-top-10-for-net-developers-part-4.html '''Quelle: OWASP Top 10 for .NET developers part 4: Insecure direct object reference''']<br/> | [http://www.troyhunt.com/2010/09/owasp-top-10-for-net-developers-part-4.html '''Quelle: OWASP Top 10 for .NET developers part 4: Insecure direct object reference''']<br/> | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=4|year=2013|language=de}} |
{{Top_10_2010:ExampleBeginTemplate|year=2013}} | {{Top_10_2010:ExampleBeginTemplate|year=2013}} | ||
tbd | tbd | ||
Line 188: | Line 184: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=3|risk=4|year=2013|language=de}} |
tbd | tbd | ||
Text | Text | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=4|year=2013|language=de}} |
(ganze Breite) | (ganze Breite) | ||
Text | Text | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=4|year=2013|language=de}} |
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}} | {{Top_10_2010:SubSubsectionOWASPReferencesTemplate}} | ||
* [https://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference OWASP Top 10-2007 on Insecure Dir Object References] | * [https://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference OWASP Top 10-2007 on Insecure Dir Object References] | ||
Line 205: | Line 201: | ||
: [https://www.owasp.org/index.php/ASVS ASVS requirements area for Access Control (V4)]. | : [https://www.owasp.org/index.php/ASVS ASVS requirements area for Access Control (V4)]. | ||
− | {{ | + | {{Top_10_2010:SubSubsectionExternalReferencesTemplate|language=de}} |
* [http://cwe.mitre.org/data/definitions/639.html CWE Entry 639 on Insecure Direct Object References] | * [http://cwe.mitre.org/data/definitions/639.html CWE Entry 639 on Insecure Direct Object References] | ||
* [http://cwe.mitre.org/data/definitions/22.html CWE Entry 22 on Path Traversal] (Beispiel für einen Angriff über direkte Objektreferenzen) | * [http://cwe.mitre.org/data/definitions/22.html CWE Entry 22 on Path Traversal] (Beispiel für einen Angriff über direkte Objektreferenzen) | ||
Line 213: | Line 209: | ||
= '''Test''' = | = '''Test''' = | ||
<!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---> | <!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---> | ||
− | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{ | + | {{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=4|year=2013|language=de}} |
{{Top_10_2010:ExampleBeginTemplate|year=2013}} | {{Top_10_2010:ExampleBeginTemplate|year=2013}} | ||
tbd | tbd | ||
Line 219: | Line 215: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=4|year=2013|language=de}} |
{{Top_10_2010:ExampleBeginTemplate|year=2013}} | {{Top_10_2010:ExampleBeginTemplate|year=2013}} | ||
tbd | tbd | ||
Line 225: | Line 221: | ||
{{Top_10_2010:ExampleEndTemplate}} | {{Top_10_2010:ExampleEndTemplate}} | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=3|risk=4|year=2013|language=de}} |
tbd | tbd | ||
Text | Text | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=4|year=2013|language=de}} |
(ganze Breite) | (ganze Breite) | ||
Text | Text | ||
− | {{ | + | {{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=4|year=2013|language=de}} |
{{Top_10:SubsectionTableEndTemplate}} | {{Top_10:SubsectionTableEndTemplate}} | ||
<headertabs /> | <headertabs /> |
Revision as of 16:47, 21 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
Anwendungs- spezifisch |
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 public class InjectionChecker { public static void check(String value) throws InjectionCheckException { // see Topic A1 ... if(checkFailed){ throw new InjectionCheckException("..."); } } }
public class PermissionChecker { public void check(String username, Action action, Class<? extends Object> objectType, String objectId) throws PermissionCheckException{ ... if(checkFailed){ throw new PermissionCheckException("..."); } } }
// Parameter Wert aus dem Request abfragen String acct = request.getParameter("acct"); InjectionChecker.check(acct); |
Verteidigungs-Option 2 gegen 'Unsichere direkte Objektreferenzen':
ESAPI(Beispiel bisher fast unbearbeitet aus ESAPI übernimmen) => tbd Set fileSet = new HashSet(); |
Verteidigungs-Option 3 gegen 'Unsichere direkte Objektreferenzen':
|
Referenzen
OWASP
Für weitere Anforderungen an Zugangskontrollen siehe Andere
|
Verteidigungs-Option 1 gegen 'Unsichere direkte Objektreferenzen':
public static class IndirectReferenceMap {
}
service.GetCustomer('<%= IndirectReferenceMap.
public Customer GetCustomer(Guid indirectId) {
... Quelle: OWASP Top 10 for .NET developers part 4: Insecure direct object reference |
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
OWASP
Für weitere Anforderungen an Zugangskontrollen siehe 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) → |