
CVE-2024-4367
Этот проект демонстрирует и анализирует CVE-2024-4367, уязвимость высокой степени серьезности в библиотеке PDF.js от Mozilla, которая позволяет произвольное выполнение JavaScript из-за некорректной проверки типов в коде обработки шрифтов. Наше исследование показывает, как вредоносный PDF-файл может выполнять JavaScript в таких средах, как Electron, потенциально приводя к удаленному выполнению кода.
🔗 GitHub Repository: Hacking-pdf.js-vulnerability
fontMatrix во встроенных шрифтах.ex1.pdf и ex-gist.pdf демонстрируют показ предупреждений или выполнение удаленного скрипта.src/components/ReactPdfViewer.tsx – React-просмотрщик, созданный с react-pdf 5.7.2 (включает уязвимый pdfjs-dist 2.16.105)ex1.pdf – вредоносный PDF, вызывающий предупреждениеex-gist.pdf – вредоносный PDF, загружающий и выполняющий удаленный JSCVE-2024-4367_Report_Hacking_Project.pdf – полный технический отчет и анализ эксплуатацииЭлементы массива fontMatrix в PDF.js неправильно проверялись — принимая строки, напрямую внедряемые в JavaScript, скомпилированный с помощью new Function(...). Это позволяет злоумышленникам создавать вредоносные данные шрифта, вызывающие произвольное выполнение кода, если разрешены операции, подобные eval.
Пример уязвимого пути кода:
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // Внедренная нагрузка
// В результате компилируется функция вида:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // Небезопасное выполнение
}
Чтобы смягчить эту уязвимость и защитить приложения, встраивающие PDF.js (или библиотеки, которые его включают), примите следующие меры:
isEvalSupported = false в PDF.js, чтобы отключить динамическую компиляцию Function.typeof для всех значений, предоставленных пользователем (например, массив fontMatrix).package.json/yarn.lock в актуальном состоянии и автоматически применяйте исправления безопасности.Добавьте строгую политику Content-Security-Policy:
Content-Security-Policy: script-src 'self'; object-src 'none';