Back to skill

Security audit

signupgenius-api

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly transparent SignUpGenius curl documentation, but it also teaches unauthenticated collection of participant names and identifiers from any public sign-up, including where names are marked hidden.

Install only if you are comfortable with a skill that documents raw SignUpGenius session handling and public API workflows. Use it with an account you control, protect exported passwords, cookie jars, header dumps, JWTs, and refresh tokens, and avoid using the unauthenticated participant endpoints to collect names or identifiers unless you have clear authorization and a legitimate need.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
references/sug-endpoints.md:306
Finding

Unauthenticated Retrieval of Hidden Participant Identities

Content
View full analysis

Vulnerability Details

File Location: references/sug-endpoints.md, lines 306–333
Vulnerability Type: Unauthenticated access to participant identity and signup metadata
Risk Level: Medium

Vulnerable Code Snippet

sh
curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"listid":62393618,"slotitemid":1762735194,"offset":1,"limitTo":100,
           "search":"","orderBy":"","orderDesc":false,"memberidViewing":0}' \
  'https://www.signupgenius.com/SUGboxAPI.cfm?go=s.getSignUpParticipantsBySlotItem'

The accompanying instructions state:

Each row carries firstname, lastname, nonmembername, mycomment, memberid, myqty and itemmemberid.

They further state:

Note this returns names even though the same slot reports hidenames: true on the v3 feed, so hidenames is a display preference on that feed, not an access control across the API as a whole.

Technical Analysis

The documented endpoint accepts a signup identifier (listid) and slot-item identifier (slotitemid) without an authorization token or session cookie. Its response contains participant names, comments, membership identifiers, quantities, and item-member identifiers.

The same reference documents unauthenticated endpoints for discovering public signup and slot identifiers. Consequently, the identifiers needed for this request are not secret authorization capabilities. The participant endpoint also exposes identities when the corresponding slot reports hidenames: true, crossing the privacy boundary represented by the organizer's hidden-name setting.

This is a reachable unauthorized data-access workflow rather than credential exfiltration by the Skill. The reviewed files contain no evidence that the project author operates the remote endpoint or intends to perform a covert attack; therefore, the project is classified as suspicious rather than malicious.

Attack Path

  1. Identify ...[truncated 1301 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the unauthenticated participant-enumeration workflow and live example identifiers from the Skill documentation.
  2. Do not request or display participant identities when the associated signup or slot has hidden-name settings enabled.
  3. Require an authenticated session and verify that the caller is the signup owner or otherwise authorized before retrieving participant-level data.
  4. Apply server-side authorization independently of identifier secrecy; listid, slotitemid, memberid, and itemmemberid must not be treated as access-control tokens.
  5. Minimize response fields to those necessary for the authorized operation, omitting names, comments, and internal identifiers where possible.
  6. Add rate limiting, access logging, pagination limits, and enumeration detection to the remote endpoint.
  7. If the Skill retains participant-management functionality, direct the agent to verify authorization and privacy settings before every request and avoid exposing participant data in logs or unrelated output.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (28)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 237)May include surrounding context.

Renewing an expired session token

POST https://api.signupgenius.com/v3/auth/refresh trades a refreshToken cookie for a fresh 30-minute access token. The JWT's TTL is exactly 30 minutes (exp - iat == 1800).

sh

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 251)May include surrounding context.

md
- **Both fields are required.** Sending only `refreshToken` returns 400 with
  `{"details":"token should not be null or undefined"}`. `token` is the
  current access token — it may already be expired.
- The response nests under `data.response`, with **lower-case** keys:
  `{token, refreshtoken, expiresin, expires}`. `expiresin` is `1800`. The
  refresh token is rotated, so store the new one.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file explicitly documents how to enumerate participant identities, comments, quantities, and identifiers without authentication, which is sensitive personal data and operational metadata. This is especially risky because it includes the exact endpoint, payload shape, and semantics needed to turn a public sign-up into a participant-intelligence feed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs users to place SignUpGenius credentials in environment variables and then uses them to obtain reusable session artifacts (JWT and cookies), but it does not warn about protecting shell history, process environments, temporary files, or token reuse. In this context, the omission is security-relevant because the skill is centered on direct authentication and session handling, so unsafe operator handling could easily expose account credentials or active sessions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 36)May include surrounding context.

md
| grep -oE 'name="csrfToken"[[:space:]]+value="[^"]+"' \
  | sed -E 's/.*value="([^"]+)".*/\1/')

curl -s -D /tmp/sug-login-headers.txt -o /dev/null \
  -b "$COOKIEJAR" -c "$COOKIEJAR" \
  -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36' \
  -X POST 'https://www.signupgenius.com/index.cfm?go=c.Login' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 79)May include surrounding context.

text

```sh
curl -s -X POST 'https://www.signupgenius.com/SUGboxAPI.cfm?go=t.getMySignups' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Cookie: $COOKIE_HEADER" \
  -H 'Content-Type: application/json' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 73)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 21)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 30)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 38)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 47)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 55)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 70)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 75)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 79)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 236)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 241)May include surrounding context.

1. Profile

sh
curl -s 'https://api.signupgenius.com/v3/member/profile/' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" | jq '.data'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 55)May include surrounding context.

are optional):

sh
curl -s -X POST "https://api.signupgenius.com/v3/groups/${GROUP_ID}/members/create/" \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" \
  -H 'Content-Type: application/json' \
  -d '{"emailaddress":"new-member@example.com","firstname":"Jane","lastname":"Doe"}' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 87)May include surrounding context.

(note the upper-case envelope):

sh
curl -s -X POST 'https://www.signupgenius.com/SUGboxAPI.cfm?go=t.getMySignups' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" \
  -H 'Content-Type: application/json' -d '{}' \
  | jq -r '.DATA[] | "\(.signupid)\t\(.title)"'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 110)May include surrounding context.

description). The SPA's own metadata call is public:

sh
curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"urlid":"10C0849AAAA2EA4FD0-62393618-20262027"}' \
  'https://www.signupgenius.com/SUGboxAPI.cfm?go=s.getSignupInfo'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 161)May include surrounding context.

301/302, not 200:

sh
curl -s -o /dev/null -w '%{http_code}\n' -D - \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" \
  -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html' \
  -X POST "https://www.signupgenius.com/index.cfm?go=s.PreProcessSignup&URLID=${URLID}" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 198)May include surrounding context.

md
TITLE=$(jq -r '.DATA.title' /tmp/sug-signupinfo.json)
SLOTID=$(jq -r '.DATA.rsvpdetails.slotid' /tmp/sug-signupinfo.json)

curl -s -X POST 'https://www.signupgenius.com/SUGboxAPI.cfm?go=s.processSignUpFormHandler' \
  -H "Authorization: Bearer $ACCESS_TOKEN" -H "Cookie: $COOKIE_HEADER" \
  -H 'Content-Type: application/json' \
  -d @- <<JSON | jq '.SUCCESS, .MESSAGE'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 241)May include surrounding context.

minutes (exp - iat == 1800).

sh
curl -s 'https://api.signupgenius.com/v3/auth/refresh' \
  -H 'Content-Type: application/json' \
  -d "{\"refreshToken\":\"${REFRESH_TOKEN}\",\"token\":\"${ACCESS_TOKEN}\"}" \
  | jq -r '.data.response.token'

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This documentation materially expands the skill from authenticated account operations into unauthenticated harvesting of public sign-up slot and participant data. Even if the upstream endpoints are publicly reachable, packaging and normalizing those collection steps into the skill lowers the barrier to bulk privacy-invasive enumeration and misuse beyond the stated purpose of accessing a user's own SignUpGenius data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This section normalizes unauthenticated retrieval of full slot grids from any public sign-up, broadening the skill into public-data collection outside authenticated account access. While slot metadata may be intended for public display, embedding this as a direct API harvesting pattern materially lowers friction for scraping and correlation.

Content

Scanner excerpt · references/sug-endpoints.md (reported line 276)May include surrounding context.

md
## Reading slots on ANY sign-up — no auth required

`GET https://api.signupgenius.com/v3/signups/{signupId}/slots` returns the
full slot grid for a public sign-up **with no Authorization header, no
cookies, and no Pro key**. This is the display feed the `/go/<slug>` page
renders from, and it is the correct way to read slot data — not the Pro

Static analysis

No suspicious patterns detected.