T09 · Insecure Skill Coding Practices
- Location
SKILL.md:28- Finding
Plaintext Contact Exports Recommended for Version Control or Shared Storage
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent Toingg automation, but it needs review because it can upload contact data and trigger calls or WhatsApp broadcasts with weak consent and retention safeguards.
Install only if you are authorized to use the Toingg account and to contact the recipients. Use a limited Toingg token, verify recipient opt-in and applicable messaging/calling rules before bulk sends, avoid committing or broadly sharing contact exports and analytics, and store generated files in access-controlled locations with short retention.
SKILL.md:28Plaintext Contact Exports Recommended for Version Control or Shared Storage
SKILL.md:24Unpinned Third-Party Dependency Installation
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"Accept": "application/json",
"Content-Type": "application/json",
}
response = requests.post(url, headers=headers, json=contacts, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"sort": sort,
}
response = requests.get(API_URL, headers=headers, params=params, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"Authorization": f"Bearer {token}",
"Accept": "application/json",
}
response = requests.get(API_URL, headers=headers, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"extraParams": {},
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"Accept": "application/json",
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, params=params, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
The skill explicitly enables bulk WhatsApp outreach from uploaded Excel contact sheets, but it does not require any consent check, lawful-basis verification, recipient opt-in confirmation, or warning about privacy, spam, and data-protection obligations. In context, this makes misuse easier by operationalizing mass messaging against real contact data while normalizing storage and processing of personal information.
The workflow instructs users to upload names and phone numbers to an external messaging service and send WhatsApp templates, but it omits any guidance on consent, lawful basis, data minimization, retention, or secure handling of contact data. This creates a real privacy and compliance risk because operators may process personal data improperly or disclose it to third parties without adequate safeguards.
This markdown template documents a payload that includes a real notification phone field, lead notifications enabled, and outbound calling enabled, but it does not warn users that using these settings may place calls or send alerts affecting external parties. For markdown files, the skill description should disclose behaviors that can affect user data, privacy, or system integrity.
This JSON config hard-codes the language to "english" for the campaign, and similar fixed language settings appear in other campaign entries as well. Per the policy, forcing a specific language without offering a user choice or documenting a justified locale constraint is a natural-language policy violation.
The configuration explicitly fixes the campaign language to "english-us". Because the file does not show any opt-in, fallback, or documented justification for this locale constraint, it violates the language/locale policy criteria.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"Accept": "application/json",
"Content-Type": "application/json",
}
response = requests.post(url, headers=headers, json=contacts, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"Accept": "application/json",
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, params=params, json=payload, timeout=60)
try:
response.raise_for_status()
except requests.HTTPError as exc:
This code performs a network POST to an external API using campaign, contact-list, and payload data, but there is no confirmation prompt, explicit log message at send time, or warning comment/docstring explaining that user-provided data will be transmitted. For a code file, network calls that transmit user or system data should have some visible disclosure unless the warning is clearly documented elsewhere in the skill.
The example payload sets the language to "english" and the surrounding text does not indicate that language is optional, user-selectable, or required for a documented regional reason. This can be read as forcing a specific language by default without user opt-in.
No suspicious patterns detected.