CVE-2026-25940 jsPDF PoC
CVE-2026-25940에 대한 개념 증명(PoC)으로, 특수하게 제작된 AcroForm 라디오 버튼 외형이 취약한 PDF 뷰어(예: Foxit)에서 임베디드 JavaScript를 트리거할 수 있음을 보여줍니다. 이 저장소에는 다양한 파싱 경로를 테스트하기 위한 Node 기반 생성기와 브라우저 뷰어 하네스가 포함되어 있습니다.
⚠️ 격리된 비프로덕션 환경에서만 사용하세요. 샘플 페이로드는 의도적으로 JavaScript를 실행하며 네트워크 요청이나 외부 프로그램을 호출할 수 있습니다. 소중한 호스트에서는 신뢰할 수 없는 뷰어로 생성된 PDF를 열지 마세요.
저장소 구성
- poc.js: 여러 라디오 버튼 옵션과 서로 다른 외형 스트림을 가진 악성 PDF를 생성하여 다양한 동작을 보여줍니다.
- viewer.html: 브라우저에서 PoC를 생성하거나 기존 샘플을 로드하고, 이를 네이티브(iframe) 및 PDF.js로 렌더링하는 최소 뷰어 하네스입니다.
- package.json: Node PoC에 필요한 jsPDF 종속성을 선언합니다.
사전 요구 사항
설정
- 종속성 설치:
- (선택 사항) HTML/JS를 더 깔끔하게 로드하려면 뷰어를 로컬에서 서빙하세요:
npx http-server .
# 그런 다음 http://localhost:8080/viewer.html을 엽니다
Node를 통한 PoC PDF 생성
- 생성기 실행:
- 스크립트는 프로젝트 루트에
test.pdf를 작성합니다. 대상 PDF 뷰어로 열어 동작을 관찰하세요. 외부 요청을 피하려면 네트워킹을 차단하세요.
브라우저 기반 뷰어 워크플로우
- 브라우저에서 직접 또는 로컬 서버를 통해 viewer.html을 엽니다.
- Generate PoC PDF를 클릭하여 브라우저에서 악성 문서를 생성하고 iframe(네이티브/브라우저 핸들러)과 PDF.js 캔버스에 모두 로드합니다.
- 또는 Load file을 선택하고 Node 스크립트로 생성한 PDF를 선택합니다.
- JavaScript 실행 증거를 위해 콘솔/네트워크 활동을 관찰하세요. 일부 뷰어는 임베디드 작업을 실행하면서도 경고를 표시하지 않을 수 있습니다.
참고 사항
- 페이로드는 Foxit 동작에 맞게 조정되었습니다. 다른 뷰어는 부분적으로 완화하거나 차단할 수 있습니다.
- 페이로드를 수정하는 경우 일부 익스플로잇 체인이 의존하는 객체 오프셋이 변경되지 않도록 크기를 유사하게 유지하세요.
- 항상 네트워크 이그레스가 제한된 VM 또는 샌드박스에서 테스트하세요.