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
Germany/Projekte/Top 10 fuer Entwickler-2013/A1-Injection
← Top 10 | A2-Fehler in Authentifizierung und Session-Management → |
Anwendungs- spezifisch |
Ausnutzbarkeit EINFACH |
Verbreitung HÄUFIG |
Auffindbarkeit DURCHSCHNITTLICH |
Auswirkung SCHWERWIEGEND |
Anwendungs-/ Geschäftsspezifisch |
Jeder, der Daten, die nicht ausreichend geprüft werden, an das System übermitteln kann: externe und interne Nutzer sowie Administratoren. | Der Angreifer sendet einfache text-basierte Angriffe, die die Syntax des Zielinterpreters missbrauchen. Fast jede Datenquelle kann einen Injection-Vektor darstellen, einschließlich interner Quellen. | Injection-Schwachstellen tauchen auf, wenn eine Anwendung nicht vertrauenswürdige Daten an einen Interpreter weiterleitet. Sie sind weit verbreitet, besonders in veraltetem Code. Sie finden sich in SQL-, LDAP-, XPath und NoSQL-Anfragen, in Betriebssystembefehlen sowie in XML, SMTP-Headern, Parametern, etc. Injection-Schwachstellen lassen sich durch Code-Prüfungen einfach, durch externe Tests aber in der Regel nur schwer entdecken. Angreifer setzen dazu Scanner und Fuzzer ein. | Injection kann zu Datenverlust oder -verfälschung, Fehlen von Zurechenbarkeit oder Zugangssperre führen. Unter Umständen kann es zu einer vollständigen Systemübernahme kommen. | Der Wert betroffener Daten für das Unternehmen sowie die Laufzeitumgebung des Interpreters sind zu berücksichtigen. Daten können entwendet, verändert, gelöscht werden. Kann ein Image-Schaden entstehen? |
Mögliche Angriffsszenarien
Szenario 1: Die Anwendung nutzt ungeprüfte Eingabedaten bei der Konstruktion der verwundbaren SQL-Abfrage: String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") +"'";
Szenario 2: Blindes Vertrauen in den Einsatz eines Frameworks (hier z.B. Hibernate Query Language (HQL)): Query unsafeHQLQuery = session.createQuery("from accounts where custID='"+request.getParameter("id")+"'");
Der Angreifer verändert in beiden Fällen den 'id'-Parameter im Browser und sendet: ' or '1'='1. Zum Beispiel: Der Angreifer verändert den 'id'-Parameter im Browser und übermittelt: ' or '1'='1. http://example.com/app/accountView?id='
or '1'='1
Das ändert die Logik der Anfrage so, dass in diesem Fall alle Datensätze der Tabelle 'accounts' zurückgegeben werden. Schlimmstenfalls werden durch Injections Daten verändert oder sogar Stored Procedures gestartet. |
Wie kann ich 'Injection' verhindern?
Das Verhindern von Injection erfordert die konsequente Trennung von Eingabedaten und Befehlen.
Anmerkung: Die beschriebenen Maßnahmen sind auf dem (Anwendungs-)Server umzusetzen bzw. durchzusetzen, optional können sie teilweise zusätzlich auf dem Client (z.B. Eingabeprüfung per Java Skript) realisiert werden, um den Benutzer frühzeitig über Falscheingaben zu informieren. |
← Top 10 | A2-Fehler in Authentifizierung und Session-Management → |
