Back to skill

Security audit

CC3PO Music Generation

Security checks for vulnerabilities and agentic risk

Overview

This is a documentation-only music generation skill whose provider API examples and setup commands match its stated purpose, with normal third-party service and dependency-installation cautions.

Before using the API examples, confirm the provider is the one you intend to trust, use provider-specific revocable API keys, avoid submitting confidential lyrics or project details, and run any pip or git setup in a virtual environment or container with pinned versions for production use.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (2)

T08 · Insecure Dependencies

Warning
Location
riffusion.md:23
Finding

Unpinned Third-Party Dependencies and Mutable Repository Content

Content
View full analysis

Vulnerability Details

File Locations:

  • musicgen.md:18-22
  • stable-audio.md:34-38
  • replicate.md:7-12
  • riffusion.md:23-30

Vulnerability Type: Unpinned and unverified third-party dependencies
Risk Level: Medium

Affected Code:

musicgen.md:18-22

bash
## Installation

```bash
pip install audiocraft
text

`stable-audio.md:34-38`
```bash
## Local Setup (Open Model)

```bash
pip install stable-audio-tools
text

`replicate.md:7-12`
```bash
## Setup

```bash
pip install replicate
export REPLICATE_API_TOKEN="r8_xxx"
text

`riffusion.md:23-30`
```bash
## Local Setup

```bash
git clone https://github.com/riffusion/riffusion.git
cd riffusion
pip install -r requirements.txt
text

### Technical Analysis

The installation instructions retrieve mutable packages and repository content without pinning package versions, validating cryptographic hashes, or checking out a reviewed commit. Package installation can execute build-system hooks, setup scripts, native extensions, and subsequently imported package code with the privileges of the user running the commands.

The Riffusion workflow is particularly exposed because it clones the repository's current default branch and immediately installs its dependency file. The effective code and dependency set can therefore change after this Skill has been reviewed.

These instructions do not demonstrate a currently malicious dependency. The vulnerability is the lack of controls needed to ensure that the installed code remains identical to reviewed code.

### Attack Path

1. An upstream package, repository, maintainer account, release process, or transitive dependency is compromised.
2. The attacker publishes a malicious release or modifies the repository's default branch or dependency declarations.
3. A user follows the Skill's unpinned `pip install` or `git clone` instructions.
4. The package manager 
...[truncated 852 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin every package to a reviewed version, for example package==X.Y.Z.
  2. Use a lock file containing all transitive dependency versions.
  3. Require package hashes with pip install --require-hashes.
  4. Pin Git repositories to a reviewed immutable commit SHA rather than the default branch.
  5. Verify repository ownership and package provenance before installation.
  6. Install dependencies in a dedicated virtual environment or isolated container without elevated privileges.
  7. Use a restricted service account and prevent dependency installation from accessing unrelated credentials or sensitive files.
  8. Scan packages and lock files with software-composition analysis tools before use.
  9. Separate dependency installation from runtime and review all installation scripts and build hooks.
  10. Document the exact versions and commit identifiers tested with the Skill.

T08 · Insecure Dependencies

Warning
Location
suno.md:25
Finding

Unofficial Suno API Wrappers Receive Credentials and User-Provided Content

Content
View full analysis

Vulnerability Details

File Location: suno.md:25-52
Vulnerability Type: Untrusted third-party API integration and sensitive-data disclosure risk
Risk Level: Medium

Affected Code:

python
## API Access

**Note:** No official public API. Third-party wrappers available:

### Unofficial APIs

**SunoAPI.org:**
```python
import requests

response = requests.post(
    "https://api.sunoapi.org/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "upbeat pop song about summer",
        "model": "v5",
        "lyrics": "Optional custom lyrics here"
    }
)

PiAPI (suno-v5):

python
response = requests.post(
    "https://api.piapi.ai/api/v1/suno/generate",
    headers={"X-API-Key": API_KEY},
    json={
        "prompt": "epic orchestral trailer music",
        "make_instrumental": True
    }
)
text

### Technical Analysis

The Skill explicitly states that Suno has no official public API and then recommends two unofficial API intermediaries. Executing these examples sends a bearer or API credential and user-provided prompts or lyrics to those third-party services.

Prompts and lyrics may contain unpublished creative works, personal information, confidential project details, or licensed material. The documentation does not require informed user consent, explain the third-party trust boundary, address data retention or model-training policies, or instruct users to create narrowly scoped service-specific credentials.

The generic `API_KEY` variable name may also encourage accidental reuse of a credential intended for another provider. The examples use HTTPS, so no plaintext transport was identified; the principal concern is disclosure to and reliance on unofficial service operators.

### Attack Path

1. A user chooses an unofficial wrapper based on the Skill's recommendation.
2. The user configures an API key and submits
...[truncated 973 chars]
Remediation
View remediation

Remediation Suggestions

  1. Prefer Suno's official web interface until an official supported API is available.
  2. Do not present unofficial wrappers as equivalent to an official provider integration.
  3. Require explicit user confirmation before transmitting prompts, lyrics, or other content to an unofficial service.
  4. Clearly identify the receiving organization and disclose that credentials and content leave the local environment.
  5. Direct users to review the service's privacy policy, retention policy, security controls, and terms before use.
  6. Use a uniquely named, service-specific environment variable for each wrapper, such as SUNOAPI_ORG_API_KEY or PIAPI_API_KEY.
  7. Require dedicated, minimally scoped, revocable credentials with spending and usage limits where supported.
  8. Warn users never to reuse official-provider, cloud, or unrelated API credentials.
  9. Avoid sending confidential, personal, copyrighted, or unpublished material unless the user has approved the service's handling terms.
  10. Verify endpoints against current provider documentation and document a credential-rotation and revocation procedure.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (30)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · mubert.md (reported line 36)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.mubert.com/v2/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    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 · mubert.md (reported line 37)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.mubert.com/v2/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "energetic workout music",

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 · mubert.md (reported line 54)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.mubert.com/v2/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "energetic workout music",

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 · mubert.md (reported line 68)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.mubert.com/v2/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "energetic workout music",

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 · mubert.md (reported line 98)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.mubert.com/v2/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "energetic workout music",

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · mubert.md (reported line 53)May include surrounding context.

python
# Using Mubert's text-to-music
response = requests.post(
    "https://api.mubert.com/v2/ttm",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · mubert.md (reported line 67)May include surrounding context.

Tag-Based Generation

python
response = requests.post(
    "https://api.mubert.com/v2/generate",
    json={
        "tags": ["electronic", "upbeat", "happy"],

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · mubert.md (reported line 97)May include surrounding context.

python
# Initialize stream
stream = requests.post(
    "https://api.mubert.com/v2/stream/start",
    json={"tags": ["lo-fi", "chill"]}
)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The Replicate API example transmits the prompt text to an external third-party service, but the documentation does not disclose that user inputs leave the local environment. In a music-generation skill, prompts may contain proprietary creative ideas, sensitive project details, or personal data, so this omission can cause unintentional data exposure and compliance/privacy issues.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation shows exporting a live-looking API token pattern directly in shell setup instructions without any warning about secret handling, storage, rotation, or avoiding committing credentials to source control. In a copy-paste-oriented skill, this can normalize unsafe credential practices and increase the chance users expose tokens in shell history, logs, screenshots, or repositories.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · soundraw.md (reported line 37)May include surrounding context.

md
import requests

# Example API call (actual endpoints may vary)
response = requests.post(
    "https://api.soundraw.io/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    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 · soundraw.md (reported line 38)May include surrounding context.

md
# Example API call (actual endpoints may vary)
response = requests.post(
    "https://api.soundraw.io/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "genre": "corporate",

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 · mubert.md (reported line 36)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · mubert.md (reported line 53)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · mubert.md (reported line 67)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · mubert.md (reported line 97)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · soundraw.md (reported line 37)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · stable-audio.md (reported line 17)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · stable-audio.md (reported line 17)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",

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 · stable-audio.md (reported line 18)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.stability.ai/v1/generation/stable-audio",
    headers={
        "Authorization": f"Bearer {STABILITY_API_KEY}",
        "Content-Type": "application/json"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document recommends unofficial third-party APIs for Suno despite explicitly noting there is no official public API, but it does not warn that prompts, custom lyrics, generated content requests, and API credentials will be sent to external services outside the primary vendor. This creates a real data-handling and supply-chain risk because users may unknowingly disclose sensitive content or secrets to unvetted providers.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

This duplicate finding highlights the same outbound request pattern: a bearer token and generation inputs are posted to an unofficial external API. The risk remains that documentation encourages undisclosed transmission of secrets and user data to a non-official service.

Content

Scanner excerpt · suno.md (reported line 34)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.sunoapi.org/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

This duplicate finding highlights the same outbound request pattern: a bearer token and generation inputs are posted to an unofficial external API. The risk remains that documentation encourages undisclosed transmission of secrets and user data to a non-official service.

Content

Scanner excerpt · suno.md (reported line 34)May include surrounding context.

python
import requests

response = requests.post(
    "https://api.sunoapi.org/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The hardcoded external endpoint reference to api.sunoapi.org evidences transmission to an unofficial remote service. By itself this is not malicious, but in context it contributes to a genuine risk of off-platform data exposure because the skill does not contextualize trust boundaries or data handling implications.

Content

Scanner excerpt · suno.md (reported line 35)May include surrounding context.

md
import requests

response = requests.post(
    "https://api.sunoapi.org/v1/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "prompt": "upbeat pop song about summer",

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

This duplicate finding covers the same PiAPI code path and confirms that an external provider receives the API key and prompt data. The documentation context reduces exploitability compared with executable code, but it still constitutes a real security/privacy weakness because it omits necessary warnings.

Content

Scanner excerpt · suno.md (reported line 47)May include surrounding context.

PiAPI (suno-v5):

python
response = requests.post(
    "https://api.piapi.ai/api/v1/suno/generate",
    headers={"X-API-Key": API_KEY},
    json={

Static analysis

No suspicious patterns detected.