T08 · Insecure Dependencies
- Location
SKILL.md:66- Finding
Unpinned Third-Party TTS Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill does what it claims by converting text to audio and sending it as a Feishu voice message, with privacy and hardening cautions but no hidden or purpose-mismatched behavior found.
Install this only if you want text sent through Edge-TTS/Microsoft and Feishu as a voice message. Avoid using it for secrets or regulated personal data, use a least-privilege Feishu app and explicit recipient when possible, pin edge-tts in your environment, and avoid running it on shared machines unless temporary-file handling is improved.
SKILL.md:66Unpinned Third-Party TTS Dependency
bin/tts-send.js:73Predictable Audio Files Written to a Shared Temporary Directory
bin/tts-send.js:157Generated Audio Is Not Reliably Deleted After Failures
The skill explicitly requires environment secrets and performs networked actions, but it does not declare any tool scope or allowed-tools boundaries. This weakens policy enforcement and makes it easier for an agent runtime to grant broader-than-necessary access, especially for a skill that can transmit content and use credentials to contact external services.
The trigger text is broad enough to match common requests like '用语音回复' or '朗读内容', which can cause the skill to activate in ordinary conversations without strong user intent to send data externally. In this skill's context, accidental activation is more dangerous because activation leads to outbound transmission of user-provided text and message delivery to a Feishu recipient.
The description does not clearly warn that input text will be sent to external services for TTS generation and then uploaded to Feishu, potentially exposing sensitive content to third parties. Because the skill is designed to transform arbitrary user text and send it over the network using configured credentials, missing disclosure materially increases privacy and data-leak risk.
The help text explicitly states the input must be Chinese text and the default voice is a zh-CN voice, presenting the skill as Chinese-only behavior. The file does not offer a language choice or indicate that this locale restriction is optional, which violates the policy against forcing a specific language without user opt-in.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
// ============ 飞书 API ================
async function getAccessToken() {
const resp = await fetch('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ app_id: FEISHU_APP_ID, app_secret: FEISHU_APP_SECRET }),
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
form.append('file_type', 'opus');
if (durationMs) form.append('duration', String(Math.round(durationMs)));
const resp = await fetch('https://open.feishu.cn/open-apis/im/v1/files', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` },
body: form,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
async function sendAudioMessage(token, fileKey) {
const resp = await fetch('https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
Detected: suspicious.dangerous_exec