T09 · Insecure Skill Coding Practices
- Location
scripts/create_realtime_call.py:170- Finding
Credentials can be exposed through command-line arguments and plaintext configuration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is coherent for Baidu AIOB outbound calling, but needs Review because it can trigger real phone calls and logs personal call details without a confirmation or redaction layer.
Install only if you intend to let the agent create Baidu AIOB outbound calls. Use dedicated low-privilege AIOB credentials, avoid passing secrets on the command line, restrict access to config and logs, and confirm recipient number/message before any call or scheduled call is created.
scripts/create_realtime_call.py:170Credentials can be exposed through command-line arguments and plaintext configuration
scripts/create_realtime_call.py:208Outbound-call personal data is unconditionally printed to standard output
scripts/create_realtime_call.py:72Full authentication error responses can leak access tokens into error logs
The skill instructs use of local configuration files and outbound API calls to Baidu AIOB, but it does not declare any explicit tool scope or permissions boundaries. That creates a real security governance gap: an agent may be able to read local files and make network requests without the user being clearly informed of or protected by least-privilege constraints.
This skill is designed to place outbound calls and transmit phone numbers plus message content to an external calling platform, yet the skill text does not present a clear user-facing warning or consent notice about third-party calling and data transfer. In this context, that omission is meaningful because the skill handles personal contact data and can contact third parties on the user's behalf, increasing privacy, compliance, and abuse risk.
The documentation instructs the agent to create outbound calls and one-shot cron jobs via subprocess commands, but it does not require an explicit confirmation step, consent check, or user-facing warning before triggering real-world actions. In this skill context, that is risky because it can cause unintended phone calls or scheduled tasks based on ambiguous natural-language extraction, creating privacy, harassment, or operational-impact issues.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def get_access_token(access_key: str, secret_key: str, timeout: int = 15) -> str:
payload = {"accessKey": access_key, "secretKey": secret_key}
resp = requests.post(TOKEN_URL, json=payload, timeout=timeout)
resp.raise_for_status()
data = resp.json()
The script transmits phone numbers, dialog variables, and optional plaintext/ciphertext fields to a remote service to trigger real-world phone calls, but it applies no validation, consent enforcement, or destination restrictions. In a skill/agent environment, this can enable privacy-impacting data exfiltration and unauthorized outbound actions if upstream prompts or automation supply attacker-controlled inputs.
"Content-Type": "application/json",
"Authorization": access_token,
}
resp = requests.post(REALTIME_CALL_URL, headers=headers, json=body, timeout=timeout)
resp.raise_for_status()
return resp.json()
The script can immediately place outbound calls using phone/contact data with no interactive confirmation, consent check, allowlist, or dry-run safeguard. In an agent-skill context, this makes accidental or unauthorized real-world actions more likely, especially if user input is mapped directly to call parameters or the skill is triggered automatically.
This markdown file contains user-facing natural-language instructions exclusively in Chinese, and there is no indication that the skill is region-specific or that users can opt into this locale. Under the stated policy, forcing a specific language without user choice can be a natural-language policy violation.
The entire skill guidance, examples, and command semantics are presented only in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy violation.
The script reads accessKey and secretKey from config or CLI and immediately uses them to request an access token from a remote service. There is no comment, warning, or user-facing notice indicating that credentials from the local config will be transmitted for authentication.
No suspicious patterns detected.