CVE-2026-23907, CVE-2026-33929

Data: 2025-03-27

Severity: Medium

CVSS Score: 5.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N)

Riferimenti:

Libreria: org.apache.pdfbox:*

Descrizione

  • CVE-2026-23907: This issue affects the ExtractEmbeddedFiles example in Apache PDFBox: from 2.0.24 through 2.0.35, from 3.0.0 through 3.0.6. The ExtractEmbeddedFiles example contains a path traversal vulnerability (CWE-22) because the filename that is obtained from PDComplexFileSpecification.getFilename() is appended to the extraction path. Users who have copied this example into their production code should review it to ensure that the extraction path is acceptable. The example has been changed accordingly, now the initial path and the extraction paths are converted into canonical paths and it is verified that extraction path contains the initial path. The documentation has also been adjusted.

  • CVE-2026-33929: Path Traversal vulnerability in Apache PDFBox Examples. This issue affects the ExtractEmbeddedFiles example in Apache PDFBox: from 2.0.24 through 2.0.36, from 3.0.0 through 3.0.7. Si tratta di un follow-up della CVE-2026-23907: il fix applicato nelle release 2.0.36 e 3.0.7 è risultato incompleto perché non considera il file path separator, lasciando aperto lo stesso vettore di path traversal sull’esempio “ExtractEmbeddedFiles”. Gli utenti che avessero copiato il codice di esempio nella propria codebase di produzione devono applicare il fix aggiornato disponibile nella PR #427 del progetto Apache PDFBox (oppure aggiornare alle versioni 2.0.37 / 3.0.8 una volta rilasciate).

Falso Positivo per GovWay

Entrambe le vulnerabilità riguardano esclusivamente il codice di esempio ExtractEmbeddedFiles distribuito nell’artifact separato pdfbox-examples, non incluso nei jar pdfbox / pdfbox-io impiegati nel deploy di GovWay. La classe ExtractEmbeddedFiles non è quindi nemmeno presente fisicamente nei jar segnalati dallo scanner (verifica diretta effettuata sui jar pdfbox / pdfbox-io utilizzati da GovWay). Inoltre il codice di esempio non è stato copiato nel sorgente GovWay.

Il vettore di attacco descritto dall’advisory richiede uno schema preciso: leggere PDComplexFileSpecification.getFilename() da un PDF non fidato e usare quel valore come path filesystem per scrivere il contenuto del file embedded. Tale schema non si verifica in nessun codepath di GovWay:

  • il modulo org.openspcoop2.utils.pdf.PDFWriter utilizza PDComplexFileSpecification / PDEmbeddedFile / PDEmbeddedFilesNameTreeNode solo in fase di scrittura, per aggiungere file embedded a PDF generati da GovWay (metodi addEmbeddedFile* / addEmbeddedFileAsKid* / addAnnotationFile*); il nome del file embedded è sempre fornito dal codice chiamante e non proviene da un PDF esterno;

  • il modulo org.openspcoop2.utils.pdf.PDFReader espone un’utility getEmbeddedFiles(boolean) che restituisce i file embedded come Map<String, EmbeddedFile> con i contenuti come byte[] in memoria, senza alcuna scrittura su filesystem; viene utilizzato esclusivamente dai test unitari (org.openspcoop2.utils.pdf.test.PDFReaderTest) e non da codice di produzione del Gateway, e anche in tale ambito di test la mappa è verificata solo tramite asserzioni in memoria (nessun FileOutputStream / Files.write / new File(filename) costruito sul filename letto dal PDF).

In runtime di produzione, la libreria Apache PDFBox è quindi utilizzata in GovWay unicamente per:

  • caricare documenti PDF tramite Loader.loadPDF() (classe org.openspcoop2.utils.pdf.AbstractPDFCore);

  • generare documenti PDF con contenuti testuali e tabellari (classe org.openspcoop2.web.monitor.core.report.Templates);

  • estrarre testo da documenti PDF tramite PDFTextStripper (classe org.openspcoop2.core.monitor.rs.testsuite.PdfUtils);

  • aggiungere file embedded a PDF generati internamente (classe org.openspcoop2.utils.pdf.PDFWriter), con filename controllati dal codice chiamante.

Il codepath vulnerabile descritto dall’advisory non è quindi raggiungibile e le vulnerabilità non sono sfruttabili nel contesto di GovWay.

Configuration File: false-positive.xml