
CVE-2024-4367
Ce projet démontre et analyse CVE-2024-4367, une vulnérabilité de haute sévérité dans la bibliothèque PDF.js de Mozilla qui permet l'exécution arbitraire de JavaScript via une vérification de type incorrecte dans le code de gestion des polices. Nos recherches montrent comment un PDF malveillant peut exécuter du JavaScript dans des contextes comme les applications Electron, pouvant potentiellement escalader vers une exécution de code à distance.
🔗 Dépôt GitHub : Hacking-pdf.js-vulnerability
fontMatrix non assaini dans les polices intégrées.ex1.pdf et ex-gist.pdf montrent des alertes ou une exécution de script à distance.src/components/ReactPdfViewer.tsx – Visionneuse React construite avec react-pdf 5.7.2 (inclus la version vulnérable pdfjs-dist 2.16.105)ex1.pdf – PDF malveillant déclenchant une alerteex-gist.pdf – PDF malveillant qui récupère et exécute du JS distantCVE-2024-4367_Report_Hacking_Project.pdf – Rapport technique complet et analyse de l'exploitLes éléments du tableau fontMatrix de PDF.js n'étaient pas correctement validés – acceptant des chaînes injectées directement dans du JavaScript compilé avec new Function(...). Cela permet aux attaquants de concevoir des données de police malveillantes, provoquant une exécution de code arbitraire lorsque des opérations de type eval sont autorisées.
Exemple de chemin de code vulnérable :
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // Payload injecté
// Résulte en une fonction compilée comme :
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // Exécution non sécurisée
}
Pour atténuer cette vulnérabilité et protéger les applications intégrant PDF.js (ou les bibliothèques qui le regroupent), adoptez les mesures suivantes :
isEvalSupported = false dans PDF.js pour désactiver la compilation dynamique des Function.typeof sur toutes les valeurs fournies par l'utilisateur (par ex., le tableau fontMatrix).package.json/yarn.lock à jour et appliquez automatiquement les correctifs de sécurité.Ajoutez une Content-Security-Policy stricte :
Content-Security-Policy: script-src 'self'; object-src 'none';