TL;DR: CVE-2026-58302 in linuxcnc-uspace lets a user-controlled module name escape the trusted directory and reach dlopen() under elevated privileges, so a local user or code execution foothold can become root on affected LinuxCNC systems, according to Corgea. The issue reinforces that path sanitisation, privilege dropping, and host hardening must be treated as one control plane, not separate fixes.
Editorial analysis by NHI Mgmt Group, based on content published by Corgea: “CVE-2026-58302: LinuxCNC rtapi_app path traversal to root”.
Key questions
Q: What breaks when a privileged helper accepts module names from untrusted local input?
A: The trust boundary breaks because the module name stops being a label and becomes a filesystem path chosen by the attacker.
Q: Why do privileged plugin loaders turn local access into full system compromise?
A: Because the loader runs with more power than the caller.
Q: How can security teams tell whether a module-loading path is still safe?
A: Check whether the program accepts only known basenames, rejects traversal tokens, and drops privileges before any dynamic load occurs.
Practitioner guidance
- Audit privileged module loaders for traversal exposure Review any SUID-root or otherwise elevated helper that turns user input into a filesystem path for dlopen(), plugin loading, or module resolution.
- Remove standing privilege from rtapi_app where possible If the workflow permits it, drop the SUID bit or equivalent elevated execution from rtapi_app and verify that LinuxCNC functions still operate under the least-privilege model your environment supports.
- Constrain module names to an explicit allowlist Permit only fixed basenames that are known in advance and reject any input containing path separators or traversal markers before path construction.
Bottom line: This issue shows that a local-only vulnerability can still be a full host compromise when a privileged helper loads attacker-controlled code.
Explore further
View Full Forum → | NHI Foundation Course → | Our Services → | Read the full analysis →
Privileged plugin loading is a control-plane issue, not a narrow application bug. This case shows that dynamic loading inside an elevated helper creates an identity boundary as much as a filesystem boundary. If the process identity is still privileged when untrusted input reaches dlopen(), the trust decision has already failed. Practitioners should treat module-loading paths as part of privileged access governance, not just secure coding.
A question worth separating out:
Q: Should organisations prioritize privilege reduction or path sanitisation first?
A: Path sanitisation and privilege reduction should be implemented together, but privilege reduction has the larger blast-radius benefit if the process can no longer load code as root. Sanitisation prevents the bad path, while privilege reduction limits the damage if a validation gap appears elsewhere. Both are needed for a defensible control plane.
👉 Read our full editorial: LinuxCNC path traversal shows how privileged dlopen() turns local code into root