T09 · Insecure Skill Coding Practices
- Location
scripts/sandbox.py:132- Finding
Unrestricted Local File Upload and Overwrite Crosses the Sandbox Security Boundary
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This remote sandbox skill is coherent for isolated browsing and code execution, but needs Review because it can upload arbitrary local files to Novita and overwrite local files from sandbox output without enforced path limits or confirmation.
Review this before installing if you will use it around private workspaces or credentials. Use a dedicated environment, pin the Novita SDK to a reviewed version, give it only the Novita API key it needs, avoid uploading secrets or broad workspace files, download only into a disposable staging directory, and kill sandboxes when finished to clear preserved state and stop billing.
scripts/sandbox.py:132Unrestricted Local File Upload and Overwrite Crosses the Sandbox Security Boundary
scripts/requirements.txt:1Novita SDK Dependency Is Not Reproducibly Pinned
The skill claims it is not for reading or writing local user files, yet it documents upload and download operations that necessarily read from and write to local paths. That mismatch can mislead users or higher-level agents into trusting the skill in contexts where local workspace isolation matters, creating a path for unintended exfiltration of local files to the remote sandbox or untrusted artifacts being written back locally.
Referenced artifact was not completely inspected
**Important:** This skill requires `novita-sandbox>=1.0.5`. Do NOT modify `scripts/sandbox.py` — the SDK version is tested and pinned.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
python3 skills/novita-sandbox/scripts/sandbox.py create --template browser-chromium --timeout 120
python3 skills/novita-sandbox/scripts/sandbox.py exec <sandbox_id> \
"curl -sL https://example.com" --timeout 30
The skill exposes direct host filesystem access via open(args.local_path, ...) in both upload and download operations, despite the manifest explicitly stating it is not for reading or writing local user files. In an agent setting, this creates a path for a remote-execution-focused tool to exfiltrate local files into the sandbox or overwrite arbitrary local files from sandbox-controlled content, breaking the intended trust boundary.
For a skill whose stated purpose is remote sandbox execution and browsing, host filesystem access is unnecessary and materially expands the attack surface. If an agent can be induced to use upload or download, untrusted sandbox workloads can indirectly read from or write to the local machine, enabling data theft or local file tampering.
The skill invokes capabilities that interact with environment variables and local file operations, but it declares no explicit tool scope or permissions boundary. In a security-sensitive skill that handles untrusted code and browsing, missing scope declarations increase the chance that an agent can overreach into local resources or expose secrets because the enforcement contract is unclear.
The code creates sandboxes with secure=False and allow_internet_access=True while presenting the tool as a secure sandbox for untrusted code and browser activity. This mismatch can cause operators or higher-level agents to assume stronger isolation than is actually configured, increasing the likelihood of risky use of the environment and broader data exposure over the network.
The download command writes sandbox-provided content directly to an arbitrary host path without any confirmation, path restriction, or warning. In this context, the sandbox may contain untrusted code output, so writing it onto the host can overwrite files, plant malicious scripts, or place attacker-controlled content in sensitive locations.
The kill command performs an irreversible destructive action by destroying a sandbox, but the implementation provides no confirmation prompt or warning at execution time. The CLI help says 'Destroy a sandbox,' but there is no stronger user disclosure in code for this destructive operation.
The dependency is specified with a lower-bound range (>=1.0.5) instead of an exact version, so future installs may pull in different releases than were originally reviewed or tested. In a security-sensitive sandbox skill, this increases supply-chain and reproducibility risk because a later compromised, vulnerable, or behavior-changing package version could be installed automatically.
novita-sandbox>=1.0.5