Back to skill

Security audit

discogs-sync

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Discogs account-management tool, but it deserves review because it can change account data, stores a long-lived token in local plaintext config, and pins dependencies that scanner evidence flags as vulnerable.

Before installing, prefer using DISCOGS_USER_TOKEN instead of storing the token with auth, revoke the token if the machine is shared or compromised, update or audit the pinned dependencies, and use --dry-run or preview output before bulk sync or any removal.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • 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
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
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 · README.md (reported line 18)May include surrounding context.

md
## Setup

### 1. Generate a Personal Access Token

1. Go to https://www.discogs.com/settings/developers
2. Click "Generate new token"

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The description presents a broader sync/manage skill for Discogs wantlists and collections, with marketplace pricing as one capability among several. The supplied code chunk, however, is narrowly focused on marketplace statistics retrieval and related release/version resolution. It does not perform any write operations to a wantlist or collection, nor list those resources. This is a material description-behavior mismatch for this chunk because the declared primary functionality emphasizes collection/wantlist management, while the code here only supports marketplace search/pricing. The code does remain within Discogs-related API behavior and is consistent with the marketplace-pricing portion of the description, so the mismatch is due to missing declared capabilities rather than suspicious extra behavior.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: click==8.3.1 — 1 advisory(ies): CVE-2026-7246 (Pallets Click, versions 8.3.2 and below, contain a command injection vulnerabili)

High
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency list pins click==8.3.1, and the supplied advisory indicates versions 8.3.2 and below are affected by a command injection vulnerability. In a CLI-driven skill that processes user-provided arguments and potentially bulk file input, a vulnerable command-line framework can increase the risk that crafted input triggers unsafe command handling paths.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: idna==3.11 — 2 advisory(ies): CVE-2026-45409 (Internationalized Domain Names in Applications (IDNA): Specially crafted inputs ); CVE-2026-45409 (Internationalized Domain Names in Applications (IDNA) for Python provides suppor)

High
Category
Supply Chain
Confidence
84% confidence
Finding

The requirements pin idna==3.11, which the advisory reports as affected by specially crafted IDNA input handling flaws. This skill is intended to contact only api.discogs.com, so exposure is narrower than in a general-purpose URL processor, but malformed internationalized host/domain handling can still matter anywhere HTTP libraries resolve or validate hostnames.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: oauthlib==3.3.1 — 4 advisory(ies): CVE-2026-49264 (Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrar); CVE-2026-49265 (Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)); CVE-2026-49264 (Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrar) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

oauthlib==3.3.1 is flagged with multiple advisories including JSONP callback injection and PKCE timing issues. The skill description references use of a Discogs personal access token rather than a full OAuth browser flow, which reduces practical exposure, but shipping a known-vulnerable auth library is still a supply-chain and future-maintenance risk if any OAuth-related paths are present.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: urllib3==2.6.3 — 10 advisory(ies): CVE-2026-97687 (urllib3: HTTPS proxy TLS configuration may be ignored or overridden); CVE-2026-97688 (urllib3: Chunked Deflate streaming can enter an infinite loop); CVE-2026-44432 (urllib3: Decompression-bomb safeguards bypassed in parts of the streaming API) +7 more

High
Category
Supply Chain
Confidence
95% confidence
Finding

urllib3==2.6.3 is associated with multiple high-severity advisories, including TLS proxy handling issues, infinite-loop conditions, and decompression-related weaknesses. Because this skill is network-facing and communicates with an external API over HTTPS, weaknesses in the HTTP transport layer materially increase risk of denial of service, traffic handling failures, or weakened connection guarantees.

Content

No source excerpt is available for this finding.

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

md
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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

md
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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

md
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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

md
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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

md
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/auth.py (reported line 1)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/auth.py (reported line 15)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/auth.py (reported line 20)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/auth.py (reported line 36)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/cli.py (reported line 42)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/client_factory.py (reported line 12)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

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 · src/discogs_sync/config.py (reported line 60)May include surrounding context.

python
"""Authentication flow for Discogs (personal access token)."""

from __future__ import annotations

Credential Access

High
Category
Privilege Escalation
Confidence
87% confidence
Finding

This code persists a long-lived personal access token in a plaintext JSON config file on disk. Although the file permissions are tightened on non-Windows systems, plaintext secret storage increases the risk of credential exposure through local compromise, backups, sync tools, or weaker permission handling on other platforms.

Content

Scanner excerpt · src/discogs_sync/config.py (reported line 81)May include surrounding context.

python
def save_user_token(user_token: str, username: str | None = None) -> None:
    """Store a personal access token to config file."""
    config = load_config()
    config.update(
        {

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

  • click==8.3.1 — CLI framework
  • rich==14.3.3 — Terminal output formatting

Installation (one-time, done by the user — not by the agent): create a venv at ~/.discogs-sync/venv and install the pinned requirements. discogs-sync.py picks up this venv automatically; it lives outside the skill directory so skill updates don't remove it.

bash
python3 -m venv ~/.discogs-sync/venv

Known Vulnerable Dependency: Pygments==2.19.2 — 2 advisory(ies): CVE-2026-4539 (Pygments has Regular Expression Denial of Service (ReDoS) due to Inefficient Reg); CVE-2026-4539 (Pygments has Regular Expression Denial of Service (ReDoS) due to Inefficient Reg)

Medium
Category
Supply Chain
Confidence
87% confidence
Finding

Pygments==2.19.2 is reported vulnerable to a Regular Expression Denial of Service. In this skill, Pygments is likely only an indirect dependency used for terminal formatting, so the context makes exploitation less likely unless untrusted text is highlighted or parsed through vulnerable lexers.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: requests==2.32.5 — 2 advisory(ies): CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func); CVE-2026-25645 (Requests is a HTTP library. Prior to version 2.33.0, the `requests.utils.extract)

Medium
Category
Supply Chain
Confidence
78% confidence
Finding

requests==2.32.5 is flagged for insecure temporary file reuse in a utility function related to zipped paths. The skill's normal Discogs API usage may not invoke that specific helper, which lowers immediate exploitability, but retaining a dependency version with a known flaw is still unsafe, especially if future code adds archive handling for bulk inputs or downloaded content.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · src/discogs_sync/exceptions.py (reported line 33)May include surrounding context.

python
class ConfirmationRequiredError(SyncError):
    """A removal was requested without confirmation; nothing was changed.

    ``preview`` describes exactly what would have been removed.
    """

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The function performs a write to the user's Discogs collection by calling _add_to_collection, but this path has no confirmation prompt, print/log disclosure, or warning in the local docstring about modifying remote user data. Because this is a state-changing remote operation, the lack of explicit user disclosure in this code path meets the missing-warning criteria for code files.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.