T09 · Insecure Skill Coding Practices
- Location
dq-assistant/scripts/init-project.sh:102- Finding
Unescaped project name permits sed program injection in the data-quality initializer
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent Chinese data-engineering skill suite with expected local project-scaffolding behavior, but users should review generated files, dependencies, and deployment steps before acting on them.
Install this if you want a Chinese data-engineering workflow suite. Run the init scripts only in a new or disposable project directory, use simple trusted project names, review generated code and YAML packages before sharing, pin dependencies before installing, and require explicit human approval before any production deployment.
dq-assistant/scripts/init-project.sh:102Unescaped project name permits sed program injection in the data-quality initializer
etl-assistant/scripts/init-project.sh:151Unescaped project arguments permit sed program injection in the ETL initializer
modeling-assistant/scripts/init-project.sh:108Unescaped project arguments permit sed program injection in the modeling initializer
sql-assistant/scripts/init-project.sh:93Unescaped project name permits sed program injection in the SQL initializer
test-engineer/scripts/init-project.sh:89Unescaped project name permits sed program injection in the test-project initializer
etl-assistant/scripts/init-project.sh:236Generated ETL environment installs mutable dependency versions without integrity verification
The declared purpose is an end-to-end data development suite, but the analyzer indicates the effective behavior may primarily initialize testing assets or templates. Such description-behavior divergence weakens user consent and review because a skill that appears general and benign may actually perform narrower but side-effecting actions in the filesystem.
The declared purpose is an end-to-end data development suite, but the analyzer indicates the effective behavior may primarily initialize testing assets or templates. Such description-behavior divergence weakens user consent and review because a skill that appears general and benign may actually perform narrower but side-effecting actions in the filesystem.
The declared purpose is an end-to-end data development suite, but the analyzer indicates the effective behavior may primarily initialize testing assets or templates. Such description-behavior divergence weakens user consent and review because a skill that appears general and benign may actually perform narrower but side-effecting actions in the filesystem.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Environment
.env
.env.local
.env.*.local
# Config with secrets
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
*.pem
*.p12
.credentials/
secrets.yaml
secrets.yml
# 临时文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
*.pem
*.p12
.credentials/
secrets.yaml
secrets.yml
# 临时文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
*.p12
.credentials/
secrets.yaml
secrets.yml
# 临时文件
*.tmp
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
*.p12
.credentials/
secrets.yaml
secrets.yml
# 临时文件
*.tmp
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 替换占位符
sed -i.bak "s/PROJECT_NAME_PLACEHOLDER/$PROJECT_NAME/g" "$PROJECT_DIR/PROJECT.md"
sed -i.bak "s/CREATE_TIME_PLACEHOLDER/$(date '+%Y-%m-%d')/g" "$PROJECT_DIR/PROJECT.md"
rm -f "$PROJECT_DIR/PROJECT.md.bak"
# 创建 README.md
cat > "$PROJECT_DIR/README.md" << EOF
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 替换占位符
sed -i.bak "s/PROJECT_NAME_PLACEHOLDER/$PROJECT_NAME/g" "$PROJECT_DIR/PROJECT.md"
sed -i.bak "s/CREATE_TIME_PLACEHOLDER/$(date '+%Y-%m-%d')/g" "$PROJECT_DIR/PROJECT.md"
rm -f "$PROJECT_DIR/PROJECT.md.bak"
# 创建 README.md
cat > "$PROJECT_DIR/README.md" << EOF
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 替换占位符
sed -i.bak "s/PROJECT_NAME_PLACEHOLDER/$PROJECT_NAME/g" "$PROJECT_DIR/PROJECT.md"
sed -i.bak "s/CREATE_TIME_PLACEHOLDER/$(date '+%Y-%m-%d')/g" "$PROJECT_DIR/PROJECT.md"
rm -f "$PROJECT_DIR/PROJECT.md.bak"
# 创建 README.md
cat > "$PROJECT_DIR/README.md" << EOF
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
# 替换占位符
sed -i.bak "s/PROJECT_NAME_PLACEHOLDER/$PROJECT_NAME/g" "$PROJECT_DIR/PROJECT.md"
sed -i.bak "s/CREATE_TIME_PLACEHOLDER/$(date '+%Y-%m-%d')/g" "$PROJECT_DIR/PROJECT.md"
rm -f "$PROJECT_DIR/PROJECT.md.bak"
# 创建 README.md
cat > "$PROJECT_DIR/README.md" << EOF
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .gitignore
cat > "$PROJECT_DIR/.gitignore" << 'EOF'
# 数据库配置文件(可能包含敏感信息)
*.env
config/local.*
# 大型执行计划文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .gitignore
cat > "$PROJECT_DIR/.gitignore" << 'EOF'
# 数据库配置文件(可能包含敏感信息)
*.env
config/local.*
# 大型执行计划文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .gitignore
cat > "$PROJECT_DIR/.gitignore" << 'EOF'
# 数据库配置文件(可能包含敏感信息)
*.env
config/local.*
# 大型执行计划文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .gitignore
cat > "$PROJECT_DIR/.gitignore" << 'EOF'
# 数据库配置文件(可能包含敏感信息)
*.env
config/local.*
# 大型执行计划文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .gitignore
cat > "$PROJECT_DIR/.gitignore" << 'EOF'
# 数据库配置文件(可能包含敏感信息)
*.env
config/local.*
# 大型执行计划文件
This markdown file includes a trigger description listing broad terms such as "数据开发" and "数据仓库" alongside "等", which makes the trigger scope open-ended and ambiguous. Because the file provides no exclusions, negative examples, or narrower invocation context, these phrases could match ordinary discussion rather than intentional skill activation.
The line states that all skill documentation is in Chinese, which is a natural-language locale constraint. Because the file does not indicate user choice, opt-in, or a documented region-specific justification, this appears to violate the policy against forcing a specific language/locale.
Code scans file system directories looking for sensitive files. This could be reconnaissance for credential theft.
# 查看所有可用命令
ls -la ~/.openclaw/skills/pugongying-data-skills/
# 使用单个模块
/sql-assistant 生成用户活跃度分析SQL
该README明确说明各模块会输出并在模块间交换标准化YAML数据包,还给出了包含项目名、实体、指标和保留期等内容的示例。对于会影响数据隐私和项目信息暴露的行为,文档中没有任何用户警示或最小化/脱敏建议,符合markdown文件的缺少用户警告情形。
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
ls ~/.openclaw/skills/ | grep pugongying
head -20 ~/.openclaw/skills/pugongying-data-skills/SKILL.md
2. **模块联动失败**
The skill advertises operational behaviors such as reading local files (for example, cat skill-connections.yaml and cat skill-hub.md) but does not declare any explicit tool scope or permission boundaries. This creates ambiguity about what filesystem or environment access the skill may exercise, which can lead to over-privileged execution or unsafe assumptions by the host agent.
The activation text and trigger words are extremely broad, covering common terms like data development, ETL, SQL optimization, data quality, modeling, and architecture design. In a general coding environment this can cause unintended routing of many ordinary user requests into this skill, increasing the chance of unnecessary file access, generation, or other downstream actions without clear intent.
The documentation includes deployment-oriented behavior (/test-engineer 验证并部署) without any warning, approval gate, or safety constraints around system-impacting actions. Even as documentation, this normalizes potentially state-changing operations and may lead an agent or user to treat deployment as part of the default flow without adequate review.
No suspicious patterns detected.