Adobe Acrobat Reader 프로토타입 오염 제로데이 대응
CVE-2026-34621 Adobe Acrobat Reader EScript 프로토타입 오염 취약점의 악용 경로와 패치·완화 방법을 정리한다.
2026-08-15 · 최초 발행 2026-04-19
PDF JavaScript의 신뢰 경계가 무너진 지점
PDF는 문서 형식이지만 Acrobat Reader 안에서는 JavaScript가 폼 입력, 디지털 서명 검증, 상호작용 기능을 처리한다. CVE-2026-34621은 이 EScript 엔진의 프로토타입 오염 취약점을 이용해, 조작된 PDF를 여는 것만으로 원격 JavaScript를 가져와 실행할 수 있었던 제로데이다. 이 취약점은 2025년 12월부터 4개월 이상 실제 공격에 악용됐다.
문제의 출발점은 프로토타입 체인을 따라 속성을 찾는 과정에서 own-property 검증이 누락된 점이다. 공격자는 전역 객체에 값을 주입해 Acrobat의 권한 승격 API가 신뢰된 호출로 판단하도록 만들 수 있었다.
CVE-2026-34621 영향 범위와 대응 이력
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-34621 |
| CVSS 점수 | 8.6 (High) |
| 취약점 유형 | Prototype Pollution → Arbitrary Code Execution |
| 영향 제품 | Adobe Acrobat DC, Acrobat Reader DC, Acrobat 2024 |
| 최초 악용 탐지 | 2025년 12월 |
| 패치 발표 | 2026년 4월 11일 (APSB26-43, Priority 1) |
| CISA KEV 등재 | 2026년 4월 13일 |
| 잠재 피해 사용자 | 약 6억 3,500만 명 |
CVE-2026-34621의 CVSS 점수는 최초 9.6이었다. 공격 벡터를 Network(AV:N)로 평가한 값이었으나, 사용자가 악성 파일을 직접 열어야 한다는 점을 반영해 2026년 4월 12일 공격 벡터가 Local(AV:L)로 재평가되면서 8.6으로 수정됐고 High로 분류됐다. 영향 범위는 Acrobat DC 26.001.21367 이하와 Acrobat 2024 24.001.30356 이하이다.
문서 기반 익스플로잇 탐지 전문 플랫폼 EXPMON을 설립한 보안 연구원 Haifei Li는 악성 PDF의 JavaScript 동작을 모니터링해 비정상적인 프로토타입 수정 행위를 찾는 과정에서 이 취약점 관련 샘플을 탐지했다. 실제 악용 중인 익스플로잇 샘플을 확보해 Adobe에 보고했으며, 보고 시점 기준으로 해당 취약점은 최소 4개월 이상 야생에서 활용된 것으로 추정됐다. Adobe는 2026년 4월 11일 APSB26-43 긴급 보안 업데이트를 발표했고, CISA는 이틀 뒤 KEV(Known Exploited Vulnerabilities) 목록에 올렸다. 연방 기관에는 4월 27일까지 패치를 적용하도록 의무화했다.
EScript가 프로토타입 오염을 신뢰된 호출로 해석하는 과정
JavaScript 객체는 [[Prototype]] 링크로 연결된다. 엔진은 객체에서 속성을 먼저 찾고, 없으면 프로토타입 체인을 거슬러 올라간다. 최상단의 Object.prototype이 오염되면 그 영향을 모든 객체가 받을 수 있다.
// 프로토타입 오염의 기본 개념
const obj = {};
Object.prototype["isTrusted"] = true;
// 이제 모든 객체에서 isTrusted가 true로 보임
console.log(obj.isTrusted); // true (own property가 아님에도)
공격자는 __proto__ 또는 constructor.prototype을 통해 이 경로를 악용할 수 있다.
// 공격자가 PDF 내 JavaScript에서 실행
const payload = {};
payload.__proto__["privileged"] = true;
payload.__proto__["trustedContext"] = "admin";
EScript 엔진에서는 C++ 레이어가 JavaScript 컨텍스트에서 특정 키를 조회한다. 이때 hasOwnProperty 같은 own-property 검사를 거치지 않으면, 오염된 Object.prototype의 값까지 신뢰 판단에 사용될 수 있다.
EScript Bridge (C++) → JavaScript 엔진에 프로퍼티 질의
↓
engines.getProperty(context, "trustedFunction")
↓
// own-property 검사 없이 프로토타입 체인 전체 탐색
// 오염된 Object.prototype의 값을 읽어옴
↓
신뢰 컨텍스트로 잘못 판단 → 권한 승격 API 허용
그 결과 PDF 안에서 비권한 JavaScript가 Object.prototype을 오염시키면, EScript 브리지는 해당 호출을 신뢰된 컨텍스트로 오인할 수 있다.
조작된 PDF에서 권한 있는 실행으로 이어지는 흐름
악용은 먼저 PDF 내 JavaScript가 Object.prototype에 isTrusted, trustedContext 같은 신뢰 지시자 키를 설정하면서 시작한다. own-property 검사 없이 이 값을 읽는 C++ 브리지는 호출 컨텍스트를 권한 있는 상태로 판단한다.
이후 공격자는 app.trustedFunction()으로 악성 함수를 신뢰된 Acrobat 함수로 등록한다. 파일시스템 읽기, 네트워크 접근, 레지스트리 조작 같은 권한 있는 API를 호출할 수 있는 상태가 된다.
마지막으로 신뢰 컨텍스트를 얻은 스크립트가 공격자 서버에서 추가 JavaScript 페이로드를 fetch해 실행한다. 로컬 파일을 외부로 전송하거나 피해자 시스템에 추가 악성코드를 설치하는 경로가 여기서 만들어진다.
Protected Mode를 통과하는 권한 요청
Adobe Reader X(2010)부터 제공된 Protected Mode는 Google Chrome의 샌드박스 모델을 참고한 이중 프로세스 격리 구조다.
샌드박스 프로세스는 Windows AppContainer 기술을 사용해 최소 권한으로 실행된다. PDF 파싱, JavaScript 실행, 3D 렌더링처럼 위험한 연산은 샌드박스 안에서 처리되고, 외부 자원 접근은 브로커 프로세스의 IPC(프로세스 간 통신)를 거쳐야 한다.
CVE-2026-34621은 별도의 샌드박스 탈출 없이 코드 실행에 이른다는 점이 핵심이다. 오염은 샌드박스 프로세스 안의 EScript 엔진에서 일어나지만, app.trustedFunction으로 등록한 함수는 Acrobat 내부 권한 체계를 통해 브로커 프로세스에 요청을 전달할 수 있다.
따라서 복잡한 OS 레벨 샌드박스 탈출 없이도 다음 동작이 가능해진다.
- 로컬 파일 시스템 읽기 및 외부 전송
- 원격 URL에서 스크립트 fetch 및 실행
- 현재 사용자 권한으로 임의 프로세스 실행
원격 페이로드가 내려오는 경로
실제 악용 사례에서 관찰된 원격 스크립트 실행 흐름은 다음과 같다.
통신은 Acrobat의 신뢰된 네트워크 API를 거치므로 일반 네트워크 필터링 도구가 정상 트래픽으로 오인할 수 있다. 페이로드 역시 PDF에 직접 포함되지 않고 원격에서 fetch되므로, 정적 분석 기반 백신 탐지를 피하기 쉬워진다.
문서 열람과 코드 실행을 분리해야 하는 이유
이 취약점은 읽기 전용 문서 형식이 실행 권한을 가진 코드를 포함할 수 있다는 설계 문제를 드러낸다. PDF/A(ISO 19005) 아카이브 표준은 JavaScript를 허용하지 않지만, 일반 PDF 사양은 이를 허용하며 Acrobat Reader는 기본적으로 JavaScript를 실행한다.
문서 뷰어가 JavaScript에 노출하는 API는 문서 표시를 위한 최소 범위여야 한다. 파일시스템 접근, 네트워크 호출, 프로세스 실행 API는 기본적으로 차단하는 편이 맞다. 파일을 열람하는 컨텍스트와 코드를 실행하는 컨텍스트도 분리돼야 하며, 읽기 전용 컨텍스트에서는 JavaScript 자체를 비활성화하는 방식이 가장 안전하다.
trustedFunction 같은 권한 승격 API는 특히 엄격한 own-property 검사를 통과해야 한다. 프로토타입 체인을 따라 신뢰 판단을 우회할 수 있는 구조라면, JavaScript와 네이티브 레이어 사이의 신뢰 경계 전체가 무너진다.
조직에서 점검할 완화책
Acrobat의 Protected View 설정을 점검해야 한다. 편집 → 환경 설정 → 보안(강화)에서 "신뢰할 수 없는 위치의 파일에 대해 보호 보기 활성화"를 설정하면 외부 PDF의 JavaScript 실행을 추가로 제한할 수 있다. Acrobat Trust Manager에서 JavaScript 실행을 비활성화하는 방법은 가장 강력한 완화책이다.
외부 PDF는 VM 또는 웹 뷰어 같은 격리 환경에서 열고, 이메일 첨부 PDF의 자동 실행을 막는 운영 정책도 필요하다. 엔드포인트 EDR에서는 비정상적인 Reader 동작을 탐지하도록 구성한다.
배포된 패치 버전
Adobe는 2026년 4월 11일 APSB26-43을 통해 패치를 배포했다.
| 제품 | 플랫폼 | 취약 버전 | 패치 버전 |
|---|---|---|---|
| Acrobat DC / Reader DC | Windows, macOS | 26.001.21411 미만 | 26.001.21411 이상 |
| Acrobat 2024 | Windows | 24.001.30362 미만 | 24.001.30362 이상 |
| Acrobat 2024 | macOS | 24.001.30360 미만 | 24.001.30360 이상 |
Adobe는 이 업데이트를 Priority 1(최고 긴급도)으로 분류했다. 이는 활발한 실 악용이 확인된 취약점에 부여하는 최고 등급이다. CISA는 KEV 등재와 함께 연방 기관에 2026년 4월 27일까지 패치 적용을 의무화했다.
프로토타입 오염은 웹 애플리케이션에만 국한된 문제가 아니다. JavaScript 엔진을 내장한 PDF 뷰어에서도 C++ 레이어와 JavaScript 엔진의 경계에 hasOwnProperty 검사가 빠지면 전체 신뢰 체계가 영향을 받는다. 패치 적용과 JavaScript 기본 비활성화, Protected View 강제를 함께 검토해야 문서 뷰어의 공격 표면을 줄일 수 있다.
Sources
- Adobe Security Bulletin APSB26-43
- CVE-2026-34621: Prototype Pollution to Arbitrary Code Execution in Adobe Acrobat EScript Engine - CVEReports
- Adobe Acrobat Reader Zero-Day Exploited via Malicious PDFs Since December 2025 - The Hacker News
- Adobe Patches Actively Exploited Acrobat Reader Flaw CVE-2026-34621 - The Hacker News
- Acrobat Reader zero-day exploited in the wild for many months - Help Net Security
- Adobe issues emergency fix for Acrobat Reader flaw exploited in the wild - Help Net Security
- CVE-2026-34621: Adobe Acrobat Reader Zero-Day Enables Arbitrary Code Execution via Crafted PDF - SOCRadar
- Simply opening a PDF could trigger this Adobe Reader zero-day - Malwarebytes
- Adobe rolls out emergency fix for Acrobat Reader zero-day flaw - BleepingComputer
- Sandbox Protections - Acrobat Desktop Application Security Guide
- CVE-2026-34621 Detail - NVD
- Adobe Acrobat and Reader CVE-2026-34621: Critical Prototype Pollution Vulnerability - Rescana