跳转到正文
报告库
用途分类 / 其他用途

Extension Email Skill 安全审计

作者说它能做什么(原文)

Support for sending service/transactional emails. Don't use this for sending marketing emails or verification emails.

第三方安全检查结论

先别安装或运行

已检查文件
1
发现的风险
1
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
高风险

示例会形成未经身份验证的邮件发送入口

原文依据:4 处
发现了什么

示例把发送函数声明为 public,却没有检查调用者身份、订单所有权或收件地址是否属于该用户。调用者能够选择收件地址,并控制用户名和订单编号;这些值随后直接进入邮件主题和正文。

为什么需要注意

如果应用照搬该示例,任何能调用 canister 的人都可能借应用名义向任意地址发送邮件,用于垃圾邮件、钓鱼或骚扰,并消耗邮件额度、损害域名信誉。由于正文参数名为 htmlBody,未转义的动态值还可能插入欺骗性 HTML。

该技能明确指导使用邮件发送函数,而示例将包装函数声明为公开接口,并让调用者提供收件地址、用户名和订单编号;示例中没有可见的身份、订单归属或收件人授权检查。如果用户照此部署,任何能调用该公开接口的人都可能借其向任意地址发送伪造的订单确认邮件,造成滥发、信誉或费用风险。用户可要求作者加入登录校验、订单与收件人的服务端绑定、速率限制,并避免接受任意收件地址和邮件内容字段。

SKILL.md:35来自说明文档打开原文件
  public func sendServiceEmail(    fromUsername : Text,    recipients : [Text],    subject : Text,    htmlBody : Text,  ) : async SendResult;};
查看另外 3 个位置
SKILL.md:51来自说明文档打开原文件
actor {  public func sendOrderConfirmationEmail(recipientEmailAddress : Text, username : Text, orderReference : Text) : async () {    let result = await EmailClient.sendServiceEmail(      "no-reply",      [recipientEmailAddress],      "Order " # orderReference # " confirmed",      "Hello " # username # ",\nYour order " # orderReference # " has been confirmed. Your items will ship tomorrow.",    );    switch (result) {
SKILL.md:16来自说明文档打开原文件
This skill adds support for sending service and transactional emails from the backend canister. Use `sendServiceEmail` for order confirmations, notifications, and similar one-off emails.
SKILL.md:24来自说明文档打开原文件
- Use the sendServiceEmail function. - Each recipient is sent an individual email- It returns a SendResult which is #ok if the email is sent successfully otherwise #err(error) with the error text. 
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

1 个说明模块

该技能的用途是从后端 canister 发送服务或交易邮件,并明确排除营销邮件和验证邮件。

查看原文
SKILL.md:3来自说明文档打开原文件
name: extension-emaildescription: Support for sending service/transactional emails. Don't use this for sending marketing emails or verification emails.version: 0.2.0
SKILL.md:16来自说明文档打开原文件
This skill adds support for sending service and transactional emails from the backend canister. Use `sendServiceEmail` for order confirmations, notifications, and similar one-off emails.

底层邮件模块接收发件用户名、收件人数组、主题和 HTML 正文;每位收件人会分别收到邮件。

查看原文
SKILL.md:25来自说明文档打开原文件
- Use the sendServiceEmail function. - Each recipient is sent an individual email- It returns a SendResult which is #ok if the email is sent successfully otherwise #err(error) with the error text. 
SKILL.md:35来自说明文档打开原文件
  public func sendServiceEmail(    fromUsername : Text,    recipients : [Text],    subject : Text,    htmlBody : Text,  ) : async SendResult;};

示例公开了一个发送函数,并将调用者提供的收件地址、用户名和订单编号直接用于邮件发送。

查看原文
SKILL.md:51来自说明文档打开原文件
actor {  public func sendOrderConfirmationEmail(recipientEmailAddress : Text, username : Text, orderReference : Text) : async () {    let result = await EmailClient.sendServiceEmail(      "no-reply",      [recipientEmailAddress],      "Order " # orderReference # " confirmed",      "Hello " # username # ",\nYour order " # orderReference # " has been confirmed. Your items will ship tomorrow.",    );
从这里开始 · 工作说明SKILL.md
extension-email
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录1 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明

代码和说明中提到的操作

连接外部网站
SKILL.md:12来自说明文档打开原文件
# Email — Service/TransactionalService/transactional email extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).
读取了多少行
67
文件校验值(用于核对版本)
025f11c81320e531f2049b31d9126ed2ccd77186d0a288e2c4c9189af8176607