T09 · Insecure Skill Coding Practices
- Location
scripts/generate_hume_speech.js:47- Finding
Caller-Controlled Output Path Allows Arbitrary File Overwrite
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This TTS skill does what it claims, but it sends text to a remote API and can overwrite arbitrary writable files through an unconstrained output path.
Install only if you are comfortable sending the text you convert to the SkillBoss/HeyBossAI service and exposing SKILLBOSS_API_KEY to the script. Use a dedicated output directory with non-sensitive filenames, avoid converting secrets or private data, and prefer a version that constrains output paths and regenerates the lockfile from the current package.json.
scripts/generate_hume_speech.js:47Caller-Controlled Output Path Allows Arbitrary File Overwrite
scripts/package-lock.json:1Stale Lockfile Installs an Undeclared and Unused Dependency Tree
scripts/generate_speech.js:25Unbounded and Insufficiently Validated TTS API Responses
The lockfile pins form-data to 4.0.5, which is flagged as affected by a CRLF injection issue in multipart field names. Even though this file is only a dependency manifest, it directly determines the installed package version, so the vulnerable library would be present at runtime if the code constructs multipart requests with attacker-controlled field names or filenames. In this TTS skill context, the package is pulled transitively through the OpenAI client, which makes exploitability less direct but still plausible if untrusted input is forwarded into multipart form construction.
The skill declares access to an environment secret and implies networked script execution, but it does not restrict tool scope with explicit permissions or allowed-tools. In an agent environment, this increases the chance the skill can invoke broader capabilities than intended, including accessing secrets or making outbound requests beyond the minimal TTS workflow.
The description says to use the skill when the user asks for 'an audio message, a voice reply, or to hear something' and includes the natural phrase 'of vive voix'. These triggers are broad conversational expressions without clear boundaries or exclusion conditions, which could cause unintended invocation in ordinary chat contexts.
The script sends the full user-provided text to a third-party remote API for speech generation, but there is no explicit disclosure, consent check, or safeguard against submitting sensitive content. In a TTS skill, users may provide private messages, credentials, or personal data, so silent external transmission creates a real privacy and data-handling risk even if the behavior is functionally necessary.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const options = program.opts();
const API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = 'https://api.heybossai.com/v1';
async function main() {
if (!API_KEY) {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const options = program.opts();
const API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = 'https://api.heybossai.com/v1';
async function main() {
if (!API_KEY) {
The dependency version for commander is specified with a caret range (^11.0.0), which permits automatic installation of newer compatible releases rather than a single audited version. This creates supply-chain risk because a compromised or breaking upstream release could be pulled into the build or deployment environment without explicit review.
"description": "Helper script for SkillBoss API Hub TTS",
"main": "generate_speech.js",
"dependencies": {
"commander": "^11.0.0"
}
}
Detected: suspicious.env_credential_access