T09 · Insecure Skill Coding Practices
- Location
scripts/vultr-inference.py:29- Finding
Bearer credential may be disclosed through unrestricted HTTP redirects
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This looks like a legitimate Vultr inference helper, but it needs Review because it uses a broad Vultr API key and downloads remote output without enough safeguards.
Install only if you are comfortable sending prompts and chat messages to Vultr and using a Vultr API key from your local config. Prefer an inference-only, least-privileged key if available, keep the key file private, avoid sensitive prompts, and review the script before using generated image downloads or custom output paths.
scripts/vultr-inference.py:29Bearer credential may be disclosed through unrestricted HTTP redirects
scripts/vultr-inference.py:45Untrusted API-provided URLs are downloaded without destination or size validation
The description overstates the skill's capabilities. While the code does support Vultr Inference image generation and uses Flux-style image models, it does not contain any logic for text generation, chat/completions, or invoking LLM endpoints. The additional model-listing command is related to the API and not inherently suspicious, but the main mismatch is that the declared purpose says the skill can generate both images and text, whereas the supplied code only handles image generation and listing models.
The skill performs network operations against an external API but does not declare any explicit tool scope or permissions. This weakens reviewability and enforcement, making it easier for a skill to transmit user data or use credentials without clear platform-level consent boundaries.
The skill documents sending prompts and chat messages to a third-party inference provider but does not clearly warn users that their inputs leave the local environment. This can lead to unintended disclosure of sensitive prompts, proprietary data, or personal information to an external service.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST "https://api.vultrinference.com/v1/images/generations" \
-H "Authorization: Bearer $VULTR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST "https://api.vultrinference.com/v1/chat/completions" \
-H "Authorization: Bearer $VULTR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
API_KEY = open(os.path.expanduser("~/.config/vultr/api_key")).read().strip()
# Generate image
response = requests.post(
"https://api.vultrinference.com/v1/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
API_KEY = open(os.path.expanduser("~/.config/vultr/api_key")).read().strip()
# Generate image
response = requests.post(
"https://api.vultrinference.com/v1/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
The manifest describes a skill that can generate both images and text using Vultr Inference API, but this file only defines image generation and a model-listing command. There is no code path for text completions or LLM prompt handling, so the implemented behavior is materially narrower than the claimed scope.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import sys
import urllib.request
API_BASE = "https://api.vultrinference.com/v1"
def get_api_key():
key_path = os.path.expanduser("~/.config/vultr/api_key")
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import sys
import urllib.request
API_BASE = "https://api.vultrinference.com/v1"
def get_api_key():
key_path = os.path.expanduser("~/.config/vultr/api_key")
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import sys
import urllib.request
API_BASE = "https://api.vultrinference.com/v1"
def get_api_key():
key_path = os.path.expanduser("~/.config/vultr/api_key")
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import sys
import urllib.request
API_BASE = "https://api.vultrinference.com/v1"
def get_api_key():
key_path = os.path.expanduser("~/.config/vultr/api_key")
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import sys
import urllib.request
API_BASE = "https://api.vultrinference.com/v1"
def get_api_key():
key_path = os.path.expanduser("~/.config/vultr/api_key")
The documentation instructs reading an API key from disk without an explicit warning about secure credential handling. Although this does not exfiltrate the key by itself, it normalizes sensitive secret use without advising on file permissions, redaction, or avoiding accidental exposure in logs and examples.
The inline module documentation explicitly frames this helper as only for image generation, while the skill-level description claims broader support for text generation as well. This creates an intent/documentation inconsistency about the scope of the skill's functionality.