安全决策报告

luci-memory

通过硬编码IP地址 34.45.179.165 窃取用户 API 密钥并外传个人媒体数据,具备凭证收割和数据外泄双重攻击链。

安装决策优先 来源: 手动上传 扫描时间: 2026/4/5
文件 5
IOC 4
越权项 1
发现 6
最直接的威胁证据
严重 凭证窃取
API密钥在初始化时即被外传至硬编码外部IP

resolve_user_id() 在模块加载时(顶层全局代码)立即执行,通过 urllib POST API密钥到 http://34.45.179.165/luci-memory/personal/...,每次运行 skill 时均会触发凭证外传。SKILL.md 完全未声明任何网络出站行为。

scripts/run.py:42

为什么得出这个结论

3/4 个维度触发
阻止
声明与实际能力

发现 1 项声明之外的能力或越权行为。

阻止
隐藏执行与外联

提取到 2 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

报告包含 3 步攻击链,另有 5 项高危或严重发现。

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

攻击链

01
用户安装 luci-memory skill,误以为这是 memories.ai 官方工具

初始入口 · SKILL.md:1

02
Python模块加载时自动执行 resolve_user_id(),将API密钥POST到 http://34.45.179.165 完成凭证收割

权限提升 · scripts/run.py:42

03
所有用户搜索请求(视频/图像/音频/肖像数据)持续POST到 34.45.179.165,完成数据外泄

最终危害 · scripts/run.py:18

风险分是怎么被拉高的

硬编码外部IP进行所有敏感API调用 +35

API_HOST 硬编码为 http://34.45.179.165/luci-memory,而非官方域名,所有个人媒体和肖像数据均发送到该IP

API密钥在初始化阶段即被发送至外部IP +30

resolve_user_id() 在模块加载时执行,将 MEMORIES_AI_KEY POST到 34.45.179.165,完成凭证收割

敏感数据POST到非HTTPS的硬编码IP +20

使用 http:// 而非 https://,个人视频/肖像数据以明文传输,且无法验证服务器身份

最关键的证据

严重 凭证窃取

API密钥在初始化时即被外传至硬编码外部IP

resolve_user_id() 在模块加载时(顶层全局代码)立即执行,通过 urllib POST API密钥到 http://34.45.179.165/luci-memory/personal/...,每次运行 skill 时均会触发凭证外传。SKILL.md 完全未声明任何网络出站行为。

scripts/run.py:42
此函数不应在模块加载时执行;凭证应仅发往可验证的官方域名;添加证书验证防止中间人攻击
严重 数据外泄

所有用户个人媒体和肖像数据POST到硬编码外部IP

API_HOST 硬编码为 http://34.45.179.165,USER_ID 解析后,所有 API 调用(视频、图像、音频、肖像数据查询)均发往该IP。数据外泄在用户每次搜索时发生。

scripts/run.py:18
立即停止使用该技能;官方API应使用HTTPS+官方域名;检查是否存在日志或备份中的数据泄露
严重 代码混淆

使用裸IP绕过域名安全检测

硬编码IP 34.45.179.165 而非域名,无法通过DNS安全监控、域名黑名单或证书验证检测通信意图,且使用 http:// 明文传输,大幅降低攻击暴露风险。

scripts/run.py:18
禁止在代码中使用硬编码IP;所有外部通信必须使用HTTPS+域名
高危 文档欺骗

SKILL.md 声称'直接使用Luci-memory API',实际发往第三方IP

SKILL.md声明使用'memories.ai'相关API,但代码实际连接到 34.45.179.165 (非官方域名)。文档与实际行为严重不符,是典型的阴影功能。

SKILL.md:1
文档应明确声明所有网络端点,包括IP地址或域名
高危 凭证窃取

.env 文件包含真实API密钥

.env 中包含真实可用的 MEMORIES_AI_KEY=sk-fdd6e0eca09edd61ff577a675738e687(预扫描IOC已标记)。该密钥已泄露,应立即撤销。

.env:1
立即在 memories.ai 后台撤销该密钥;勿将真实凭证提交到代码仓库
中危 供应链

无第三方依赖但使用标准库,依赖安全性可接受

scripts/run.py 仅使用标准库(urllib、json、argparse等),无外部依赖引入。但 resolve_user_id 调用了第三方域名 mavi-backend.memories.ai,存在域名被劫持或欺骗的风险。

scripts/run.py:19
验证 mavi-backend.memories.ai 与 34.45.179.165 是否为同一服务提供方

声明能力 vs 实际能力

文件系统 通过
声明 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声明)

可疑产物与外联

严重 API 密钥
sk-fdd6e0eca09edd61ff577a675738e687

.env:1

高危 IP 地址
34.45.179.165

scripts/run.py:18

中危 外部 URL
http://34.45.179.165/luci-memory

scripts/run.py:18

中危 外部 URL
https://mavi-backend.memories.ai/serve/api/userinfo

scripts/run.py:21

依赖与供应链

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

文件构成

5 个文件 · 605 行
Python 1 个文件 · 432 行Markdown 1 个文件 · 165 行YAML 1 个文件 · 4 行Shell 1 个文件 · 3 行Other 1 个文件 · 1 行
需关注文件 · 3
.env Other · 1 行
.env 文件包含真实API密钥 · sk-fdd6e0eca09edd61ff577a675738e687
scripts/run.py Python · 432 行
API密钥在初始化时即被外传至硬编码外部IP · 所有用户个人媒体和肖像数据POST到硬编码外部IP · 使用裸IP绕过域名安全检测 · 无第三方依赖但使用标准库,依赖安全性可接受 · 34.45.179.165 · http://34.45.179.165/luci-memory · https://mavi-backend.memories.ai/serve/api/userinfo
SKILL.md Markdown · 165 行
SKILL.md 声称'直接使用Luci-memory API',实际发往第三方IP
其他文件 · config.yaml · run.sh

安全亮点

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