T09 · Insecure Skill Coding Practices
- Location
auto_process_all_v9_4.py:254- Finding
Disabled cloud features can still transmit user content
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its image-to-document purpose, but it can send screenshot content to cloud services even when related config flags appear disabled.
Review before installing. Use only a dedicated work folder, avoid sensitive screenshots unless you are comfortable sending them to the configured cloud providers, remove unused API keys from config files instead of relying on enabled:false, and run dependency installation in an isolated virtual environment.
auto_process_all_v9_4.py:254Disabled cloud features can still transmit user content
auto_process_all_v9_4.py:652LLM-controlled category names can escape the intended output directory
setup_wizard.py:101Setup automatically installs dependencies without reproducible integrity verification
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"X-TC-Region": "ap-guangzhou"
}
resp = requests.post(f"https://{host}", data=payload_str, headers=headers, timeout=30)
if resp.status_code == 200:
result = resp.json()
if 'Response' in result and 'Choices' in result['Response']:
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
model = os.getenv('SILICONFLOW_MODEL', 'Qwen/Qwen3-8B')
url = f"{base_url}/chat/completions"
resp = requests.post(url, json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 300, "temperature": 0.3
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
try:
api_key = os.getenv('MOONSHOT_API_KEY', '')
url = "https://api.moonshot.cn/v1/chat/completions"
resp = requests.post(url, json={
"model": "moonshot-v1-8k",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
)
if not base_url:
return None
resp = requests.post(
f"{base_url}/chat/completions",
json={
# 注意:doubao-lite-4k 已下线,使用 volcengine/doubao-seed-2.0-mini
The skill synchronizes processed OCR/LLM content to the external IMA note service and authenticates with secrets loaded from local config/environment, but there is no clear per-run consent or transmission warning at the point of export. In a screenshot-to-knowledge-base tool, this is dangerous because users may feed sensitive screenshots, causing inadvertent exfiltration of extracted content to a remote service.
'ima-openapi-apikey': self.api_key,
'Content-Type': 'application/json'
}
response = requests.post(f"{self.base_url}/{endpoint}", json=payload, headers=headers, timeout=30)
if response.status_code == 200:
return response.json()
elif response.status_code == 403:
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
python auto_process_all_v9_4.py --progress
python auto_process_all_v9_4.py --clear
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
python auto_process_all_v9_4.py --progress
python auto_process_all_v9_4.py --clear
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
The skill is presented primarily as an image-to-knowledge tool, but the file materially includes a configuration-wizard flow that reads local templates and generates credential-bearing YAML files. Under-describing credential-management behavior is risky because users may not realize the skill is orchestrating sensitive configuration file creation and processing.
Referenced artifact was not completely inspected
- ✅ **路径修复**:`SKILL.md` 移除所有硬编码示例路径,改为 `{工作文件夹}` 占位符
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
sys.path.insert(0, '.')
from dotenv import load_dotenv
env_path = Path('.') / '.env'
if env_path.exists():
load_dotenv(dotenv_path=env_path)
else:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
if env_path.exists():
load_dotenv(dotenv_path=env_path)
else:
print("[INFO] .env 文件不存在,使用 config/api_keys.yaml 配置(正常)")
try:
from local_ocr import LocalOCR
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
if env_path.exists():
load_dotenv(dotenv_path=env_path)
else:
print("[INFO] .env 文件不存在,使用 config/api_keys.yaml 配置(正常)")
try:
from local_ocr import LocalOCR
Automatic package installation is not necessary for a setup wizard to explain configuration and creates a powerful side effect: modifying the system and fetching code from external repositories. In skill-review context this is more dangerous because the manifest suggests image/OCR processing, not environment mutation, so users and operators may not anticipate software installation behavior.
The README advertises cloud OCR and IMA sync for user screenshots and extracted text, but it does not prominently disclose that sensitive image contents and derived text may be sent to third-party providers such as Tencent, Baidu, or IMA. Because screenshots often contain personal, financial, medical, or chat data, insufficient disclosure can lead users to unknowingly transmit sensitive information off-device.
The trigger phrase "初始化" is generic and can plausibly appear in normal conversation, increasing the chance of unintended activation of the setup workflow. In an agent environment, accidental invocation may lead to unwanted file creation, configuration changes, or prompts that steer the user into handling secrets and local paths unexpectedly.
The phrase "处理新图片" is broad and action-oriented, making accidental triggering more likely in ordinary chat. If bound directly to processing, the skill could begin scanning local folders and transmitting screenshot contents to OCR or sync providers without sufficiently explicit user intent at that moment.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
ima: api_key: "你的 IMA API Key" base_url: "https://api.ima.tencent.com/v1"
### 如何获取 API 密钥(向导会一步步教)
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
ima: api_key: "你的 IMA API Key" base_url: "https://api.ima.tencent.com/v1"
### 如何获取 API 密钥(向导会一步步教)
The skill instructs the agent to perform filesystem access, environment-variable reads, shell execution, and network-backed workflows, but it does not declare any tool scope or permissions boundary. This is dangerous because a broad, undeclared capability set makes it harder for hosts and users to understand or constrain what the skill may do, increasing the risk of unintended command execution, file modification, and credential handling.
The trigger phrase "第一次使用" is extremely broad and can appear in unrelated conversations, causing accidental activation of a skill that writes files and may later invoke shell commands. In context, this is more dangerous than a harmless collision because the skill performs setup actions affecting the local filesystem and credential workflow.