Back to skill

Security audit

Doppel

Security checks across malware telemetry and agentic risk

Overview

The skill is purpose-aligned and not malicious, but it handles sensitive writing samples while a promised Git ignore safeguard is missing.

Install only if you are comfortable letting your agent read the selected private writing and generated context pack. Prefer copy/symlink installation over the unpinned `npx` path, keep real sources and outputs outside the repository, add your own ignore rules before using real material, and review staged files before committing.

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

T08 · Insecure Dependencies

Warning
Location
README.md:56
Finding
Unpinned Third-Party Package Execution During Installation## Vulnerability Details **File Location**: `README.md:56-60` **Vulnerability Type**: Unpinned executable dependency and supply-chain exposure **Risk Level**: Medium ### Vulnerable Code ```markdown ## Install as a skill ```bash npx skills add AntreasAntoniou/doppel ``` ``` ### Technical Analysis The documented installation procedure invokes the `skills` npm package through `npx` without specifying a package version or integrity value. If the package is not already available locally, `npx` may retrieve executable content from the configured npm registry and run it with the invoking user's privileges. The effective installer can therefore change after this repository has been audited. The local Python implementation is dependency-free, but this installation path introduces a separate, mutable code-execution dependency whose contents and version are not controlled by the audited project. This is a supply-chain risk rather than evidence that the current package is malicious. Exploitation requires compromise, replacement, dependency confusion, or malicious publication of the package resolved as `skills`. ### Attack Path 1. An attacker compromises the npm package, maintainer account, registry resolution path, or another component responsible for resolving the unversioned `skills` command. 2. The attacker publishes a modified release containing malicious installation behavior. 3. A user follows the installation command from the README. 4. `npx` resolves and downloads the attacker-controlled package version. 5. The package executes under the user's account before the user can inspect its effective payload. ### Impact Assessment Malicious package code would ordinarily receive the same operating-system privileges as the user running `npx`. Depending on that user's permissions and environment, it could read or modify accessible files, collect credentials exposed to the process, alter project files, install additional u ...[truncated 241 chars]
Remediation
## Remediation Suggestions 1. Prefer the documented `git clone` or reviewed copy/symlink installation procedure, which does not execute an unrelated installer package. 2. If `npx` remains supported, pin an audited exact version, for example by using an explicit `package@version` reference. 3. Document the expected registry and package publisher so users can detect namespace or registry substitution. 4. Publish and verify package integrity or provenance information, such as registry integrity metadata, signed releases, or attestations. 5. Recommend reviewing the resolved package and running installation in a least-privileged, isolated environment. 6. Add automated checks that reject unpinned executable dependency commands in installation documentation.

T09 · Insecure Skill Coding Practices

Warning
Location
README.md:73
Finding
Missing Git Ignore Controls for Sensitive Voice Artifacts## Vulnerability Details **File Location**: `README.md:73-79`; expected root `.gitignore` is absent **Vulnerability Type**: Missing privacy safeguard for locally generated sensitive data **Risk Level**: Medium ### Vulnerable Code and Configuration The documentation states: ```markdown ## Safety model The workflow refuses unconsented imitation, third-party impersonation, and autonomous attribution. The helper rejects missing consent declarations, non-subject authorship declarations, and hash drift, but a manifest cannot independently prove consent or authorship. The subject must approve the exact final draft before it is sent, submitted, attributed, or published. Keep real sources, manifests, profiles, context packs, and drafts out of Git. The builder makes no model or network calls, but local files do **not** make a hosted agent local: excerpts read by your agent may be processed by its model provider. Choose an execution environment and data policy appropriate to the material before using it. Read [references/safety-and-consent.md](references/safety-and-consent.md) and [SECURITY.md](SECURITY.md) before handling real sources. ``` The package validator also expects an ignore file: ```python REQUIRED = { "SKILL.md", "README.md", "LICENSE", "SECURITY.md", "CONTRIBUTING.md", ".gitignore", "agents/openai.yaml", "schema/voice-manifest.schema.json", "scripts/build_voice_context.py", "references/safety-and-consent.md", } ``` However, no `.gitignore` was present in the audited project root. ### Technical Analysis Voice sources, manifests, context packs, profiles, and generated drafts can contain personal data, confidential facts, consent metadata, and distinctive writing samples. The workflow repeatedly instructs users to keep these artifacts outside version control and states that recommended local filenames are covered by shipped ignore rules. The builder's ` ...[truncated 1761 chars]
Remediation
## Remediation Suggestions 1. Ship the required root `.gitignore` file with rules covering every recommended local artifact pattern, including local manifests, context packs, profiles, corpora, private sources, and drafts. 2. Ensure the ignore patterns match the filenames accepted by `safe_local_output_name()` and the manifest naming conventions shown in the documentation. 3. Add tests using `git check-ignore` to verify that representative sensitive paths are actually ignored; basename regex tests alone are insufficient. 4. Make the builder fail closed when writing inside a Git worktree if the selected output is not confirmed as ignored. 5. Consider warning when a manifest or output is located within the repository, and recommend an external private directory or temporary directory for real data. 6. Update package validation to report the missing `.gitignore` prominently and verify its required rule contents. 7. Document incident-response steps for accidental commits, including credential review where applicable and history rewriting rather than merely deleting the current file.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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 (1)

Missing User Warnings

Medium
Confidence
78% confidence
Finding
The script intentionally aggregates sensitive local material into a single markdown file containing subject identity metadata, consent scope, task/audience context, and verbatim writing excerpts. In a skill specifically designed to build a writing-voice digital twin from private local corpus material, that consolidation increases exposure risk if the file is later synced, shared, indexed, or committed despite the local filename convention.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.