OpenPLC Runtime v3 Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write
Default status is the baseline for the product, each version can override it (e.g. patched versions marked unaffected).
| Vendor | Product | Default status | Versions | ||||||
|---|---|---|---|---|---|---|---|---|---|
| thiagoralves | OpenPLC_v3 | unaffected |
|
No data.
No data.
| Vendor | Product | Versions | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Thiagoralves | Openplc V3 |
|
No CVSS v4.0
No CVSS v3.0
No CVSS v2
This CVE is not in the KEV list.
Exploit prediction score: < 1% (0.580% probability within 30 days)
| Type | Values Removed | Values Added |
|---|---|---|
| Description | OpenPLC Runtime v3's compile_program() function (webserver/openplc.py) parses `(*FILE:path content*)` directives from uploaded Structured Text (.st) program files and writes the referenced content to `os.path.join('./core', file_path)` with no validation that file_path stays within the ./core directory. A crafted .st file containing a directive such as `(*FILE:../../../etc/cron.d/x * * * * root <command>*)` writes attacker-controlled content to an arbitrary filesystem path, enabling remote code execution (e.g. via cron or SSH authorized_keys). A path-validation function, validate_file_path(), exists elsewhere in the codebase (webserver/credentials.py) but is never invoked from compile_program(), leaving the sink unprotected. OpenPLC additionally ships with hardcoded default credentials (openplc:openplc), lowering the practical bar for exploitation. | OpenPLC Runtime v3's compile_program function (webserver/openplc.py) parses directives from uploaded Structured Text (.st) program files and writes the referenced content to with no validation that file_path stays within the ./core directory. A path-validation function, validate_file_path, exists elsewhere in the codebase (webserver/credentials.py) but is never invoked from compile_program, leaving the sink unprotected. |
| Title | OpenPLC Runtime v3 - Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write | OpenPLC Runtime v3 Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write |
| Type | Values Removed | Values Added |
|---|---|---|
| Title | OpenPLC Runtime v3 Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write | OpenPLC Runtime v3 - Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write |
| Type | Values Removed | Values Added |
|---|---|---|
| First Time appeared |
Thiagoralves
Thiagoralves openplc V3 |
|
| Vendors & Products |
Thiagoralves
Thiagoralves openplc V3 |
| Type | Values Removed | Values Added |
|---|---|---|
| Metrics |
ssvc
|
| Type | Values Removed | Values Added |
|---|---|---|
| Description | OpenPLC Runtime v3's compile_program() function (webserver/openplc.py) parses `(*FILE:path content*)` directives from uploaded Structured Text (.st) program files and writes the referenced content to `os.path.join('./core', file_path)` with no validation that file_path stays within the ./core directory. A crafted .st file containing a directive such as `(*FILE:../../../etc/cron.d/x * * * * root <command>*)` writes attacker-controlled content to an arbitrary filesystem path, enabling remote code execution (e.g. via cron or SSH authorized_keys). A path-validation function, validate_file_path(), exists elsewhere in the codebase (webserver/credentials.py) but is never invoked from compile_program(), leaving the sink unprotected. OpenPLC additionally ships with hardcoded default credentials (openplc:openplc), lowering the practical bar for exploitation. | |
| Title | OpenPLC Runtime v3 Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write | |
| Weaknesses | CWE-22 | |
| References |
| |
| Metrics |
cvssV3_1
|