Alle Sicherheitshinweise

Orthanc DICOM Server

Speichererschöpfung durch gefälschte ZIP-Metadaten

Orthanc erkennt ZIP-Archive in POST /instances-Uploads anhand ihrer Magic-Bytes und entpackt sie mit ZipReader::ReadNextFile. Der Reader vertraut dem uncompressed_size-Feld aus den ZIP-Central-Directory-Metadaten und ruft content.resize() für diese Größe ohne Obergrenze auf. Eine kleine ZIP-Datei mit gefälschter ~4-GB-Größe löst pro Anfrage eine riesige Allokation aus.

Verfasst vonVolker Schönefeld, Simon WeberErstveröffentlichung 2026-04-02Vollständige Offenlegung 2026-04-28
SchweregradHochCVSS 7.5CVSS-3.1-VektorAV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HCWECWE-770 (Allocation of Resources Without Limits or Throttling)ProduktOrthanc DICOM ServerBetroffene VersionenOrthanc <= 1.12.10Behoben in1.12.11CVECVE-2026-5439CERT/CCVU#536588.7

Beschreibung

Orthanc nimmt ZIP-Archive über POST /instances entgegen und entpackt sie eintragsweise, wobei jede enthaltene Datei als DICOM-Kandidat behandelt wird. Der Upload-Handler erkennt ZIP-Archive an ihren Magic-Bytes (PK\x03\x04) und konstruiert einen ZipReader:

OrthancServer/Sources/OrthancRestApi/OrthancRestApi.cpp:172

if (ZipReader::IsZipMemoryBuffer(call.GetBodyData(), call.GetBodySize()))
{
std::unique_ptr<ZipReader> reader(ZipReader::CreateFromMemory(...));
std::string filename, content;
while (reader->ReadNextFile(filename, content)) // löst resize aus
{
// ... verarbeitet die entpackte Datei als DICOM
}
}

View source →

ReadNextFile() erfragt die Eintrags-Metadaten von minizip über unzGetCurrentFileInfo64 und resized den Ausgabepuffer anschließend auf den Wert, den die ZIP selbst als uncompressed_size deklariert — ohne jede Obergrenze:

OrthancFramework/Sources/Compression/ZipReader.cpp:294-322

unz_file_info64_s info;
if (unzGetCurrentFileInfo64(pimpl_->unzip_, &info, ...) != 0)
{
throw OrthancException(ErrorCode_BadFileFormat);
}
content.resize(info.uncompressed_size); // vertraut den ZIP-Metadaten, keine Obergrenze

View source →

Ein Angreifer baut eine 126 Byte große ZIP-Datei mit einem 64 Byte großen Dummy-Eintrag und patcht das uncompressed_size-Feld in Local File Header und Central Directory auf 0xFFFFFFFE (~4 GB). Die minizip-Schicht liest den gepatchten Wert verbatim und gibt ihn über info.uncompressed_size weiter. content.resize() allokiert und null-initialisiert anschließend ~4 GB, bevor überhaupt eine Dekomprimierung beginnt.

Zwanzig parallele POST /instances-Requests mit jeweils einer 126 Byte großen gefälschten ZIP allokieren zusammen rund 80 GB. Der Linux-OOM-Killer beendet den Orthanc-Prozess mit Exit-Code 137. Der gesamte Angriffs-Payload umfasst 2.520 Bytes (20 × 126 Bytes); es werden keine gültigen DICOM-Daten benötigt, nur eine valide ZIP-Struktur mit gefälschten Größenmetadaten.

Authentifizierung ist erforderlich: Die Auth-Prüfung in HttpServer.cpp:1298 läuft vor der ZIP-Verarbeitung im POST /instances-Handler in OrthancRestApi.cpp:172. Diese Schwachstelle gehört zur selben Klasse von „Den-Metadaten-Vertrauen"-Bugs wie CVE-2026-5440 (unbegrenzte Content-Length) und CVE-2026-5438 (gzip-ISIZE-Bombe).

Auswirkung

  • Denial-of-Service: Eine Welle von ~20 parallelen Uploads à 126 Byte gefälschter ZIPs beendet den Orthanc-Prozess über den Linux-OOM-Killer (Exit-Code 137).
  • Der gesamte Angriffs-Payload umfasst 2.520 Bytes (20 × 126-Byte-ZIPs). Keine gültigen DICOM-Daten erforderlich, nur eine valide ZIP-Struktur mit gefälschten Größenmetadaten.
  • Der Server muss nach jedem Absturz neu gestartet werden und ist sofort wieder gegen denselben Angriff anfällig.

Abhilfe

Aktualisieren Sie Orthanc auf Version 1.12.11 oder höher. Der Patch begrenzt das Resize gegen eine konfigurierbare maximale Eintragsgröße und weist Einträge oberhalb dieses Limits mit BadFileFormat ab. Als Defense-in-Depth konfigurieren Sie an Ihrem Reverse-Proxy eine harte Content-Length-Obergrenze passend zu Ihrer DICOM-Workload — typischerweise einige hundert MB — was zusätzlich die Content-Length-Bombe in CVE-2026-5440 und die gzip-Bombe in CVE-2026-5438 eindämmt.

Checkliste für Betreiber

  • Version prüfen.

    curl -u <user>:<pass> http://<orthanc>:8042/system | jq .Version — der gepatchte Bereich beginnt bei 1.12.11.

  • Request-Größe am Reverse-Proxy begrenzen.

    Konfigurieren Sie eine Content-Length-Obergrenze passend zu Ihrer DICOM-Workload (client_max_body_size 512m; in nginx). Die gefälschte ZIP löst die ~4-GB-Allokation unabhängig von der Upload-Größe aus, doch ein Pro-Request-Body-Limit reduziert die Angriffsfläche für die Familie der „Metadaten-Vertrauen"-Bomben (diese Schwachstelle plus CVE-2026-5440 und CVE-2026-5438).

  • POST /instances rate-limiten.

    Der Angriff lebt von Bursts paralleler Uploads. Per-IP-Request-Rate- oder Concurrent-Connection-Limits am Proxy erhöhen die Angriffskosten spürbar.

  • Zugangsdaten überprüfen.

    Jede authentisierte Person mit POST /instances-Rechten kann die Schwachstelle auslösen. Prüfen Sie RegisteredUsers in orthanc.json und ein externes Authentifizierungsbackend; widerrufen Sie ungenutzte oder überprivilegierte API-Tokens.

  • Auf OOM-Restart-Zyklen achten.

    Alarmieren Sie auf wiederholte SIGKILL-Exits in Ihrer Service-Überwachung (z. B. journalctl -u orthanc | grep -E 'killed|OOM|exit code 137'). Ein wiederkehrender Zyklus deutet auf laufende Ausnutzung statt auf ein einmaliges Ressourcenereignis hin.

Bewertung im Detail

AV:NÜber das Netzwerk per HTTP-REST-API von Orthanc auf POST /instances erreichbar.AC:LEine einzelne gefälschte ZIP mit gepatchtem uncompressed_size-Feld; keine Timing- oder Umgebungsvorbedingungen.PR:NDer publizierte Vektor spiegelt Deployments wider, in denen Orthanc ohne HTTP-Authentifizierung exponiert ist, was Orthanc per Konfiguration erlaubt. Bei aktivem AuthenticationEnabled läuft die Auth-Prüfung vor der ZIP-Verarbeitung, sodass nur ein authentisierter Aufrufer die Allokation auslösen kann.UI:NKeine Interaktion durch eine zweite Person erforderlich.S:UDer OOM-Killer beendet den Orthanc-Prozess; betroffen ist der Prozess selbst.C:NKeine Informationen werden gelesen oder offengelegt.I:NEs werden keine Zustände modifiziert.A:HAnhaltende Beendigung des Orthanc-Prozesses; ein Neustart stellt den Dienst wieder her, lässt den Prozess aber sofort wieder angreifbar.

Referenzen

So können wir helfen

Wer wir sind

Die Sicherheitsforscher hinter diesem Sicherheitshinweis.

Dr. Simon Weber Profile

Dr. rer. nat. Simon Weber

Senior Pentester & MedSec-Forscher

Ich evaluiere Ihr SaMD mit derselben branchenprägenden Sicherheitsexpertise, die ich dem BAK MV für die Überarbeitung des B3S-Standards beigetragen habe.

  • Promotion über Krankenhaus-Cybersicherheit
  • Kritische Schwachstellen in Krankenhaussystemen gefunden
  • Alumni der THB MedSec-Forschungsgruppe
  • gematik Security Hero
Volker Schönefeld Profile

Dipl.-Inf. Volker Schönefeld

Senior Application Security Expert

Als ehemaliger CTO und Entwickler, der zum Pentester wurde, arbeite ich mit Ihrem Team zusammen, um Schwachstellen aufzudecken und Lösungen zu finden, die zu Ihrer Architektur passen.

  • 20+ Jahre als CTO, 50+ Mio. App-Downloads
  • Architektur und Absicherung großer IoT-Flotten
  • Certified Web Exploitation Specialist
  • gematik Security Hero

Penetrationstest gesucht?

Machine Spirits ist spezialisiert auf Sicherheitsbewertungen für Medizinprodukte und Gesundheits-IT. Von MDR-Penetrationstests bis C5-Cloud-Compliance helfen wir MedTech-Unternehmen, regulatorische Anforderungen zu erfüllen.