T08 · Insecure Dependencies
- Location
SKILL.md:20- Finding
Unpinned Third-Party Dependency Creates Supply-Chain Risk
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This restaurant camera inspection skill appears purpose-aligned, but it handles live camera images and Ezviz secrets in ways that can expose sensitive data, so it needs review before installation.
Install only in an environment where you are authorized to capture and analyze the camera feeds. Prefer environment variables or a secret manager over command-line secrets, remove or gate debug logging before production use, pin dependencies, rotate any secret previously passed in shell history, and confirm privacy/legal requirements for employee or customer imagery sent to Ezviz services.
SKILL.md:20Unpinned Third-Party Dependency Creates Supply-Chain Risk
scripts/restaurant_inspection.py:144Application Secret Can Be Exposed Through Command-Line Arguments
scripts/restaurant_inspection.py:103Unconditional Debug Logging May Disclose Sensitive API Data
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return os.getenv(env_var) or arg_value or default
def get_access_token(app_key, app_secret):
"""Get access token from Ezviz API"""
print("=" * 70)
print("[Step 1] Getting access token...")
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return os.getenv(env_var) or arg_value or default
def get_access_token(app_key, app_secret):
"""Get access token from Ezviz API"""
print("=" * 70)
print("[Step 1] Getting access token...")
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return os.getenv(env_var) or arg_value or default
def get_access_token(app_key, app_secret):
"""Get access token from Ezviz API"""
print("=" * 70)
print("[Step 1] Getting access token...")
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return os.getenv(env_var) or arg_value or default
def get_access_token(app_key, app_secret):
"""Get access token from Ezviz API"""
print("=" * 70)
print("[Step 1] Getting access token...")
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return os.getenv(env_var) or arg_value or default
def get_access_token(app_key, app_secret):
"""Get access token from Ezviz API"""
print("=" * 70)
print("[Step 1] Getting access token...")
The skill requires environment-variable access and outbound network access to third-party endpoints but does not declare an explicit tool scope such as permissions or allowed-tools. That mismatch can cause the runtime or user to underappreciate what the skill is capable of, increasing the chance of unintended secret exposure or unauthorized external communication.
The skill description forces Chinese-language interaction/documentation at the top-level description, and the rest of the file continues in Chinese without indicating that users may choose another language. This can violate language/locale policy requirements when no user opt-in or documented locale restriction is provided.
The skill explicitly transmits sensitive operational data off-host: camera images, device identifiers, prompts, and an access token to remote Ezviz services. In this restaurant/kitchen surveillance context, those images may contain people, work practices, and private premises details, so external transmission materially increases privacy, confidentiality, and compliance risk.
AI 智能体分析接口调用格式:
curl --location --request POST 'https://aidialoggw.ys7.com/api/service/open/intelligent/agent/engine/agent/anaylsis' \
--header 'accessToken: YOUR_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
The script captures images from restaurant devices and sends the image URL plus analysis prompt to an external AI service, but it provides no explicit privacy notice, consent check, data-classification control, or retention guidance. In a restaurant or kitchen setting, imagery may contain employees, customers, operational details, or other sensitive visual data, so silent external transmission creates a real privacy and compliance risk.
The code transmits image-derived data to an external analysis endpoint, which is an actual data egress path. Although external transmission is part of the skill's intended function, it still represents a security-relevant boundary crossing because sensitive camera imagery and operational context leave the local trust boundary and are sent to a remote service.
try:
print(f"[INFO] Sending analysis request to: {ANALYSIS_URL}")
response = requests.post(ANALYSIS_URL, json=payload, headers=headers, timeout=60)
# Debug output
print(f"[DEBUG] Payload: appId={agent_id[:8]}..., mediaType=image, text={analysis_text[:50]}..., dataType=url, data={pic_url[:30]}...")
The default analysis prompt is entirely in Chinese and instructs the model to produce categorized inspection output, but the file does not indicate that Chinese is optional or that the skill is intentionally restricted to a Chinese-language workflow. This can violate language/locale policy when users are not given a choice or opt-in.
No suspicious patterns detected.