Mittel

Kimai has an arbitrary file read in its invoice PDF renderer (admin)

  • Veröffentlicht: 08.05.2026
  • Aktualisiert: 11.10.2026 10:22

Summary

Users with the role System-Admin (ROLE_SYSTE_ADMIN) and the permission upload_invoice_template can upload PDF invoice templates, which can call pdfContext.setOption('associated_files', ...) inside the sandboxed Twig render.

This is forwarded to mPDF's SetAssociatedFiles(), whose writer calls file_get_contents($entry['path']) during PDF output and embeds the bytes as a FlateDecode stream in the PDF. Any file readable by the PHP worker is returned to the attacker inside the rendered invoice.

Root cause

  1. src/Twig/SecurityPolicy/StrictPolicy.php:123-128 explicitly whitelists PdfContext::setOption():

    php
    if ($obj instanceof PdfContext) {
        if ($lcm !== 'setoption') { throw ...; }
        return;
    }
  2. src/Pdf/MPdfConverter.php keeps associated_files in the pass-through allowlist:

    php
    $allowed = ['mode','format','default_font_size','default_font', ... , 'associated_files','additional_xmp_rdf'];

    and then forwards it to mPDF:

    php
    if (array_key_exists('associated_files', $options) && is_array($options['associated_files'])) {
        $associatedFiles = $options['associated_files'];
        unset($options['associated_files']);
    }
    ...
    $mpdf->SetAssociatedFiles($associatedFiles);
  3. mPDF 8.3.1 MetadataWriter::writeAssociatedFiles() calls file_get_contents, which respects PHP stream wrappers:

    php
    if (isset($file['path'])) {
        $fileContent = @file_get_contents($file['path']);
    }
    ...
    $filestream = gzcompress($fileContent);
    $this->writer->write('<</Type /EmbeddedFile');

The sandbox and the option allowlist were both written defensively (short whitelists, not blacklists), but neither side considered that associated_files is a PDF/A file-embedding feature whose path key is a sink.

Fix

The implemented fix has two aspects:

  1. The PdfContext now works with a strict allow-list, that excludes associated_files
  2. The MPdfConverter now removes any path from the $associatedFiles array, which can still be used by plugins:
php
        if (\count($associatedFiles) > 0) {
            // remove "path" so mPDF will not use file_get_contents() on local files
            // callers must pre-read and pass the bytes via "content"
            $associatedFiles = array_map(static function ($entry): array {
                if (!\is_array($entry)) {
                    return [];
                }

                if (\array_key_exists('path', $entry)) {
                    unset($entry['path']);
                }

                return $entry;
            }, $associatedFiles);
            $mpdf->SetAssociatedFiles($associatedFiles);
        }

Betroffene Software

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

PlattformPaketAnfällige VersionenBehoben in
Composer-Paket kimai/kimai >= 2.32.0, < 2.56 2.56

Verweise

CVSS-Wert 4.1/10
CVSS-Vektor
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:N/A:N
Schwäche (CWE)
CWE-22
Plattform
Composer
Paket
kimai/kimai
Veröffentlicht
08.05.2026
Aktualisiert
11.10.2026 10:22

Quellen und Lizenzen

OSV / GitHub Advisory Database - GHSA-h5fh-7hwr-97mw - CC BY 4.0

Schwachstellenhistorie: kimai/kimai

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 (33) im Archiv
Einträge insgesamt
33
Erste → letzte
02.2023 07.2026
Ohne Fix
1
In Angriffen ausgenutzt
0

Verteilung nach Schweregrad

  • Kritisch 2
  • Hoch 4
  • Mittel 20
  • Niedrig 7

Veröffentlichungen pro Jahr

  1. 2023: 2
  2. 2024: 3
  3. 2025: 1
  4. 2026: 27
Schweregrad:
  1. Kimai has an arbitrary file read in its invoice PDF renderer (admin) dieser Eintrag
    Mittel · 4.1 CVE-2026-44298 >= 2.32.0, < 2.56 2.56
  2. Hoch · 9.8 CVE-2023-53957 <= 1.30.10 keine Korrektur
  3. Hoch · 6.5 ghsa-534c-hcr7-67jg < 2.21.0 2.21.0
  4. Kritisch · 9.6 CVE-2020-19825 < 1.1 1.1

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.