扫描报告
68 /100
moodle-connector
Moodle REST API client, batch downloader, and MCP server for Claude Code integration with SSO support
MCP server and batch downloader contain hardcoded default password 'test-pass' that bypasses documented MOODLE_CRED_PASSWORD requirement, creating credential decryption attack vector.
不要安装此技能
Remove hardcoded default passwords from mcp_server.py and batch_downloader.py. Enforce MOODLE_CRED_PASSWORD environment variable strictly. Do not allow fallback to guessable defaults.
攻击链 6 步
◎
入口 User installs moodle-connector skill and configures MCP server
SKILL.md:184⬡
提权 User runs 'python moodle_connector.py login' with credentials, which stores encrypted credentials using a password
moodle_connector.py:254⬡
提权 MCP server (mcp_server.py) ignores MOODLE_CRED_PASSWORD env var and uses hardcoded 'test-pass' as default password for credential decryption
mcp_server.py:37⬡
提权 Attacker obtains credentials.enc file (e.g., from shared filesystem, backup, or compromised directory)
credentials.enc◉
影响 Attacker decrypts credentials.enc using known default 'test-pass', extracting stored username, password, and moodle_token
moodle_connector.py:86◉
影响 Attacker uses extracted Moodle token to access victim's educational data, grades, assignments, and personal information
moodle_connector.py:186安全发现 5 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 高危 | Hardcoded default password in MCP server bypasses security requirement 凭证窃取 | mcp_server.py:37 |
| 高危 | Hardcoded default password in batch downloader 凭证窃取 | batch_downloader.py:59 |
| 中危 | Documentation mandates MOODLE_CRED_PASSWORD but implementation ignores it 文档欺骗 | mcp_server.py:37 |
| 中危 | SKILL.md contains plaintext credential example 凭证窃取 | SKILL.md:130 |
| 低危 | Username/password storage without explicit user consent 凭证窃取 | moodle_connector.py:260 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 网络访问 | READ | READ | ✓ 一致 | All network calls are to declared Moodle API endpoints only |
| 文件系统 | WRITE | WRITE | ✓ 一致 | Writes to config.json, credentials.enc, cache/ - all documented |
| 环境变量 | READ | READ | ✓ 一致 | mcp_server.py ignores MOODLE_CRED_PASSWORD env var (SKILL.md:184) |
| 命令执行 | NONE | NONE | — | No shell execution found |
| 技能调用 | NONE | NONE | — | No skill invocation found |
| 剪贴板 | NONE | NONE | — | No clipboard access |
| 浏览器 | NONE | READ | ✓ 一致 | Playwright used for SSO flow - declared in SKILL.md features section |
| 数据库 | NONE | NONE | — | No direct database access |
1 高危 7 项发现
高危 API 密钥 疑似硬编码凭证
password='encryption-password' SKILL.md:130 中危 外部 URL 外部 URL
https://mytimes.taylors.edu.my/... SKILL.md:69 中危 外部 URL 外部 URL
https://your-idp.example.com SKILL.md:103 中危 外部 URL 外部 URL
https://mytimes.taylors.edu.my SKILL.md:203 中危 外部 URL 外部 URL
https://mytimes.taylors.edu.my/webservice/pluginfile.php/... SKILL.md:222 中危 外部 URL 外部 URL
https://login.microsoftonline.com moodle_connector.py:143 提示 邮箱 邮箱地址
[email protected] SKILL.md:280 目录结构
7 文件 · 56.3 KB · 1655 行 Python 3f · 1297L
Markdown 1f · 295L
JSON 2f · 58L
Text 1f · 5L
├─
batch_downloader.py
Python
├─
config.template.json
JSON
├─
mcp_server.py
Python
├─
moodle_connector.py
Python
├─
package.json
JSON
├─
requirements.txt
Text
└─
SKILL.md
Markdown
依赖分析 4 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
requests | >=2.31.0 | pip | 否 | Version range specified, acceptable |
cryptography | >=41.0.0 | pip | 否 | Version range specified, acceptable |
playwright | >=1.40.0 | pip | 否 | Version range specified, acceptable |
mcp | >=0.1.0 | pip | 否 | Version range specified, acceptable |
安全亮点
✓ Strong encryption: PBKDF2 with 480K iterations + Fernet (cryptographically sound)
✓ No network exfiltration or C2 communication detected
✓ No obfuscation techniques (base64, eval, etc.) found
✓ Error sanitization in MCP server prevents internal detail leakage to clients
✓ No suspicious file path access (no ~/.ssh, ~/.aws, .env reading)
✓ No remote script execution (no curl|bash, wget|sh patterns)
✓ Cache TTL prevents unbounded storage
✓ No subprocess or shell execution beyond legitimate Playwright browser automation