Scan Report
38 /100
crewai-team
使用 CrewAI 多 Agent 团队进行产品需求分析和 PRD 生成
Skill contains hardcoded API credentials and undocumented network access, but implements a legitimate CrewAI workflow wrapper without malicious code execution.
Use with caution
Remove all hardcoded API keys from source files and migrate to environment variables or a secrets manager. Declare network access in SKILL.md. Pin all dependency versions. Audit the hardcoded key sk-sp-e0fb4e4a6dba43fb9bd707b8ef48bd6b — if real, rotate immediately as it appears in 15 Python files.
Attack Chain 3 steps
◎
Entry Attacker reads any Python source file to extract hardcoded API key
team_config_discussion.py:12⬡
Escalation Attacker uses extracted DashScope API key for unauthorized LLM API calls
N/A◉
Impact Victim incurs unauthorized billing charges on DashScope account
N/AFindings 4 items
| Severity | Finding | Location |
|---|---|---|
| High | Hardcoded API credential in 15 Python files Credential Theft | team_config_discussion.py:12 |
| High | Network access not declared in SKILL.md Doc Mismatch | SKILL.md:1 |
| Medium | All dependencies unpinned Supply Chain | requirements.txt:1 |
| Low | curl|sh pattern documented without justification Doc Mismatch | USAGE.md:16 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | NONE | READ | ✓ Aligned | Uses os.path operations and open() for file writes (prd_*.md output files) |
| Network | NONE | WRITE | ✗ Violation | Makes HTTPS POST to https://coding.dashscope.aliyuncs.com/v1 without SKILL.md de… |
| Shell | NONE | NONE | — | No subprocess/shell execution in any Python code; curl|sh only in documentation |
| Environment | NONE | WRITE | ✓ Aligned | Sets os.environ['OPENAI_API_KEY'] and ['OPENAI_API_BASE'] in run_*.py files |
| Database | NONE | NONE | — | No database access |
| Skill Invoke | NONE | NONE | — | No cross-skill invocation |
| Clipboard | NONE | NONE | — | No clipboard access |
| Browser | NONE | NONE | — | No browser automation |
1 Critical 4 High 9 findings
Critical Dangerous Command 危险 Shell 命令
curl -LsSf https://astral.sh/uv/install.sh | sh USAGE.md:16 High API Key 疑似硬编码凭证
API_KEY="sk-your-actual-key-here" COMPLETE.md:55 High API Key 疑似硬编码凭证
API_KEY="sk-your-openai-key-here" SETUP.md:47 High API Key 疑似硬编码凭证
API_KEY = "sk-sp-e0fb4e4a6dba43fb9bd707b8ef48bd6b" team_config_discussion.py:12 High API Key 疑似硬编码凭证
api_key = "sk-sp-e0fb4e4a6dba43fb9bd707b8ef48bd6b" team_config_simple.py:13 Medium External URL 外部 URL
https://dashscope.console.aliyun.com/ COMPLETE.md:52 Medium External URL 外部 URL
https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions SETUP.md:83 Medium External URL 外部 URL
https://astral.sh/uv/install.sh USAGE.md:16 Medium External URL 外部 URL
https://coding.dashscope.aliyuncs.com/v1 USAGE.md:124 File Tree
29 files · 146.5 KB · 4670 lines Python 15f · 2520L
Markdown 13f · 2145L
Text 1f · 5L
├─
COMPLETE.md
Markdown
├─
HOWTO_WORK.md
Markdown
├─
PARALLEL_DISCUSSION.md
Markdown
├─
prd_minimal_20260310_160645.md
Markdown
├─
prd_minimal_20260310_160746.md
Markdown
├─
prd_mobile_20260310_162722.md
Markdown
├─
prd_mobile_20260310_163256.md
Markdown
├─
prd_sequential_20260310_154832.md
Markdown
├─
README.md
Markdown
├─
requirements.txt
Text
├─
run_discussion.py
Python
├─
run_hierarchical.py
Python
├─
run_interactive.py
Python
├─
run_minimal.py
Python
├─
run_mobile.py
Python
├─
run_openclaw.py
Python
├─
run_team.py
Python
├─
run_with_log.py
Python
├─
SETUP.md
Markdown
├─
SKILL.md
Markdown
├─
team_config_discussion.py
Python
├─
team_config_hierarchical.py
Python
├─
team_config_minimal.py
Python
├─
team_config_mobile.py
Python
├─
team_config_multi_model.py
Python
├─
team_config_simple.py
Python
├─
team_config.py
Python
├─
USAGE.md
Markdown
└─
VIEW_DISCUSSION_LOG.md
Markdown
Dependencies 5 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
crewai | >=0.1.0 (unpinned) | pip | No | Major version pinned but no upper bound; latest 1.x could introduce breaking changes |
crewai-tools | >=0.0.1 (unpinned) | pip | No | No version constraints |
langchain-community | >=0.0.1 (unpinned) | pip | No | No version constraints; langchain has had CVEs historically |
langchain-openai | >=0.0.1 (unpinned) | pip | No | No version constraints |
duckduckgo-search | >=4.0.0 (unpinned) | pip | No | No version constraints |
Security Positives
✓ No actual shell command execution in Python code — the curl|sh is only in documentation
✓ No access to sensitive paths (~/.ssh, ~/.aws, .env) — only writes to cwd for PRD output files
✓ No base64-encoded payloads, eval(), or obfuscated code
✓ No reverse shell, C2 communication, or data exfiltration infrastructure
✓ DuckDuckGo search is used via langchain tool (documented API), not raw HTTP exfiltration
✓ PRDs are written to local files in cwd only, not sent to external servers