Backstage Pass: Breaking Out of the Sandbox with Symlinks
Vulnerability ID: CVE-2026-24047
CVSS Score: 6.3
Published: 2026-01-21
A logic flaw in the Backstage framework's path resolution utility allowed attackers to bypass sandbox restrictions using symlinks to non-existent files. By exploiting how the system handled 'phantom' paths, malicious actors could escape the Scaffolder workspace and write files to arbitrary locations on the host filesystem.
TL;DR
CVE-2026-24047 is a path traversal vulnerability in Backstage's resolveSafeChildPath function. It arises from improper validation of symbolic links when the target file does not yet exist. Attackers can chain symlinks to escape the intended directory boundary, potentially leading to Remote Code Execution (RCE) by overwriting configuration files or injecting malicious scripts.
⚠️ Exploit Status: POC
Technical Details
- CWE ID: CWE-59 (Link Following)
- CVSS v3.1: 6.3 (Medium)
- Attack Vector: Network (via Scaffolder Templates)
- Impact: Arbitrary File Write / Potential RCE
- Affected Component: resolveSafeChildPath
- Fix Commit: ae4dd5d1572a4f639e1a466fd982656b50f8e692
Affected Systems
- Backstage Scaffolder
- Backstage Backend Plugins using
resolveSafeChildPath - Node.js applications using
@backstage/cli-commonfor path validation -
@backstage/backend-plugin-api: < 0.1.17 (Fixed in:
0.1.17) -
@backstage/cli-common: < patched version (Fixed in:
Commit ae4dd5d)
Code Analysis
Commit: ae4dd5d
Fix resolveSafeChildPath logic to handle non-existent paths and dangling symlinks recursively
function resolveRealPath(path) { ... // Recursive fix implementation }
Exploit Details
- Hypothetical: Exploitation involves creating a Scaffolder template that symlinks to a sensitive directory and writes a new file through that link.
Mitigation Strategies
- Input Validation: Ensure recursive resolution of all path components, including non-existent ones.
- Least Privilege: Run Backstage services as a low-privileged user with restricted write permissions.
- Containerization: Use read-only filesystems for the application container, allowing writes only to specific tmp volumes.
Remediation Steps:
- Identify usage of
@backstage/backend-plugin-apiin yourpackage.json. - Update
@backstage/backend-plugin-apito version0.1.17or higher. - Update
@backstage/cli-commonif used directly. - Restart the Backstage backend service.
- Verify the fix by attempting to register a template that uses symlinks (it should now fail).
References
Read the full report for CVE-2026-24047 on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)