In this article
So schützen Sie Node.js-Anwendungen vor Open-Redirect-Schwachstellen
Als Entwickler wissen wir: Sicheren Code zu schreiben, ist kein Luxus. Es ist eine Notwendigkeit. Unter den zahlreichen Sicherheitsproblemen, die Anwendungen beeinträchtigen können, nehmen Open-Redirect-Schwachstellen einen wichtigen Platz ein.
Open-Redirect-Schwachstellen entstehen, wenn eine Anwendung vom Nutzer bereitgestellte Daten in eine URL-Weiterleitung einbindet. Dadurch können Angreifer Opfer über die anfällige Anwendung auf Phishing- oder Malware-Websites umleiten. Bei Node.js-Anwendungen können diese Schwachstellen besonders schwerwiegende Folgen haben, da URLs häufig als Nutzereingaben für Geschäftslogik verarbeitet werden, etwa für die persönliche Homepage, das Profil in einem sozialen Netzwerk oder das Profilbild eines Nutzers.
In diesem umfassenden Leitfaden erfahren Sie mehr über Open-Redirect-Schwachstellen in Node.js. Mit diesen Best Practices können Sie auch Ihre Node.js-Anwendungen schützen.
Open-Redirect-Schwachstellen verstehen
Eine Open-Redirect-Schwachstelle entsteht, wenn eine Anwendung Nutzereingaben unsicher in das Ziel einer Weiterleitung einbindet. Dadurch können Angreifer arglose Nutzer von einer vertrauenswürdigen Website auf eine bösartige Website umleiten.
Das Verständnis von Open-Redirect-Schwachstellen ist ein wichtiger Aspekt der Anwendungssicherheit – sowohl beim Entwickeln von Node.js-Anwendungen als auch beim Programmieren von JavaScript für den clientseitigen Code im Browser. In diesem Abschnitt erklären wir, wie Sie solche Schwachstellen finden, welche Risiken damit verbunden sind und wie sie im Open Web Application Security Project (OWASP) beschrieben werden.
Nehmen wir zum Beispiel eine Node.js-Express-Anwendung mit der folgenden Route als Teil der Anwendungs-Middleware:
app.get('/home, function(req, res){
let redirectURL = req.query.url;
res.redirect(redirectURL);
});
Im obigen Express-Codebeispiel kann ein Nutzer zu jeder URL weitergeleitet werden, die im Abfrageparameter url übergeben wird. Eine solche Weiterleitung kann beispielsweise nützlich sein, um Nutzer zu einem Abrechnungs- oder Abonnementplan oder zu einem bestimmten Dashboard oder Profil weiterzuleiten. Angreifer können dies jedoch ausnutzen, indem sie eine URL erstellen, die zu einer bösartigen Website führt, und Nutzer dazu verleiten, ihr zu folgen.
So finden Sie eine Open-Redirect-Schwachstelle
Um eine Open-Redirect-Schwachstelle zu erkennen, müssen Sie verstehen, wie Ihre Anwendung Nutzereingaben verarbeitet – insbesondere dann, wenn sie für Weiterleitungen verwendet werden. Achten Sie bei Node.js-Anwendungen auf Methoden wie res.redirect() in Express, die möglicherweise ohne ordnungsgemäße Bereinigung der Nutzereingaben verwendet werden.
URL-Weiterleitungen werden in Node.js-Anwendungen aus verschiedenen Gründen häufig eingesetzt, zum Beispiel:
Nutzer abhängig vom verwendeten Gerät zu einer anderen Version der Website weiterleiten (z. B. zur mobilen oder Desktop-Version).
Die Authentifizierung handhaben und Nutzer nach erfolgreicher Anmeldung zurück zur ursprünglichen Seite leiten.
Nutzeraktivitäten oder Klicks zu Analysezwecken erfassen.
Der Missbrauch solcher Weiterleitungen kann jedoch zu einer Sicherheitslücke führen, die als Open-Redirect-Schwachstelle bekannt ist.
Snyk Code, die Code-Sicherheitsfunktion des Snyk-Tools, kann dabei erheblich helfen. Das Tool scannt Ihren Quellcode auf potenzielle Sicherheitsprobleme wie dieses, erstellt detaillierte Berichte und schlägt Korrekturen vor. Installieren Sie die VS-Code-Erweiterung und schützen Sie Ihren Code!
Open-Redirect-Schwachstellen bei OWASP
OWASP stuft Open-Redirect-Schwachstellen als erhebliche Bedrohung ein. Sie sind in der Liste der Sicherheitsrisiken aufgeführt, die Entwicklern bekannt sein sollten, was auf den potenziellen Schweregrad dieser Schwachstellenart hinweist.
Zu den Risiken und Auswirkungen von Open-Redirect-Schwachstellen gehören:
Phishing: Angreifer können Nutzer auf eine bösartige Website umleiten, die seriös aussieht, und sie dazu verleiten, vertrauliche Informationen preiszugeben.
Verbreitung von Malware: Angreifer können Nutzer auf eine Website mit Malware umleiten, was ohne deren Wissen automatische Downloads auslösen kann.
Reputationsschäden: Wird Ihre Anwendung als Quelle solcher Angriffe identifiziert, kann ihr Ruf erheblich Schaden nehmen.
Open-Redirect-Angriffe können unter anderem durch Abhängigkeiten von Open-Source-Komponenten Dritter in eine Codebasis gelangen. Mit Snyk Open Source können Sie Ihre Open-Source-Pakete auf Schwachstellen scannen und Empfehlungen zu deren Behebung erhalten, damit Ihre Anwendungen geschützt bleiben.
Sie können kostenlos damit beginnen, Ihre Anwendungen vor Open-Redirect-Schwachstellen zu schützen. Registrieren Sie sich bei Snyk.
Open-Redirect-Schwachstellen in Node.js-Anwendungen
Zur Erinnerung: Open-Redirect-Schwachstellen entstehen, wenn eine Anwendung nicht vertrauenswürdige Eingaben akzeptiert. Dadurch kann die Node.js-Webanwendung die Anfrage an eine URL aus der nicht vertrauenswürdigen Eingabe weiterleiten. In der Geschäftslogik von Node.js-Anwendungen ist es entscheidend, diese Schwachstellen in Routendefinitionen, Controllern und anderen Bereichen der URL-Verarbeitung zu verstehen und zu beheben, um eine sichere Umgebung zu gewährleisten.
Open-Redirect-Schwachstellen sind auch für Frontend-Anwendungen relevant, die Node.js serverseitig verwenden, um UI-Komponenten auf dem Server zu rendern und an den Client auszuliefern.
Open-Redirect-Schwachstellen in Next.js-Anwendungen mit serverseitigem Rendering (SSR)
Next.js ist ein beliebtes Framework für React-Anwendungen mit serverseitigem Rendering. Wie andere Node.js-Anwendungen können auch Next.js-Anwendungen anfällig für Open-Redirect-Angriffe sein.
In einer Next.js-Anwendung kann eine Open-Redirect-Schwachstelle auftreten, wenn die Anwendung serverseitige Props verwendet, um zum Zeitpunkt der Anfrage Daten abzurufen, und den Nutzer anschließend anhand dieser Daten weiterleitet. Zum Beispiel:
export async function getServerSideProps(context) {
const { req, res } = context
const target = req.headers.referer
if (target) {
res.writeHead(302, { Location: target })
res.end()
}
return { props: {} }
}
In diesem Codeausschnitt leitet die Anwendung den Nutzer an die URL im Header referer weiter. Wird dieser nicht ordnungsgemäß validiert, kann es zu Open-Redirect-Angriffen kommen.
Open-Redirect-Schwachstellen im Fastify-Webframework
Das einfachste Beispiel für eine Open-Redirect-Schwachstelle ist eine Weiterleitung an einen absoluten Pfad. Dabei handelt es sich um die einfachste Art, wie eine Fastify-Anwendung direkte Nutzereingaben verarbeiten kann. So sähe der zuvor erwähnte Express-Code im Fastify-Webframework aus:
const fastify = require('fastify')({ logger: true });
fastify.get('/home, (request, reply) => {
const target = request.query.target;
reply.redirect(target);
});
fastify.listen(3000, (err, address) => {
if (err) throw err;
fastify.log.info(`server listening on ${address}`);
});
In diesem Fastify-Beispiel besteht wie im Express-Code eine Open-Redirect-Schwachstelle. Sie entsteht, wenn die Anwendung den Nutzereingaben blind vertraut, um das Ziel einer URL-Weiterleitung zu bestimmen.
Sehen wir uns eine weitere Variante von URL-Weiterleitungen an:
fastify.get('/safeRedirect', (request, reply) => {
const target = request.query.target
if (isValidUrl(target)) {
// isValidUrl is a hypothetical function to validate the URL
reply.redirect(target)
} else {
reply.send({ error: 'Invalid URL' })
}
})In diesem Beispiel wird eine Form der Validierung (isValidUrl) hinzugefügt. Ist die Validierung jedoch nicht robust genug, finden Angreifer möglicherweise trotzdem einen Weg, sie zu umgehen. So könnte beispielsweise ein regulärer Ausdruck in isValid() fehlerhaft sein.
Sicherheitsrisiken durch Open-Redirect-Schwachstellen
Entwickler sollten sich der folgenden Sicherheitsrisiken bewusst sein, die zu Open-Redirect-Schwachstellen führen können:
Nutzereingaben, die die Weiterleitungs-URL bestimmen, werden nicht validiert oder bereinigt.
Weiterleitungen zu beliebigen externen Domains sind ohne Zulassungsliste möglich.
Wird die Weiterleitungs-URL nicht kodiert, kann dies zu Schwachstellen wie Cross-Site-Scripting (XSS) führen.
Open-Redirect-Schwachstellen mit Snyk erkennen und beheben
Snyk Code und Snyk Open Source sind Sicherheitstools für Entwickler, die dabei helfen, Open-Redirect-Schwachstellen in Ihren Node.js-Anwendungen zu erkennen und zu beheben. Diese Tools scannen Ihren Quellcode, Open-Source-Pakete, Container-Images und Cloud-Konfigurationen auf Schwachstellen.
Snyk Code ist eine leistungsstarke Lösung, die dabei hilft, Schwachstellen in Ihrem Code zu finden und zu beheben. Sie liefert präzise Ergebnisse mit weniger falsch positiven Treffern, sodass sich Entwickler leichter auf die kritischsten Probleme konzentrieren können.
Snyk Open Source hilft Ihnen, bekannte Schwachstellen in Open-Source-Abhängigkeiten von Node.js und JavaScript zu finden, zu beheben und zu überwachen.
Hier sehen Sie, wie Sie mit Snyk Ihre Node.js- oder Next.js-Anwendung auf Open-Redirect-Schwachstellen scannen können.
Integrieren Sie zunächst Snyk in Ihre Entwicklungsumgebung. Installieren Sie dazu die Snyk-CLI und führen Sie einen einfachen Befehl aus:
npm install -g snykNach der Installation der Snyk-CLI können Sie Ihre Node.js-Anwendung mit einem Test auf Schwachstellen prüfen:
snyk testDieser Befehl scannt Ihre Anwendung und erstellt einen Bericht über alle bekannten Schwachstellen, einschließlich Open-Redirect-Schwachstellen.
Snyk erkennt Schwachstellen und gibt konkrete Hinweise zu deren Behebung. Wird beispielsweise eine Open-Redirect-Schwachstelle erkannt, informiert Snyk Sie über die genaue Stelle der Schwachstelle in Ihrem Code, den Schweregrad und ausführliche Empfehlungen zur Behebung, wie hier:
✗ Open Redirect [Medium Severity][https://snyk.io/vuln/SNYK-JS-REDIRECT-569620] in redirect@1.0.0
introduced by your-app@1.0.0 > redirect@1.0.0
This issue was fixed in versions: 2.0.0Tools wie Snyk helfen Entwicklern, sicheren Code zu schreiben und Schwachstellen zu erkennen. Snyk ist ein auf Entwickler ausgerichtetes Sicherheitstool, das Quellcode, Open-Source-Pakete, Container-Images und Cloud-Konfigurationen auf versteckte Schwachstellen scannt.
Snyk unterstützt zahlreiche Programmiersprachen und Frameworks, darunter insbesondere JavaScript und Node.js.
Wenn Sie als Entwickler Ihre Anwendungen schützen und die mit Open-Redirect-Schwachstellen verbundenen Risiken mindern möchten, registrieren Sie sich noch heute bei Snyk und verbessern Sie Ihre Anwendungssicherheit.
Sichern Sie Ihren Code während der Entwicklung
Snyk scannt Ihren Code auf Qualitäts- und Sicherheitsprobleme und gibt Ihnen direkt in Ihrer IDE Empfehlungen zur Behebung.