Une vulnérabilité critique de jsPDF permet la lecture de fichiers arbitraires dans les déploiements Node.js

Lucas Morel

Le bogue de traversée de chemin permet aux attaquants d’inclure du contenu arbitraire du système de fichiers dans les PDF générés lorsque les chemins de fichiers ne sont pas correctement validés.

Une faille critique désormais corrigée dans la bibliothèque jsPDF pourrait permettre aux attaquants d’extraire des fichiers sensibles des serveurs d’entreprise et de les intégrer directement dans les documents PDF générés.

Suivie comme CVE-2025-68428, la faille affecte les déploiements Node.js non corrigés de jsPDF, où des entrées non fiables sont transmises aux API de gestion de fichiers sans validation appropriée.

Selon une analyse d’Endor Labs, le problème permet la traversée de chemin et l’inclusion de fichiers locaux, permettant à un attaquant de lire des fichiers arbitraires à partir du système de fichiers sous-jacent. Dans les environnements concernés, cela pourrait exposer les informations d’identification, les fichiers de configuration, les clés privées ou les variables d’environnement.

La vulnérabilité affecte les versions 3.0.4 et antérieures de jsPDF, en particulier les versions Node.js utilisées dans les flux de travail de génération de PDF côté serveur, et n’affecte pas l’utilisation uniquement par le navigateur.

Bien qu’un correctif ait été mis à disposition, les chercheurs d’Endor ont averti que la correction va au-delà d’un simple changement de version, en particulier dans les environnements de production qui reposent sur la gestion dynamique des fichiers. « Le correctif n’offre aucune protection si le moteur d’exécution permet un accès illimité au système de fichiers », ont déclaré les chercheurs d’Endor dans un article de blog.

La bibliothèque PDF se transforme en vecteur d’exfiltration de fichiers

Le problème CVE-2025-68428 réside dans la manière dont jsPDF gère les chemins de fichiers lors du chargement de ressources externes dans Node.js. Plusieurs API couramment utilisées, notamment « addImage », « html » et « addFont », s’appuient en interne sur une fonction « loadFile() » pour lire les fichiers à partir du disque. Avant la version 4.0.0, ces méthodes ne validaient pas ou ne restreignaient pas correctement les chemins de fichiers fournis lors de l’exécution.

Si une application accepte une entrée contrôlée par l’utilisateur, telle qu’un nom de fichier, un chemin d’image ou une référence de police, et la transmet directement à ces API, un attaquant pourrait fournir un chemin spécialement conçu pour référencer des fichiers d’application sensibles. jsPDF lirait alors le fichier et intégrerait son contenu dans le PDF résultant sans déclencher d’erreur.

Étant donné que la bibliothèque n’applique pas de restrictions de type de fichier à ce stade, le problème ne se limite pas aux images ou aux façades. Tout fichier lisible par le processus Node.js peut potentiellement être inclus.

Le bug s’est vu attribuer un indice de gravité critique avec un score CVSS de base de 9,2 sur 10. Les chercheurs ont exhorté à passer immédiatement à la version corrigée pour se protéger contre toute exploitation.

Les correctifs peuvent ne pas suffire

Les responsables de jsPDF ont résolu le problème dans la version 4.0.0 en restreignant l’accès au système de fichiers par défaut. Le correctif repose sur le mode d’autorisation Node.js, qui nécessite que les applications accordent explicitement un accès en lecture à des répertoires spécifiques au moment de l’exécution. Lorsqu’il est correctement configuré, cela empêche jsPDF d’accéder aux fichiers en dehors des chemins approuvés.

Cependant, cette approche introduit une complexité opérationnelle. Le mode d’autorisation de Node.js évolue et de nombreux environnements de production exécutent d’anciennes versions de Node ou n’ont pas adopté l’exécution basée sur les autorisations. « De nombreux environnements exécutent des versions plus anciennes de Node.js qui ne prennent pas en charge le mode d’autorisation stable, et l’activation de l’autorisation peut interrompre les fonctionnalités existantes si les modèles d’accès au système de fichiers n’ont pas été soigneusement cartographiés », ont noté les chercheurs.

Les chercheurs ont décrit un ensemble d’étapes pour évaluer l’exploitabilité de leurs déploiements, notamment la vérification si jsPDF est utilisé côté serveur (car il est inexploitable côté client), la vérification si la version en cours d’exécution implémente déjà le mode d’autorisation et si l’autorisation du système de fichiers est correctement configurée, l’identification des chemins de code concernés avec les outils SCA et la recherche manuelle de la base de code vulnérable.

Endor Labs a remercié le chercheur en sécurité Kwangwoon Kim (KilkAt) pour avoir identifié et signalé la vulnérabilité sur GitHub.

VulnérabilitésSécurité