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

Extension Email Raw Skill 安全审计

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

Send an email with multiple to, cc and bcc addresses.

第三方安全检查结论

发现安全风险

已检查文件
1
发现的风险
2
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 1 项风险
中风险

To 和 CC 群发会向收件人披露其他人的邮箱地址

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

该 Skill 的主要行为是把多个地址放进 To 和 CC;示例也把两组参会者分别放入这两个可见字段。文档自身承认这通常会构成隐私泄露。BCC 地址通常不会显示,因此风险针对 To/CC 中的地址。

为什么需要注意

不应互相获知身份的客户、参会者或其他用户可能看到彼此的邮箱地址及分组关系,并可能引发隐私投诉或合规问题。

文档明确说明多个 To/CC 收件人会看到其他收件人,并称这通常构成隐私泄露;示例确实把确认和待定参会者数组分别传入可见的 To、CC 字段。只有 BCC 传入空数组。若这些数组包含不同用户的地址,发送时会向他们相互披露邮箱地址。用户应仅对已同意共享地址的群组使用,或要求作者提供逐人发送/BCC 方案。

SKILL.md:16来自说明文档打开原文件
This skill adds support for sending emails with multiple `to`, `cc`, and `bcc` recipients. Not suitable for bulk service emails (recipients see each other).
查看另外 2 个位置
SKILL.md:22来自说明文档打开原文件
- This should NOT be used for sending service emails to multiple users because each recipient will see all the other recipients listed which would typically be a breach of user privacy.
SKILL.md:63来自说明文档打开原文件
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
中风险

示例公开发送接口且未显示调用者授权或滥用限制

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

示例将 `sendMeetingReminder` 声明为 public,并让调用者提供收件人数组、主题和会议时间,随后立即以 `no-reply` 身份发送。可见代码没有身份检查、收件人限制、速率限制或人工确认。虽然这是示例而非部署证明,直接照搬会留下可被调用的发信能力。

为什么需要注意

若部署环境允许未授权用户调用该公开方法,攻击者可能借用户的邮件服务发送垃圾或欺骗性邮件,影响发信信誉、配额和收件人信任。

这段证据能说明什么

示例把方法声明为 public,并由调用者提供主题、时间和两组收件人,随后调用发信函数;所示片段没有身份、授权或速率检查。因此,若被原样部署且 public 方法可被不受信任者调用,可能被用于未授权发信或消耗额度。不过它被明确标为会议提醒的示例,来源未展示完整应用、平台访问控制或实际部署配置,不能据此确定接口确实无保护。用户可要求作者说明调用权限、收件人校验和限流。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:57来自说明文档打开原文件
actor {  public func sendMeetingReminder(    meetingSubject : Text,    meetingTime : Text,    confirmedAttendeeEmails : [Text],    tentativeAttendeeEmails : [Text],  ) : async () {    let result = await EmailClient.sendRawEmail(
查看另外 3 个位置
SKILL.md:63来自说明文档打开原文件
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,      "Reminder the meeting will start at " # meetingTime,    );
SKILL.md:29来自说明文档打开原文件
- It returns a SendResult which is #ok if the email is sent successfully otherwise #err(error) with the error text. - There can be a maximum of 50 recipients in total- Each recipient receives the same email
SKILL.md:50来自说明文档打开原文件
### Example usage for sending an email reminder to meeting attendees.```motoko filepath=src/backend/main.moimport Runtime "mo:core/Runtime";
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

1 个说明模块

该 Skill 指示通过 `caffeineai-email` 的 `sendRawEmail` 发送同一封邮件,并分别接受 To、CC 和 BCC 收件人数组。

查看原文
SKILL.md:26来自说明文档打开原文件
- This extension depends on the [extension-email](../extension-email/SKILL.md) for sending emails.- Use the sendRawEmail function. - It returns a SendResult which is #ok if the email is sent successfully otherwise #err(error) with the error text. - There can be a maximum of 50 recipients in total- Each recipient receives the same email
SKILL.md:39来自说明文档打开原文件
  public func sendRawEmail(    fromUsername : Text,    to : [Text],    cc : [Text],    bcc : [Text],    subject : Text,    htmlBody : Text,  ) : async SendResult;};

文档明确警告不要将该功能用于向多个服务用户群发邮件,因为可见收件人字段会暴露其他收件人的地址。

查看原文
SKILL.md:22来自说明文档打开原文件
- This should NOT be used for sending service emails to multiple users because each recipient will see all the other recipients listed which would typically be a breach of user privacy.

示例把已确认参会者放入 To、暂定参会者放入 CC,并使用固定的 `no-reply` 发件用户名发送会议提醒。

查看原文
SKILL.md:63来自说明文档打开原文件
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,      "Reminder the meeting will start at " # meetingTime,    );
从这里开始 · 工作说明SKILL.md
extension-email-raw
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录1 个文件

检查范围与遗漏

逐文件查看涉及的内容

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

  • SKILL.md已纳入全文

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

  • SKILL.md工作说明

代码和说明中提到的操作

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