T09 · Insecure Skill Coding Practices
- Location
SKILL.md:140- Finding
Unauthenticated Webhook Payload Disclosure Through a Publicly Exposable Endpoint
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent API-testing helper, but its webhook example can publicly expose captured payloads without authentication or warnings.
Review before installing or using. Use only trusted endpoints, test credentials, and synthetic webhook data. Do not expose the Flask listener publicly unless you add authentication, signature validation, redaction, and access controls, and avoid logging full payloads or hardcoding real secrets.
SKILL.md:140Unauthenticated Webhook Payload Disclosure Through a Publicly Exposable Endpoint
SKILL.md:209Unpinned Third-Party Dependency Installation
The skill explicitly encourages authenticated API testing and webhook exposure, which inherently involves sending credentials, tokens, and potentially sensitive payloads over the network, yet it provides no user-facing warning or safety guidance. In a skill meant for general developer use, this omission increases the chance of accidental secret disclosure to third-party services, logs, or publicly exposed webhook endpoints.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return {'error': str(e)}
test_get('https://api.github.com/users/octocat')
### POST with JSON Body
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
default_headers.update(headers)
try:
response = requests.post(
url,
json=data,
headers=default_headers,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return test_get(url, headers)
# Bearer token
test_with_auth('https://api.example.com/data', token='your_token_here')
# Basic auth
test_with_auth('https://api.example.com/data', username='admin', password='secret')
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return test_get(url, headers)
# Bearer token
test_with_auth('https://api.example.com/data', token='your_token_here')
# Basic auth
test_with_auth('https://api.example.com/data', username='admin', password='secret')
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if method == 'GET':
response = requests.get(url, headers=headers, timeout=30)
elif method == 'POST':
response = requests.post(url, json=data, headers=headers, timeout=30)
elif method == 'PUT':
response = requests.put(url, json=data, headers=headers, timeout=30)
elif method == 'DELETE':
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
elif method == 'POST':
response = requests.post(url, json=data, headers=headers, timeout=30)
elif method == 'PUT':
response = requests.put(url, json=data, headers=headers, timeout=30)
elif method == 'DELETE':
response = requests.delete(url, headers=headers, timeout=30)
The Basic auth example uses realistic-looking inline credentials ('admin' / 'secret') without warning that such values may be copied into real workflows, shell history, notebooks, or logs. While this is demonstrative rather than directly exploitable code, it normalizes unsafe handling of secrets and can lead to accidental credential exposure during testing.
No suspicious patterns detected.