Difference between revisions of "Germany/Projekte/Top 10 fuer Entwickler-2013/A4-Unsichere direkte Objektreferenzen"

From OWASP
Jump to: navigation, search
m (Added {{Top_10:SubsectionTableBeginTemplate}} + {{Top_10:SubsectionTableEndTemplate}})
m (Changed: Use of New Varaibles for 'Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate')
Line 29: Line 29:
 
{{Top_10_2010:SummaryTableEndTemplate}}
 
{{Top_10_2010:SummaryTableEndTemplate}}
  
{{Top_10:SubsectionTableBeginTemplate}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=1|risk=4|year=2010|language=de}}   
+
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=4|year=2010|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 35:
 
{{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_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=2|risk=4|year=2010|language=de}}  
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=4|year=2010|language=de}}  
 
Um unsichere direkte Objektreferenzen zu verhindern, muss der Schutz eines jeden Objektes (z.B. Objektnummer, Datei-name), das für Nutzer erreichbar ist, gewährleistet werden:
 
Um unsichere direkte Objektreferenzen zu verhindern, muss der Schutz eines jeden Objektes (z.B. Objektnummer, Datei-name), 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 43:
 
= '''JAVA''' =   
 
= '''JAVA''' =   
 
<!-- Beispiele für JAVA --->
 
<!-- Beispiele für JAVA --->
{{Top_10:SubsectionTableBeginTemplate}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=11|risk=4|year=2010|language=de}}
+
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=4|year=2010|language=de}}
  
 
{{Top_10_2010:ExampleBeginTemplate}}
 
{{Top_10_2010:ExampleBeginTemplate}}
Line 49: Line 49:
 
{{Top_10_2010:ExampleEndTemplate}}  
 
{{Top_10_2010:ExampleEndTemplate}}  
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=4|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=4|year=2010|language=de}}
  
 
{{Top_10_2010:ExampleBeginTemplate}}
 
{{Top_10_2010:ExampleBeginTemplate}}
Line 55: Line 55:
 
{{Top_10_2010:ExampleEndTemplate}}
 
{{Top_10_2010:ExampleEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=5|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=4|year=2010|language=de}}
  
 
{{Top_10_2010:ExampleBeginTemplate}}
 
{{Top_10_2010:ExampleBeginTemplate}}
Line 61: Line 61:
 
{{Top_10_2010:ExampleEndTemplate}}
 
{{Top_10_2010:ExampleEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=8|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=4|year=2010|language=de}}
 
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}
 
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}
 
* [[SQL_Injection_Prevention_Cheat_Sheet | OWASP SQL Injection Prevention Cheat Sheet]]
 
* [[SQL_Injection_Prevention_Cheat_Sheet | OWASP SQL Injection Prevention Cheat Sheet]]
Line 78: Line 78:
 
= '''Test''' =
 
= '''Test''' =
 
<!-- weitere Programmiersprachen oder evtl Anti-Beispiele --->
 
<!-- weitere Programmiersprachen oder evtl Anti-Beispiele --->
{{Top_10:SubsectionTableBeginTemplate}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=11|risk=4|year=2010|language=de}}
+
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=4|year=2010|language=de}}
 
{{Top_10_2010:ExampleBeginTemplate}}
 
{{Top_10_2010:ExampleBeginTemplate}}
 
tbd
 
tbd
Line 84: Line 84:
 
{{Top_10_2010:ExampleEndTemplate}}
 
{{Top_10_2010:ExampleEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=4|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=4|year=2010|language=de}}
 
{{Top_10_2010:ExampleBeginTemplate}}
 
{{Top_10_2010:ExampleBeginTemplate}}
 
tbd
 
tbd
Line 90: Line 90:
 
{{Top_10_2010:ExampleEndTemplate}}
 
{{Top_10_2010:ExampleEndTemplate}}
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=6|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=3|risk=4|year=2010|language=de}}
 
tbd
 
tbd
 
Text
 
Text
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=7|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=4|year=2010|language=de}}
 
(ganze Breite)
 
(ganze Breite)
 
Text
 
Text
  
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|number=9|risk=4|year=2010|language=de}}
+
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=left|risk=4|year=2010|language=de}}
 
{{Top_10:SubsectionTableEndTemplate}}
 
{{Top_10:SubsectionTableEndTemplate}}
 
<headertabs />
 
<headertabs />

Revision as of 03:43, 8 April 2013

← Top_10_fuer_Entwickler/A3_Fehler in Authentisierung und Session-Management
Top 10 fuer Entwickler-2013: Inhaltsverzeichnis

Die Top-10-Risiken

Top_10_fuer_Entwickler/A5_Cross-Site Request Forgery (CSRF) →

Seite in Bearbeitung (BAUSTELLE!!)

A4 Unsichere direkte Objektreferenzen

Bedrohungsquelle
Angriffsvektor
Schwachstellen
Technische Auswirkung
Auswirkung auf das Unternehmen
______ 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 Ob- jekte 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, Datei-name), das für Nutzer erreichbar ist, gewährleistet werden:

  1. Indirekte Objektreferenzen verwenden! 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.
  2. Zugriffe prüfen! Jeder Abruf direkter Objektreferenzen aus nicht vertrauenswürdigen Quellen muss eine Prüfung der Zugriffsberechtigung beinhalten, um die Autorisierung für das angefragte Objekt sicherzustellen.
[edit]

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 Authentisierung und Session-Management
Top 10 fuer Entwickler-2013: Inhaltsverzeichnis

Die Top-10-Risiken

Top_10_fuer_Entwickler/A5_Cross-Site Request Forgery (CSRF) →

© 2002-2013 OWASP Foundation This document is licensed under the Creative Commons Attribution-ShareAlike 3.0 license. Some rights reserved. CC-by-sa-3 0-88x31.png