핵심 요약
- MuPDF와 Foxit 등 유명 PDF 소프트웨어의 파일 키 생성 결함으로 비밀번호 없이도 문서 암호가 무력화되는 취약점이 공개되었습니다.
- MuPDF의 경우 비트 연산 실수로 인해 256비트 암호키 중 실제 영향을 주는 난수 상태가 고작 9비트(512개 경우의 수)에 불과해 11밀리초 만에 키를 찾아낼 수 있었습니다.
- Foxit 역시 타임스탬프와 0으로 채워진 바이트를 조합해 키를 생성하는 등 시간 기반 난수에 의존해 쉽게 복호화가 가능한 것으로 드러났습니다.
요약 최신 PDF 문서 암호화는 보통 강력한 보안을 자랑하는 AES-256 규격을 사용합니다. 사용자가 설정한 비밀번호가 문서를 직접 암호화하는 것이 아니라, 무작위로 생성된 32바이트 파일 키가 본문을 암호화하고 비밀번호는 이 파일 키를 다시 암호화하는 방식을 취합니다. 따라서 비밀번호를 아무리 길고 복잡하게 설정해도, 내부에서 생성되는 32바이트 파일 키의 무작위성이 부실하다면 보안 체계 전체가 무너질 수 있습니다.
보안 연구팀 V12의 분석에 따르면, 널리 쓰이는 PDF 뷰어 및 편집기들이 이 무작위 키를 심각하게 허술한 방식으로 생성해 온 것으로 드러났습니다. 대표적으로 1.28.5 이전 버전의 MuPDF는 의사 난수 생성기인 drand48 계열을 사용해 키를 만들었습니다. 그런데 난수 생성기 시드를 초기화할 때 초 단위의 타임스탬프를 사용하고, 비트 연산 및 타입 캐스팅(unsigned char) 과정에서 상위 비트와 하위 비트가 버려지면서 실제 키 생성에 영향을 주는 무작위 상태가 고작 9비트에 불과한 결함이 발생했습니다. 즉, 타임스탬프가 512초 차이 날 때마다 완전히 동일한 바이트 스트림이 생성되는 구조였습니다.
이로 인해 공격자는 복잡한 암호 해독 과정을 거칠 필요 없이, 가능한 512가지 키 스트림만 무차별 대입(브루트 포스)해보면 비밀번호 없이도 문서를 즉시 복호화할 수 있었습니다. 심지어 최적화되지 않은 순수 파이썬 스크립트로도 512개 경우의 수를 전부 탐색하는 데 단 11밀리초밖에 걸리지 않았습니다. 또한 문서의 /ID 값이 평문으로 저장되어 추가 검증까지 가능했습니다.
유명 뷰어 프로그램인 Foxit PDF Reader(2026.1.3.36551 버전) 역시 허술하긴 마찬가지였습니다. 파일 키를 생성할 때 현재 타임스탬프와 초기화되지 않은 32바이트, 그리고 특정 상수를 결합해 SHA-256 해시를 돌리는 방식을 썼는데, 실제로는 이 32바이트가 0으로 채워져 있어 사실상 초 단위 시간값에만 의존하는 형태였습니다. 결국 강력한 AES-256 암호화를 적용해 두고도 내부 구현의 어처구니없는 난수 생성 오류 때문에 사실상 비밀번호가 무용지물이 되는 황당한 사례가 확인되었습니다.
Sponsored · 광고