
CVE-2024-4367
Dieses Projekt demonstriert und analysiert CVE-2024-4367, eine hochkritische Sicherheitslücke in Mozillas PDF.js-Bibliothek, die durch unsachgemäße Typüberprüfung im Schriftartenverarbeitungscode eine beliebige JavaScript-Ausführung ermöglicht. Unsere Forschung zeigt, wie ein bösartig erstelltes PDF in Kontexten wie Electron-Apps JavaScript ausführen kann, was möglicherweise zu einer Remotecodeausführung eskaliert.
🔗 GitHub-Repository: Hacking-pdf.js-vulnerability
fontMatrix in eingebetteten Schriftarten.ex1.pdf und ex-gist.pdf zeigen Alarme oder Remote-Skriptausführung.src/components/ReactPdfViewer.tsx – React-Viewer erstellt mit react-pdf 5.7.2 (enthält verwundbares pdfjs-dist 2.16.105)ex1.pdf – schädliches PDF, das einen Alarm auslöstex-gist.pdf – schädliches PDF, das entferntes JS abruft und ausführtCVE-2024-4367_Report_Hacking_Project.pdf – vollständiger technischer Bericht und Exploit-AnalyseDie Elemente des fontMatrix-Arrays in PDF.js wurden nicht ordnungsgemäß validiert – sie akzeptierten Zeichenfolgen, die direkt in mit new Function(...) kompiliertes JavaScript eingefügt wurden. Dies ermöglicht Angreifern, bösartige Schriftdaten zu erstellen, die bei erlaubten eval-ähnlichen Operationen zu beliebiger Codeausführung führen.
Beispielhafter anfälliger Codepfad:
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // Injected payload
// Results in compiled function like:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // Unsafe execution
}
Um diese Sicherheitslücke zu entschärfen und Anwendungen zu schützen, die PDF.js (oder Bibliotheken, die es bündeln) einbetten, ergreifen Sie die folgenden Maßnahmen:
isEvalSupported = false in PDF.js, um die dynamische Function-Kompilierung zu deaktivieren.typeof-Prüfungen für alle benutzergelieferten Werte hinzu (z.B. das fontMatrix-Array).package.json/yarn.lock auf dem neuesten Stand und wenden Sie Sicherheitspatches automatisch an.Fügen Sie eine strenge Content-Security-Policy hinzu:
Content-Security-Policy: script-src 'self'; object-src 'none';