
CVE-2024-4367
이 프로젝트는 Mozilla의 PDF.js 라이브러리에서 글꼴 처리 코드의 부적절한 타입 검사로 인해 임의 JavaScript 실행을 허용하는 높은 심각도 취약점인 CVE-2024-4367을 시연하고 분석합니다. 우리의 연구는 악의적으로 제작된 PDF가 Electron 앱과 같은 컨텍스트에서 JavaScript를 실행하여 잠재적으로 원격 코드 실행으로 이어질 수 있는 방법을 보여줍니다.
🔗 GitHub 저장소: Hacking-pdf.js-vulnerability
fontMatrix를 통한 임의 JavaScript 실행.ex1.pdf 및 ex-gist.pdf PDF는 알림 또는 원격 스크립트 실행을 보여줍니다.src/components/ReactPdfViewer.tsx – react-pdf 5.7.2로 빌드된 React 뷰어 (취약한 pdfjs-dist 2.16.105 포함)ex1.pdf – 알림을 트리거하는 악의적인 PDFex-gist.pdf – 원격 JS를 가져와 실행하는 악의적인 PDFCVE-2024-4367_Report_Hacking_Project.pdf – 전체 기술 보고서 및 익스플로잇 분석PDF.js의 fontMatrix 배열 요소가 부적절하게 검증되었습니다. 즉, new Function(...)으로 컴파일된 JavaScript에 직접 주입된 문자열을 허용했습니다. 이로 인해 공격자가 악의적인 글꼴 데이터를 제작하여 eval과 유사한 연산이 허용될 때 임의 코드 실행을 유발할 수 있습니다.
취약한 코드 경로 예시:
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // 주입된 페이로드
// 결과적으로 다음과 같은 함수가 컴파일됨:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // 안전하지 않은 실행
}
이 취약점을 완화하고 PDF.js(또는 이를 번들로 포함하는 라이브러리)를 포함하는 애플리케이션을 보호하려면 다음 조치를 채택하십시오:
isEvalSupported = false**를 설정하여 동적 Function 컴파일을 끄십시오.fontMatrix 배열)에 명시적인 typeof 검사를 추가하십시오.package.json/yarn.lock을 최신 상태로 유지하고 보안 패치를 자동 적용하십시오.엄격한 Content-Security-Policy 추가:
Content-Security-Policy: script-src 'self'; object-src 'none';