{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-71268", "assignerOrgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c", "state": "PUBLISHED", "assignerShortName": "TuranSec", "dateReserved": "2026-08-05T12:23:34.967Z", "datePublished": "2026-08-05T12:26:15.867Z", "dateUpdated": "2026-08-10T11:46:39.944Z" }, "containers": { "cna": { "title": "OpenPLC Runtime v3 Path Traversal in Structured Text FILE Directive Leading to Arbitrary File Write", "descriptions": [ { "lang": "en", "value": "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.", "supportingMedia": [ { "type": "text/html", "base64": false, "value": "

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.

" } ] } ], "problemTypes": [ { "descriptions": [ { "lang": "en", "description": "CWE-22", "cweId": "CWE-22", "type": "CWE" } ] } ], "affected": [ { "vendor": "thiagoralves", "product": "OpenPLC_v3", "programFiles": [ "webserver/openplc.py" ], "versions": [ { "version": "0", "lessThanOrEqual": "*", "status": "affected", "versionType": "custom" } ], "defaultStatus": "unaffected" } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H", "baseScore": 9.9, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH" } } ], "references": [ { "url": "https://github.com/thiagoralves/OpenPLC_v3", "tags": [ "third-party-advisory" ] }, { "url": "https://github.com/thiagoralves/OpenPLC_v3/blob/master/webserver/openplc.py", "tags": [ "third-party-advisory" ] } ], "credits": [ { "lang": "en", "value": "Alibek Baxtiyorov", "type": "finder" } ], "providerMetadata": { "orgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c", "shortName": "TuranSec", "dateUpdated": "2026-08-10T11:46:39.944Z" }, "source": { "discovery": "EXTERNAL" }, "datePublic": "2026-08-05T12:26:15.867Z" }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "timestamp": "2026-08-05T15:41:39.300095Z", "id": "CVE-2026-71268", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "total" } ], "role": "CISA Coordinator", "version": "2.0.3" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2026-08-05T15:41:47.330Z" } } ] } }