T09 · Insecure Skill Coding Practices
- Location
scripts/transfer_s3.mjs:218- Finding
Symbolic Links Bypass Sender Workspace Isolation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a legitimate S3 file-transfer skill, but its current implementation can bypass its promised sender workspace isolation and can use S3 credentials against caller-named buckets.
Install only in a controlled AIOS/OpenClaw environment with tightly scoped S3 credentials and trusted per-sender workspaces. Before broad use, fix symlink-aware path containment, reject or canonicalize symlinked sender/upload/generated paths, restrict downloads to approved inbox buckets/prefixes, and avoid runtime bucket creation unless explicitly required and separately authorized.
scripts/transfer_s3.mjs:218Symbolic Links Bypass Sender Workspace Isolation
scripts/transfer_s3.mjs:143User-Controlled S3 Bucket Enables Confused-Deputy Access
Referenced artifact was not completely inspected
- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`,不要在对话中临时写新的传输脚本。
Referenced artifact was not completely inspected
- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`,不要在对话中临时写新的传输脚本。
Referenced artifact was not completely inspected
- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`,不要在对话中临时写新的传输脚本。
Referenced artifact was not completely inspected
- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`,不要在对话中临时写新的传输脚本。
Referenced artifact was not completely inspected
- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`,不要在对话中临时写新的传输脚本。
The primary safety and operational instructions are written in Chinese only, with no indication that users may choose another language or that the locale restriction is intentional and justified. This can violate a language/locale policy when the skill is used in multilingual environments without explicit opt-in.
The skill requires access to sensitive S3 credentials and environment variables but does not declare an explicit tool scope or permissions boundary. In an agent environment, that ambiguity can let a broader runtime expose env-backed secrets or capabilities than intended, increasing the chance of unauthorized file access or credential misuse.
The manifest description and the entire operational guidance are written as prescriptive instructions in Chinese, and the file does not state that language choice is optional or limited to a specific region for compliance reasons. Under the policy, forcing a specific language or locale without user opt-in is a natural-language policy violation.
The skill is advertised as an S3 file-transfer helper, but the documentation introduces broader business-system operations like create/update/approve/delete flows. This scope expansion is dangerous because it can socially steer an agent into taking actions outside the skill's expected purpose, weakening operator trust and increasing the chance of misuse in a high-privilege deployment.
The manifest says this skill should handle file transfers via an AWS S3-compatible SDK and avoid external S3 client programs. Lines L081-L093 add package-management behavior, including checking dependencies and executing npm install, which is not part of the declared transfer behavior and introduces broader environment modification.
The dependency uses a caret version range, which allows newer compatible releases to be installed over time. This can introduce supply-chain risk if a future upstream release is compromised or introduces a breaking security regression, though the package itself is a common legitimate dependency and there is no direct evidence of malicious intent here.
"private": true,
"type": "module",
"dependencies": {
"@aws-sdk/client-s3": "^3.1045.0",
"dayjs": "^1.11.21",
"pino": "^10.3.1"
}
The use of a caret version for dayjs permits automatic resolution to later minor/patch versions, reducing build reproducibility and increasing exposure to supply-chain compromise. In a file-transfer skill, dependency trust matters because compromised code could affect handling of user files, but this package.json alone does not indicate active exploitation.
"type": "module",
"dependencies": {
"@aws-sdk/client-s3": "^3.1045.0",
"dayjs": "^1.11.21",
"pino": "^10.3.1"
}
}
The pino dependency is not pinned to an exact version, so future installs may pull different code than originally tested. This is a low-severity supply-chain weakness rather than an application logic flaw, but in an agent skill that processes file transfers and logs operational events, a compromised transitive dependency could still affect confidentiality or integrity.
"dependencies": {
"@aws-sdk/client-s3": "^3.1045.0",
"dayjs": "^1.11.21",
"pino": "^10.3.1"
}
}
No suspicious patterns detected.