Back to skill

Security audit

Fundraise Up

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for FundraiseUp API work, but it needs review because it can handle live donations and donor data and includes unsafe logging guidance.

Review before installing in production. Use test-mode keys first, grant the API key only the specific permissions needed, require explicit user approval before creating or updating donations or generating donor portal links, and never log authorization headers, donor portal links, payment-method identifiers, or full donor request/response bodies.

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

Warning
Location
SKILL.md:554
Finding
Unredacted API Request Logging May Expose Credentials and Donor Data## Vulnerability Details **File Location**: `SKILL.md:554` **Supporting Locations**: `SKILL.md:568-595`, `SKILL.md:611-638`, `SKILL.md:651-681` **Vulnerability Type**: Sensitive information exposure through unsafe logging guidance **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ### Best Practices 1. Implement exponential backoff for rate limits 2. Log all API errors with request details 3. Validate data before sending to API 4. Handle null values gracefully 5. Check for finalized fees using Events endpoint ``` The request details covered by this instruction may contain sensitive headers and payload fields: ```python headers = { 'Authorization': f'Bearer {API_KEY}', 'Accept': 'application/json', 'Content-Type': 'application/json' } def create_donation(campaign_id, amount, currency, payment_method_id, supporter): url = f'{BASE_URL}/donations' data = { 'campaign_id': campaign_id, 'amount': str(amount), 'currency': currency, 'payment_method_id': payment_method_id, 'supporter': supporter } response = requests.post(url, headers=headers, json=data) response.raise_for_status() return response.json() ``` ### Technical Analysis The skill instructs implementers to log all API errors “with request details” without defining a redaction policy. FundraiseUp requests include a bearer API credential in the `Authorization` header. Donation request bodies can also include Stripe payment-method identifiers and supporter names, email addresses, telephone numbers, and mailing addresses. Error handlers frequently serialize HTTP request headers, bodies, exception objects, or client-library request configurations. Following this guidance literally could therefore write reusable credentials and donor personally identifiable information to application logs. Logs commonly have broader readership and longer retention tha ...[truncated 2091 chars]
Remediation
## Remediation Suggestions Replace the broad logging instruction with an explicit structured-logging and redaction policy: 1. Never log `Authorization`, cookies, API keys, donor-portal access URLs or tokens, Stripe payment-method identifiers, or complete request and response bodies. 2. Log only allowlisted diagnostic fields, such as the HTTP status code, sanitized endpoint template, request correlation ID, retry count, and a non-sensitive error code. 3. Redact sensitive headers case-insensitively before any request object is serialized. 4. Mask or omit supporter names, email addresses, telephone numbers, mailing addresses, comments, tributes, and custom fields. 5. Ensure exception and HTTP-client middleware cannot automatically dump headers or bodies. 6. Apply least-privilege access controls, short retention periods, encryption, and monitoring to production logs. 7. Use separate API keys with only the permissions required by each integration, and rotate any credential suspected of having entered logs. 8. Add automated tests that submit sentinel secrets and PII, trigger API failures, and verify that none of those values appear in captured logs. A safer replacement would be: ```markdown Log only sanitized API error metadata. Never log authorization headers, portal access links, payment-method identifiers, supporter PII, or complete request/response bodies. ```
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (22)

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill advertises retrieval of donations, supporters, and analytics without clearly warning that these endpoints expose privacy-sensitive donor records, including names, emails, phone numbers, addresses, and donation history. In an agent setting, missing privacy notice and consent guidance can lead to overbroad access or disclosure of sensitive nonprofit donor data.

External Transmission

Medium
Category
Data Exfiltration
Content
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
## Base URL
```
https://api.fundraiseup.com/v1
```

## Authentication
Confidence
50% 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
**Example Request:**
```bash
curl --request GET \
  --url 'https://api.fundraiseup.com/v1/donations?limit=50' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
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
90% confidence
Finding
The skill enables creation of real donations and transmission of supporter identity, contact details, mailing address, and payment-method references, but the operation description does not place an explicit warning at the action point about financial consequences or handling of sensitive data. In an agent context, this increases the risk of accidental real-world transactions or unintended submission of donor PII without sufficiently informed user confirmation.

External Transmission

Medium
Category
Data Exfiltration
Content
'payment_method_id': payment_method_id,
        'supporter': supporter
    }
    response = requests.post(url, headers=headers, json=data)
    response.raise_for_status()
    return response.json()
Confidence
70% 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.