Skip to content
Report library
Purpose / Other

Extension Email Raw Skill Security Audit

What the author says it does (original text)

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

Independent security check

Security risks found

Files checked
1
Risks found
2
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

To and CC mailings disclose recipients' email addresses to one another

Source references: 3
What we found

The Skill's core behavior places multiple addresses in To and CC, and its example puts two attendee groups into those visible fields. The documentation itself acknowledges that this would typically breach privacy. BCC addresses are normally hidden, so this risk concerns addresses placed in To or CC.

Why this matters

Customers, attendees, or other users who should not know one another's identities may see each other's email addresses and group membership, potentially causing privacy complaints or compliance issues.

The documentation explicitly says recipients can see the other recipients and calls this a typical privacy breach. The example passes confirmed and tentative attendee arrays into the visible To and CC fields, while BCC is empty. If those arrays contain different users, sending would disclose their email addresses to one another. Users should limit this to groups that consent to address sharing or ask for per-recipient/BCC delivery.

SKILL.md:16In the instructionsOpen original file
This skill adds support for sending emails with multiple `to`, `cc`, and `bcc` recipients. Not suitable for bulk service emails (recipients see each other).
Show 2 other places
SKILL.md:22In the instructionsOpen original file
- 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:63In the instructionsOpen original file
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.No risks found
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
Medium risk

The example exposes a sending method without showing caller authorization or abuse controls

Source references: 4
What we found

The example declares `sendMeetingReminder` as public, accepts recipient arrays, a subject, and a meeting time from the caller, and immediately sends as `no-reply`. The shown code has no identity check, recipient restriction, rate limit, or human confirmation. This is an example rather than proof of deployment, but copying it directly would expose a callable mail-sending capability.

Why this matters

If the deployed environment lets unauthorized users invoke the public method, they could use the user's mail service for spam or deceptive messages, harming sending reputation, quotas, and recipient trust.

What this evidence establishes

The example declares a public method, accepts the subject, time, and two recipient lists from its caller, then invokes the email sender; no identity, authorization, or rate check appears in the shown method. If copied as deployed code and reachable by untrusted callers, it could enable unauthorized mail or quota consumption. However, this is explicitly an illustrative meeting-reminder example, and the source does not show the full application, platform access controls, or deployment, so the absence of protection is not established. Users can ask about caller authorization, recipient validation, and rate limits.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
SKILL.md:57In the instructionsOpen original file
actor {  public func sendMeetingReminder(    meetingSubject : Text,    meetingTime : Text,    confirmedAttendeeEmails : [Text],    tentativeAttendeeEmails : [Text],  ) : async () {    let result = await EmailClient.sendRawEmail(
Show 3 other places
SKILL.md:63In the instructionsOpen original file
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,      "Reminder the meeting will start at " # meetingTime,    );
SKILL.md:29In the instructionsOpen original file
- 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:50In the instructionsOpen original file
### Example usage for sending an email reminder to meeting attendees.```motoko filepath=src/backend/main.moimport Runtime "mo:core/Runtime";
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.No risks found

Inside this skill

1 instruction sections

The Skill instructs callers to send one email through `caffeineai-email`'s `sendRawEmail`, with separate arrays for To, CC, and BCC recipients.

View source
SKILL.md:26In the instructionsOpen original file
- 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:39In the instructionsOpen original file
  public func sendRawEmail(    fromUsername : Text,    to : [Text],    cc : [Text],    bcc : [Text],    subject : Text,    htmlBody : Text,  ) : async SendResult;};

The documentation explicitly warns against using this function for service emails to multiple users because visible recipient fields can expose other recipients' addresses.

View source
SKILL.md:22In the instructionsOpen original file
- 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.

The example places confirmed attendees in To and tentative attendees in CC, then sends the reminder using the fixed `no-reply` sender username.

View source
SKILL.md:63In the instructionsOpen original file
  ) : async () {    let result = await EmailClient.sendRawEmail(      "no-reply",      confirmedAttendeeEmails,      tentativeAttendeeEmails,      [],      meetingSubject,      "Reminder the meeting will start at " # meetingTime,    );
Start here · InstructionsSKILL.md
extension-email-raw
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.
Files and check records1 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions

Operations mentioned in code and instructions

Connect to websites
SKILL.md:12In the instructionsOpen original file
# Email — Raw Multi-RecipientRaw multi-recipient email extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).
Lines read
81
File checksum (to compare versions)
42ccac1c6c1f8eefd556afe6ffbbbded1fdc2bc720e3714f0f608e22a1ac1a06