Back to skill

Security audit

Ironprose

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent writing-assistant wrapper, but users should know it installs a mutable external CLI and sends manuscript text to a remote API by default.

Before installing, verify the IronProse package source and consider pinning a known version. Do not submit confidential, unpublished, regulated, or client-owned manuscript text unless you are comfortable sending it to the configured IronProse API endpoint and understand that endpoint's privacy and retention terms.

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
SKILL.md:20
Finding
Unpinned Third-Party Package Installation and Execution## Vulnerability Details **File Location**: `SKILL.md`, lines 20-27 **Vulnerability Type**: Unpinned and unverified executable dependencies **Risk Level**: Medium ### Evidence ```bash # Install via npm (recommended) npx ironprose --help # Or install via cargo cargo install ironprose-cli ``` ### Technical Analysis The documented installation methods resolve third-party packages without specifying an exact version, checksum, lockfile, or other integrity constraint. Running `npx ironprose --help` may download and immediately execute the currently resolved npm package. Similarly, `cargo install ironprose-cli` retrieves and builds the package version selected from the registry. Because the package source is mutable independently of the reviewed skill, future installations may execute code that was not present or assessed during this audit. Exploitation would require compromise of the relevant package, publisher account, registry, or dependency chain. The project contains no local implementation or integrity metadata with which to verify the installed executable. ### Attack Path 1. An attacker compromises the `ironprose` npm package, the `ironprose-cli` Cargo package, a publisher account, or a transitive dependency. 2. The attacker publishes a malicious version that can be selected by the unpinned installation command. 3. An agent or user follows the installation instructions in `SKILL.md`. 4. The package manager downloads the mutable package release. 5. The downloaded package or compiled binary executes with the permissions of the user running the command. 6. Malicious code can access resources available to that user, subject to operating-system controls. ### Impact Assessment Successful exploitation could permit arbitrary code execution under the invoking user's account. This may expose files, environment variables, credentials, and network resources accessible to that account. It could also allow modification of ...[truncated 252 chars]
Remediation
## Remediation Suggestions - Pin each dependency to a specific, reviewed version rather than implicitly selecting the latest available release. - Publish and verify cryptographic checksums or signed release artifacts. - For Cargo installation, use an exact version and locked dependency resolution where supported, such as `cargo install --version <reviewed-version> --locked ironprose-cli`. - For npm, avoid combining first-time retrieval with execution. Install an exact reviewed version, verify package integrity and provenance, and execute it only after validation. - Maintain lockfiles or equivalent reproducible dependency manifests for any distributed wrapper or installation process. - Add automated dependency and publisher-provenance monitoring. - Run the CLI in a sandbox with only the manuscript files and network access strictly necessary for its documented function.

other

Warning
Location
SKILL.md:35
Finding
Insufficiently Disclosed Transmission of Manuscripts and Feedback to an External API## Vulnerability Details **File Location**: `SKILL.md`, lines 35-47, 62-77, and 110-121 **Vulnerability Type**: External transmission of potentially confidential user content **Risk Level**: Medium ### Evidence ```bash # Full analysis — JSON is the only stable output format ironprose analyze --file chapter-07.md --output json # Pipe from stdin cat draft.md | ironprose analyze --output json # Raw JSON passthrough — zero translation loss, full API control ironprose analyze \ --json '{"text":"The dark night was very dark."}' \ --output json # Scores only — minimizes output tokens ironprose analyze --file chapter-07.md --output json --score-only ``` ```bash # Did the rewrite improve the prose? ironprose compare \ --original-file draft_v1.md \ --revised-file draft_v2.md \ --output json ``` ```bash ironprose rate \ --json '{"rule":"repetition","rating":"false_positive","diagnostic_id":"d-001","context":"Intentional repetition"}' ``` ```text --api-url <API_URL> IronProse API base URL [env: IRONPROSE_API_URL=] [default: https://prose-mcp.fly.dev] --api-key <API_KEY> API key for authenticated access (optional, free tier available) [env: IRONPROSE_API_KEY=] ``` ### Technical Analysis The documented workflows instruct users and agents to provide complete manuscript files, standard input, original and revised drafts, JSON text, diagnostic identifiers, and feedback context to the IronProse CLI. The CLI reference identifies `https://prose-mcp.fly.dev` as its default API endpoint, establishing that the tool is designed to communicate with an external service. The skill does not prominently state, before the file-processing examples, that submitted text may leave the local system. It also does not document the external service's data retention, secondary use, access controls, deletion process, or confidentiality guarantees. Because the repository contains only `SKILL.md` and ...[truncated 1621 chars]
Remediation
## Remediation Suggestions - Add a prominent notice before the first workflow explaining that manuscript content is processed through an external API by default. - Require explicit user confirmation before transmitting files, drafts, or feedback outside the local environment. - Document exactly which request fields and metadata are transmitted. - Link to a clear privacy policy covering retention periods, secondary use, model training, subprocessors, access controls, deletion, and incident response. - Provide a verified local or offline analysis mode for confidential manuscripts. - Apply data minimization by submitting only the passages required for analysis rather than complete manuscripts where possible. - Warn users not to submit secrets, regulated personal data, or content subject to confidentiality obligations without appropriate authorization. - Enforce TLS certificate validation and authenticated API access where applicable. - Clearly identify the security implications of overriding `IRONPROSE_API_URL`, because a custom endpoint receives submitted content.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The skill instructs users to run `npx ironprose` without pinning a specific package version, which allows whatever version is current at execution time to be fetched and run. That creates a supply-chain risk: a compromised upstream package, malicious update, or typosquatted resolution path could result in execution of unreviewed code on the user's system.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill documents a CLI that sends manuscript text to a remote API endpoint (`https://prose-mcp.fly.dev`) and encourages passing full prose via `--file`, stdin, and inline JSON, but it does not clearly warn users that their content leaves the local machine. For a writing-assistant skill, that omission can expose unpublished manuscripts, proprietary drafts, or sensitive text to third-party processing without informed consent.

Static analysis

No suspicious patterns detected.