EN

Was ist ein Javascript-Injektion-Angriff und wie wird er durchgeführt?

In diesem Artikel:

Eine Injektionsschwachstelle ermöglicht es einem böswilligen Akteur, über eine andere Anwendung schädlichen Code in ein System einzuschleusen. Hacker verwenden Injektionsangriffe in der Regel, um auf die Backend-Serverkonfiguration, Shell-Befehle oder Betriebssystemaufrufe zuzugreifen, wenn die Anwendung die Benutzereingaben nicht ausreichend validiert. Da die Webanwendung nicht vertrauenswürdige Benutzerdaten als Teil einer Abfrage oder eines Befehls akzeptiert, ermöglichen Injektionsangriffe die Ausführung von beliebigem dynamischen Code und das Hijacking von Benutzersitzungen.

In diesem Artikel wird erörtert, wie Angreifer JavaScript-Injektionen durchführen, um Webseiten zu manipulieren und Ressourcenparameter zu ändern, und es werden Maßnahmen zur Verhinderung solcher Angriffe erläutert.

Was ist ein JavaScript-Injektionsangriff?

Bei einem JavaScript-Injection-Angriff fügt ein Angreifer bösartigen Code direkt in das clientseitige JavaScript ein. Dieser Code wird gestartet und gerendert, wenn das Opfer die Website mit dem bösartigen Skript in seiner Client-Anwendung/Browser lädt. Ein Angreifer kann sich auf verschiedene Techniken stützen, um bösartigen Code in eine anfällige Website einzuschleusen, darunter:

  • Verwendung der Entwicklerkonsole des Browsers, um JavaScript einzufügen oder den Quellcode zu ändern
  • Hinzufügen eines Skripts durch Eingabe des JavaScript: SCRIPT-Element in der Adressleiste des Clients
  • Verwendung von Cross-Site-Scripting, um Skripte in ein Kommentar- oder Eingabeformularfeld einzufügen 

Ein Exploit-Skript ist so konzipiert, dass es je nach dem genauen Inhaltstyp verschiedene Aktionen ausführt. Zu den bösartigen Angriffen durch JavaScript-Injektionscode gehören:

  • Erlangung sensibler Benutzerinformationen, wenn sie Informationen in ein Eingabefeld eingeben
  • Erzwingen unerwünschter Aktionen im Namen des Opfers
  • Entführung der kompletten Benutzersitzung
  • Manipulation von Website-Parametern

Es ist bekannt, dass JavaScript-Injection-Exploits schwerwiegende Folgen haben können, wie z. B:

  • Verlust sensibler Inhalte – Angreifer können JavaScript-Injection-Schwachstellen missbrauchen, um sensible persönliche Informationen wie Name, Adresse und Kreditkartendaten zu stehlen
  • Umsatzeinbußen – Erfolgreiche JavaScript-Injection-Angriffe haben Auswirkungen auf das Benutzererlebnis, die Unterbrechung des Benutzerverkehrs, das Vertrauen in den betroffenen Dienst und finanzielle Verluste

Compliance-Probleme – Der Verlust sensibler Daten kann für Unternehmen zu Strafen und Klagen führen, die durch Sicherheits- und Compliance-Richtlinien wie PCI-DSS und GDPR erzwungen werden.

Beispiele für JavaScript-Injektion

Die verschiedenen Arten von JavaScript-Injektionsangriffen basieren auf der Nutzlast und dem genauen Inhaltstyp. Häufige Beispiele für Injektionsangriffe sind:

Dependency Injection in JavaScript

JavaScript Dependency Injection (DI) ist ein Web-Design-Pattern, das die Übergabe von Abhängigkeiten ermöglicht, ohne sie innerhalb von Klassen oder Funktionen zu instanziieren. DI vereinfacht die Entwicklung und das Testen von Quellcode, da die Abhängigkeiten von externen Ressourcen bereitgestellt und geladen werden. 

Ein JavaScript-Abhängigkeitsinjektions-Verwirrungsangriff zielt auf das DI-Framework ab, wobei der Angreifer die Website dazu bringt, benutzerdefinierte Skripte aus dem von ihm gewählten Repository zu ziehen. Bei der Installation von Paketen für JavaScript-Anwendungen wählen die Installateure in der Regel die neueste Version, wenn sie die Wahl zwischen zwei Versionen derselben Datei haben. Angenommen, ein böswilliger Benutzer kann den Namen einer internen Abhängigkeit oder Skriptdatei in Erfahrung bringen. 

In diesem Fall kann er bösartigen Anwendungscode mit einer höheren Versionsnummer in einem öffentlichen Repository veröffentlichen, auf das als package.json oder eine andere Quellcodedatei verwiesen wird. Bei der Installation von Paketen oder Abhängigkeiten wird der bösartige Code in den Quellcode der Anwendung injiziert, wenn der Anwendungsinstaller die aktualisierte, geänderte Version auswählt. 

JavaScript-HTML-Injektionsangriff

Die meisten Anwendungen nutzen mehrere Methoden zur Einspeisung von HTML-Markup über JavaScript. Bei der JavaScript-Injektion über HTML wird ausführbarer HTML-Code über ein anfälliges Eingabefeld eingeschleust. Der HTML-Injection-Angriff zielt auf den HTML-Inhalt des Browsers und interpretiert ihn auf der Client-Seite. Ein gängiger Ansatz von Hackern ist das Einbetten von bösartigen Skript-Tags in die Website. Da der Browser standardmäßig in HTML eingebettete Skripte interpretiert, führen die Browser-Plugins die bösartigen Skripte aus.

HTML-Angriffe mit JavaScript-Injektion zielen in der Regel auf Foren, Kommentarbereiche oder Anwendungsschnittstellen ab, die das Einfügen von Benutzereingaben ohne Bereinigung ermöglichen. Durch solche Angriffe verschaffen sich Angreifer Zugang zu den Sitzungscookies des Benutzers, verändern das Erscheinungsbild der Website oder fügen Ereignislisten hinzu, die die Tastenanschläge des Benutzers an einen von ihnen kontrollierten Server senden.

Übliche Tags zum Einbetten von HTML-Code in JavaScript-Anwendungen sind u. a:

  • <SCRIPT>
  • <OBJECT>
  • <APPLET>
  • <EMBED>
  • <FK>
  • <LI>
  • <BR>
  • <DIV>
  • <TITLE>

Javascript-Code-Injektion

JavaScript-Code-Injection-Angriffe sind bei Anwendungen, die Benutzereingaben akzeptieren und auf der Serverseite ausführen, weit verbreitet. Um solche Angriffe zu orchestrieren, müssen Angreifer die Konsole der Entwicklertools oder ein Eingabefeld verwenden, um das bösartige Skript bereitzustellen, das zur dynamischen Codeausführung an den Server weitergeleitet wird.

Der folgende Codeschnipsel zeigt ein Beispiel für eine anfällige Website:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Darwin Website</title>
</head><body>
    <input type="button" onclick="randomScript()">
</body>
</html>

In einem solchen Codemuster kann ein Angreifer bösartigen Code an die Zufallsfunktion randomScript() übergeben, um einen Ereignis-Listener einzurichten. Dies wird erreicht, indem ein benutzerdefiniertes Skript in einer JavaScript- und JQuery-kompatiblen Konsole erstellt wird, um das onclick-Ereignis zu ändern.

Der Code wird ähnlich aussehen wie:

function randomScript(){
  alert("Test!");
}

Anschließend müssen alle Hacker das Schaltflächenelement nach dem Öffnen der Webseite untersuchen. Dadurch erhält der Hacker Zugriff auf eine Registerkarte für Ereignislisten, die den von der Funktion randomScript() ausgeführten Code anzeigt.

Javascript-SQL-Injektion

Ein JavaScript-SQL-Injection-Angriff wird ausgeführt, indem Fehler bei der Eingabevalidierung ausgenutzt werden, um bösartige SQL-Abfragen in die Anwendung einzuschleusen. Dadurch werden die ursprünglichen Datenbankabfragen verändert, was es dem Angreifer ermöglicht, sensible Inhalte zu lesen, Datenbankeinträge zu ändern/löschen oder das Serververhalten zu verändern. 

Angenommen, eine Node.js-Webanwendung verwendet einen Suchbegriff, um eine Abfrage zu erstellen. Eine verwundbare Anwendung kann Literal-Strings verwenden, um den Suchbegriff direkt in den Code-String einzubinden, wie in der Abbildung gezeigt:

const query = `SELECT * FROM Repository WHERE TAG = '${userQuery}' AND public = 1`;

Gemäß dem obigen Abfragekonstrukt würde der SQL-Abfrage-String für die Suche nach dem Begriff Darwin etwa so aussehen:

SELECT * FROM Repository WHERE TAG = 'darwin' AND public = 1;

Ein Angreifer kann den böswilligen Suchbegriff darwin‘ ;- eingeben, wodurch die SQL-Anweisung zu folgender Anweisung geändert wird:

SELECT * FROM Repository WHERE TAG = 'darwin';--' AND public = 1;

Dadurch werden alle Teile nach den –Zeichen auskommentiert, so dass der ausgeführte SQL-Befehl in etwa so aussieht:

SELECT * FROM Repository WHERE TAG = 'darwin';

Da dadurch die zusätzliche Klausel entfernt wird, die die Offenlegung privater Repositorys in der Antwort des Datenbankservers verhindert, kann ein Angreifer Zugang zu Quellcode, Serverkonfigurationsdateien und anderem geistigen Eigentum des Unternehmens erhalten.

Wann haben Sie das letzte Mal die Sicherheitsstufe Ihrer JavaScript-Anwendung überprüft?

Wie verhindert man JavaScript Injection?

Da es verschiedene Ansätze zur Verhinderung von JavaScript-Injection gibt, kann jede Methode nur für eine bestimmte Sicherheitslücke oder Angriffsart gelten. Im folgenden Abschnitt werden die beiden am häufigsten genutzten Methoden zur Verhinderung von JavaScript-Injektionen erläutert.

Verhinderung von JavaScript-SQL-Injektionen

Einige Methoden zur Verhinderung von SQL-Injections in JavaScript-Anwendungen sind:

  • Validierung und Maskierung von Werten auf der Ebene der Benutzereingabe und der Datenkontrolle
  • Verwendung von Namens- und Abfrageplatzhaltern, um Benutzereingaben zu umgehen, bevor sie in die SQL-Abfrage extrapoliert werden
  • Abfrageumfang und Typüberprüfung

Verhinderung von JavaScript-Code-Injection-Angriffen

Zu den vorbeugenden Maßnahmen gegen JavaScript-Code-Injection-Angriffe gehören:

  • Vermeidung der Verwendung von unsicheren Zeichen und Funktionen, einschließlich der Anweisungen eval(), setInterval(), setTimeout() und Funktionskonstruktoren im Eingabefeld des Benutzers
  • Vermeidung der Ausführung von dynamischem Code, wenn nötig
  • Erstellung einer Whitelist von Eingabewerten, aus der die Benutzer wählen können
  • Einsatz einer Web Application Firewall (WAF) zur Erkennung von Code-Strings von böswilligen Benutzern
  • Sperren des Interpreters der Browseranwendung und Begrenzung seiner Kapazitäten auf das von der Webserverkonfiguration geforderte Minimum
  • Verwendung eines Sicherheits-Linters zur Durchsetzung eines sicheren Codestils

FAQs

Was ist der Unterschied zwischen JavaScript-Injection und Cross-Site-Scripting?

Es gibt mehrere Möglichkeiten der JavaScript-Injektion, aber Cross-Site-Scripting ist eine davon. XSS-Angriffe ermöglichen es einem böswilligen Akteur, Skripte in Webseiten einzuschleusen, die von legitimen Nutzern aufgerufen werden, und so Sicherheitskontrollen wie die Same-Origin-Policy zu umgehen. JavaScript-Injektion hingegen umfasst eine Vielzahl von Sicherheitslücken, die es dem Angreifer ermöglichen, JavaScript in einem Browser auszuführen, in der Regel um Sitzungsinformationen zu extrahieren und an eine Website seiner Wahl zu senden.

Warum ist JavaScript anfälliger für Diebstahl?

Da JavaScript auf der Client-Seite ausgeführt wird, gehört es zu den am stärksten gefährdeten Programmiersprachen. Die Skripte sind öffentlich lesbar, da JavaScript nicht als Binärdatei (Maschinensprache) kompiliert ist. Außerdem interagiert JavaScript mit dem Document Object Model der Webseite, was es böswilligen Akteuren ermöglicht, bösartige Skripte einzuschleusen und sie im Browser des Opfers auszuführen.

Erhalten Sie jetzt kostenlos einen schnellen Sicherheitsbericht für Ihre Website

Wir analysieren derzeit https://example.com
Wir scannen derzeit https://example.com
Status des Scans: In Bearbeitung
Scan target: http://example.com/laskdlaksd/12lklkasldkasada.a
Datum: 27/05/2023
Crashtest Security Suite prüft auf:
Information disclosure Known vulnerabilities SSL misconfiguration Open ports
Scanauftrag ausfüllen
Bitte geben Sie Ihre Daten ein, um die schnelle Sicherheitsüberprüfung zu erhalten.
Ein Sicherheitsspezialist analysiert gerade Ihren Scan-Bericht.
Bitte geben Sie Ihre Telefon-/Handynummer an, damit wir Ihre Identität überprüfen können:
Vielen Dank.
Wir haben Ihren Antrag erhalten.
Sobald Ihr Sicherheitsaudit fertig ist, werden wir Sie benachrichtigen.