Back to skill

Security audit

evite-api

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about controlling Evite through curl, but it gives direct live-account write commands that can email guests, delete guests, or cancel events without an enforced confirmation step.

Install only if you are comfortable letting an agent handle Evite credentials and a live session cookie jar. Use a throwaway or low-impact event first, verify event IDs, guest IDs, recipient counts, and message bodies manually, and require explicit user confirmation before any RSVP change, guest deletion, broadcast, invitation send, photo upload, or cancellation.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:95
Finding
Destructive and Mass-Messaging Operations Lack an Enforced Confirmation Gate## Vulnerability Details **File Location**: `SKILL.md:95-98`; related executable instructions in `references/endpoints.md:146-157, 297-320` **Vulnerability Type**: Authenticated state-changing operations without mandatory confirmation **Risk Level**: High ### Vulnerable Snippets `SKILL.md:95-98`: ```markdown - **Writes here really mutate Evite** — RSVPs, cancellations, broadcast emails to real guests. There's no MCP-side confirm-gate in this skill: you are the confirm gate. Test broadcasts/sends only against a throwaway event with a blackholed `@example.com` guest. ``` `references/endpoints.md:146-157`: ```sh ### 8. Broadcast to RSVP segments — `POST /tsunami/v1/services/event/{id}/broadcast/` CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR") curl -sS -b "$JAR" -c "$JAR" -X POST \ -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" \ -d '{"message":"Reminder: parking is on the north side!","captcha":null,"virtual_groups":["yes","maybe"],"participantCount":12}' \ "https://www.evite.com/tsunami/v1/services/event/$EVENT_ID/broadcast/" ``` `references/endpoints.md:297-320`: ```sh ### 15. Send the invitation ("Send now", assumed body) — `POST /services/event/v1/{id}/send/` CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR") curl -sS -b "$JAR" -c "$JAR" -X POST \ -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" -d '{}' \ "https://www.evite.com/services/event/v1/$EVENT_ID/send/" ``` ```sh ### 16. Cancel an event (also "delete draft") — `POST /services/event/v1/{id}/actions/cancel/` CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR") curl -sS -b "$JAR" -c "$JAR" -X POST \ -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" -d '{}' \ "https://www.evite.com/services/event/v1/$EVENT_ID/actions/cancel/" \ -w '\n%{http_code}\n' ``` ### Technical Analysis The Skill supplies directly executable `curl` recip ...[truncated 2469 chars]
Remediation
## Remediation Suggestions Replace direct write recipes with a controlled helper that enforces authorization at runtime: 1. Default every state-changing operation to dry-run or preview mode. 2. Resolve and display the event title, event ID, operation, message, recipient segments, and recipient count before execution. 3. Require a fresh explicit confirmation containing a one-time token bound to the previewed action. 4. Reject execution when the token does not match the exact event, operation, payload, and recipient set. 5. Require separate confirmation for high-impact operations such as broadcasts, invitation sends, guest removal, and cancellation. 6. Add configurable recipient limits and require elevated confirmation when a mass-message operation exceeds the limit. 7. Re-fetch relevant event state immediately before execution to detect stale identifiers or changed recipient lists. 8. Return and verify the HTTP status and response body, and provide an auditable summary of the completed action. 9. Keep read-only operations separate from write operations so ordinary inspection requests cannot accidentally reach mutating commands.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
Full object every time (`guest_id` selects, the rest are the new
values) — this is a set, not a merge.

### 14. Remove a draft guest — `DELETE /ajax/event/{id}/guestlist/draft/{guestId}`

```sh
CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR")
Confidence
81% confidence
Finding
The documented delete operation takes a raw guestId in the path and performs an irreversible state change on the authenticated user's draft guest list. In an agent setting, untrusted or mixed-source parameters could cause deletion of the wrong guest or enable prompt-driven abuse if IDs are not verified against the selected event and user intent before execution.

External Transmission

Medium
Category
Data Exfiltration
Content
name: evite-api
description: >-
  Query and act on Evite (evite.com) events, guest lists, RSVPs, and
  messages from a shell with curl and a cookie jar — instead of running
  the evite-mcp server. Does a headless EVITE_EMAIL/EVITE_PASSWORD login
  against evite.com's internal /services/, /ajax/, and /tsunami/ APIs, no
  browser or extension involved. Use when you want Evite data/actions
Confidence
95% confidence
Finding
The skill explicitly instructs users to send Evite credentials and authenticated session traffic to Evite's undocumented internal endpoints using curl and a local cookie jar. This is an external transmission of sensitive credentials and session cookies to a third-party service, and because it relies on unsupported private APIs and direct session handling, misuse or leakage of the jar could expose account access and enable unauthorized actions.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```sh
export EVITE_EMAIL=you@example.com EVITE_PASSWORD=yourpassword   # or: op read op://.../evite/password
JAR=/tmp/evite-jar.txt
touch "$JAR" && chmod 600 "$JAR"   # jar holds the live session cookie — restrict before writing
UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36'

# 1. Prime: GET the homepage to obtain the csrftoken (+ anonymous session) cookies.
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

External Transmission

Medium
Category
Data Exfiltration
Content
```sh
CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR")
curl -sS -b "$JAR" -c "$JAR" -X PUT \
  -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" \
  -d '{"rsvpResponse":"yes","numberOfAdults":2,"numberOfKids":0}' \
  "https://www.evite.com/services/event/v1/$EVENT_ID/guests/$GUEST_ID"
Confidence
92% confidence
Finding
This write example performs authenticated state-changing requests against Evite using a reusable session cookie jar and CSRF token, allowing RSVP or other event mutations on real user accounts. In context, the skill itself warns that writes really mutate live Evite data and lacks any confirmation gate, which increases the risk of accidental or unauthorized external actions if the session is compromised or commands are run incorrectly.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This markdown file describes guest data returned by the API, including email addresses, phone numbers, comments, and attendance details, but it does not include an explicit warning that handling or exposing this data has privacy implications. Because SQP-2 applies to markdown files, the omission of a user-facing warning about personal data exposure is a semantic safety issue.

External Transmission

Medium
Category
Data Exfiltration
Content
```sh
CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR")
curl -sS -b "$JAR" -c "$JAR" -X PUT \
  -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" \
  -d '{"rsvpResponse":"yes","numberOfAdults":2,"numberOfKids":0,"comments":"can'\''t wait!"}' \
  "https://www.evite.com/services/event/v1/$EVENT_ID/guests/$GUEST_ID"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```sh
CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR")
curl -sS -b "$JAR" -c "$JAR" -X POST \
  -H 'Content-Type: application/json' -H "X-CSRFToken: $CSRF" \
  -d '{"message":"See you Saturday!"}' \
  "https://www.evite.com/tsunami/v1/services/event/$EVENT_ID/guest/$GUEST_ID/messages"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The file documents a broadcast endpoint that emails RSVP segments and a send endpoint that emails the full draft guest list. Although there are brief notes that these actions are real, the document lacks a prominent general warning section advising that these operations contact real recipients and can have irreversible user-facing effects.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The markdown explains that uploaded photos are sent to Google Cloud Storage rather than directly to Evite, but it does not clearly warn users that image content leaves the primary service boundary and is transmitted to a third-party storage provider. For markdown under SQP-2, third-party transfer of user data should be disclosed more explicitly as a privacy-impacting behavior.

External Transmission

Medium
Category
Data Exfiltration
Content
v=$(jq -r --arg k "$k" '.upload_form[$k]' <<<"$TICKET")
  FORM_ARGS+=(-F "$k=$v")
done
FINISH_URL=$(curl -sS -D - -o /dev/null "${FORM_ARGS[@]}" -F "file=@/path/to/photo.jpg" "$UPLOAD_URL" \
  | grep -i '^location:' | tr -d '\r' | awk '{print $2}')

# Step 3 — finalize the object into the album (best-effort; ignore failures).
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
| grep -i '^location:' | tr -d '\r' | awk '{print $2}')

# Step 3 — finalize the object into the album (best-effort; ignore failures).
curl -sS -b "$JAR" -c "$JAR" "$FINISH_URL" -o /dev/null

# Step 4 — register the photo in the event's shared gallery.
CSRF=$(awk -F'\t' '$6=="csrftoken"{v=$7} END{print v}' "$JAR")
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.