In this article
Comment sécuriser les applications Node.js contre les vulnérabilités de redirection ouverte
En tant que développeurs, nous savons qu’écrire du code sécurisé n’est pas un luxe, mais une nécessité. Parmi les nombreux problèmes de sécurité auxquels les applications peuvent être confrontées, les vulnérabilités de redirection ouverte occupent une place importante.
Les vulnérabilités de redirection ouverte surviennent lorsqu’une application intègre des données fournies par l’utilisateur dans une URL de redirection. Des utilisateurs malveillants peuvent alors rediriger les victimes vers des sites d’hameçonnage ou diffusant des logiciels malveillants en passant par l’application vulnérable. Dans les applications Node.js, ces vulnérabilités peuvent causer de sérieux dégâts, car vous êtes souvent amené à traiter des URL fournies par les utilisateurs à des fins métier, par exemple pour leur page d’accueil personnelle, leur profil sur un réseau social ou leur photo de profil.
Consultez ce guide complet pour en savoir plus sur les vulnérabilités de redirection ouverte dans Node.js. Ces bonnes pratiques peuvent également vous aider à sécuriser vos applications Node.js.
Comprendre les vulnérabilités de redirection ouverte
Une vulnérabilité de redirection ouverte survient lorsqu’une application intègre de manière non sécurisée une entrée utilisateur à la destination d’une redirection. Des attaquants peuvent ainsi rediriger des utilisateurs qui ne se méfient pas d’un site de confiance vers un site malveillant.
Comprendre les vulnérabilités de redirection ouverte est essentiel pour la sécurité des applications Node.js ou du code JavaScript côté client exécuté dans le navigateur. Dans cette section, nous vous expliquons comment les repérer, quels sont les risques et comment le projet Open Web Application Security Project (OWASP) les décrit.
Prenons l’exemple d’une application Node.js Express dont le middleware définit la route suivante :
app.get('/home, function(req, res){
let redirectURL = req.query.url;
res.redirect(redirectURL);
});
Dans l’exemple de code Express ci-dessus, un utilisateur peut être redirigé vers n’importe quelle URL transmise dans le paramètre de requête url. Cette redirection peut s’avérer utile pour l’envoyer vers une page de facturation ou un forfait d’abonnement, un tableau de bord spécifique ou une page de profil utilisateur. Cependant, des attaquants peuvent exploiter cette possibilité en créant une URL qui redirige vers un site malveillant et en incitant les utilisateurs à cliquer dessus.
Comment repérer une vulnérabilité de redirection ouverte
Pour détecter une vulnérabilité de redirection ouverte, il faut comprendre comment votre application traite les entrées utilisateur, en particulier lorsqu’elles servent à effectuer une redirection. Dans les applications Node.js, prêtez attention aux méthodes comme res.redirect() dans Express, qui peuvent être utilisées sans assainir correctement les entrées utilisateur.
Dans les applications Node.js, les redirections d’URL sont couramment utilisées pour différentes raisons, par exemple :
Rediriger les utilisateurs vers une autre version du site (mobile ou ordinateur, par exemple) en fonction de leur appareil.
Gérer l’authentification en redirigeant les utilisateurs vers la page d’origine après leur connexion.
Suivre les activités ou les clics des utilisateurs à des fins d’analyse.
Cependant, une mauvaise utilisation de ces redirections peut entraîner une faille de sécurité appelée vulnérabilité de redirection ouverte.
Snyk Code, la solution de sécurité du code de Snyk, peut vous apporter une aide précieuse. Elle analyse votre code source à la recherche de problèmes de sécurité potentiels comme celui-ci, fournit des rapports détaillés et suggère des correctifs. Installez l’extension VS Code et commencez à sécuriser votre code !
Les vulnérabilités de redirection ouverte selon l’OWASP
L’OWASP reconnaît les vulnérabilités de redirection ouverte comme une menace importante. Elles figurent dans sa liste des risques de sécurité que les développeurs doivent connaître, ce qui souligne la gravité potentielle de ce type de vulnérabilité.
Voici quelques-uns des risques et des conséquences des vulnérabilités de redirection ouverte :
Hameçonnage : les attaquants peuvent rediriger les utilisateurs vers un site malveillant qui semble légitime et les inciter à communiquer des informations sensibles.
Diffusion de logiciels malveillants : un attaquant peut rediriger les utilisateurs vers un site hébergeant des logiciels malveillants, ce qui peut déclencher des téléchargements automatiques à leur insu.
Atteinte à la réputation : si votre application est identifiée comme la source de telles attaques, sa réputation peut être gravement ternie.
Les dépendances open source tierces peuvent introduire des attaques par redirection ouverte dans votre base de code. Dans ce cas, Snyk Open Source vous permet d’analyser vos packages open source à la recherche de vulnérabilités et de recevoir des conseils pour les corriger, afin de sécuriser vos applications.
Vous pouvez commencer gratuitement à protéger vos applications contre les vulnérabilités de redirection ouverte : inscrivez-vous à Snyk.
Les vulnérabilités de redirection ouverte dans les applications Node.js
Pour rappel, les vulnérabilités de redirection ouverte surviennent lorsqu’une application accepte des entrées non fiables. L’application web Node.js peut alors rediriger la requête vers une URL contenue dans ces entrées. Dans la logique métier des applications Node.js, il est essentiel de comprendre et d’atténuer ces vulnérabilités dans les définitions de routes, les contrôleurs et les autres traitements d’URL afin de préserver un environnement sécurisé.
Les vulnérabilités de redirection ouverte concernent également les applications frontend qui utilisent Node.js côté serveur pour effectuer le rendu des composants d’interface utilisateur avant de les transmettre au client.
Les vulnérabilités de redirection ouverte dans les applications Next.js avec rendu côté serveur (SSR)
Next.js est un framework populaire pour les applications React rendues côté serveur. Comme les autres applications Node.js, les applications Next.js peuvent également être vulnérables aux attaques par redirection ouverte.
Dans une application Next.js, une vulnérabilité de redirection ouverte peut survenir lorsque l’application utilise des propriétés côté serveur pour récupérer des données au moment de la requête, puis redirige l’utilisateur en fonction de ces données. Par exemple :
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: {} }
}
Dans cet extrait de code, l’application redirige l’utilisateur vers l’URL indiquée dans l’en-tête referer. Si cette valeur n’est pas correctement validée, elle peut donner lieu à des attaques par redirection ouverte.
Les vulnérabilités de redirection ouverte dans le framework web Fastify
L’exemple le plus simple de vulnérabilité de redirection ouverte est une redirection vers un chemin absolu, la forme la plus élémentaire de traitement direct des entrées utilisateur par une application Fastify. Voici à quoi ressemblerait le code Express présenté précédemment dans le framework web Fastify :
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}`);
});
Dans cet exemple Fastify, comme dans le code Express, il existe une vulnérabilité de redirection ouverte. Elle survient lorsque l’application fait aveuglément confiance aux entrées utilisateur pour déterminer la destination de la redirection d’URL.
Examinons une autre variante des redirections d’URL :
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' })
}
})Dans cet exemple, une forme de validation (isValidUrl) est ajoutée. Toutefois, si cette validation n’est pas suffisamment robuste, les attaquants peuvent tout de même trouver un moyen de la contourner. Par exemple, le motif d’expression régulière utilisé dans isValid() peut être défectueux.
Risques de sécurité liés aux vulnérabilités de redirection ouverte
Les développeurs doivent connaître les risques de sécurité suivants, susceptibles d’entraîner des vulnérabilités de redirection ouverte :
Ne pas valider ni assainir les entrées utilisateur qui déterminent l’URL de redirection.
Autoriser les redirections vers n’importe quel domaine externe sans liste d’autorisation.
Ne pas encoder l’URL de redirection peut entraîner des vulnérabilités telles que les scripts intersites (XSS).
Détectez et corrigez les vulnérabilités de redirection ouverte avec Snyk
Snyk Code et Snyk Open Source sont des outils de sécurité destinés aux développeurs qui peuvent aider à détecter et à corriger les vulnérabilités de redirection ouverte dans vos applications Node.js. Ils analysent votre code source, vos packages open source, vos images de conteneurs et les erreurs de configuration cloud à la recherche de vulnérabilités.
Snyk Code est une solution puissante qui vous aide à détecter et à corriger les vulnérabilités de votre code. Elle fournit des résultats précis avec moins de faux positifs, afin que les développeurs puissent se concentrer sur les problèmes les plus critiques.
Snyk Open Source vous aide à détecter, corriger et surveiller les vulnérabilités connues dans les dépendances open source Node.js et JavaScript.
Voici comment utiliser Snyk pour analyser votre application Node.js ou Next.js à la recherche de vulnérabilités de redirection ouverte.
Commencez par intégrer Snyk à votre environnement de développement. Pour cela, installez la CLI Snyk et exécutez une simple commande :
npm install -g snykAprès avoir installé la CLI Snyk, vous pouvez lancer un test de votre application Node.js pour rechercher les vulnérabilités :
snyk testCette commande analyse votre application et renvoie un rapport sur toutes les vulnérabilités connues, notamment celles liées aux redirections ouvertes.
Snyk détecte les vulnérabilités et fournit des conseils concrets pour les corriger. Par exemple, si une vulnérabilité de redirection ouverte est détectée, Snyk vous indique son emplacement exact dans votre code, son niveau de gravité et des recommandations détaillées pour la corriger :
✗ 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.0Des outils comme Snyk aident les développeurs à écrire du code sécurisé et à détecter les vulnérabilités. Snyk est un outil de sécurité conçu pour les développeurs qui analyse le code source, les packages open source, les images de conteneurs et les configurations cloud à la recherche de vulnérabilités dissimulées.
Snyk prend en charge de nombreux langages de programmation et frameworks, dont JavaScript et Node.js.
Vous êtes développeur et souhaitez sécuriser vos applications et atténuer les risques liés aux vulnérabilités de redirection ouverte ? Inscrivez-vous à Snyk dès aujourd’hui pour renforcer vos pratiques de sécurité applicative.
Sécurisez votre code pendant le développement
Snyk analyse votre code pour détecter les problèmes de qualité et de sécurité, et vous conseille sur leur correction directement dans votre IDE.