Back to skill

Security audit

RankForge

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real SEO API helper, but its script handles credentials and outbound destinations in ways users should review before installing.

Review before installing. Use only with SEO data you are comfortable sending to the RankForge service, set RANKFORGE_API_KEY directly rather than relying on auto-signup, avoid running it in logged CI or shared agent sessions until the key-printing behavior is fixed, and do not set RANKFORGE_API_URL unless you fully trust that endpoint.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/forge-client.sh:3
Finding

Unvalidated API endpoint permits credential and user-data exfiltration

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } fi [ -z "$API_KEY" ] && { echo "❌ Set RANKFORGE_API_KEY or RANKFORGE_EMAIL" >&2; exit 1; } ACTION="${1:-help}"; shift || true case "$ACTION" in analyze) curl -sf -X POST "$API_BASE/v1/seo/analyze" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;; health) curl -sf "$API_BASE/v1/health" ;; ``` ### Technical Analysis The complete API origin is taken from the `RANKFORGE_API_URL` environment variable without validating its scheme or hostname. Both the email-based registration request and authenticated analysis request are subsequently sent to this configurable destination. An attacker who can influence the process environment can set the variable to an attacker-controlled HTTP or HTTPS service. During registration, this discloses the user's email address. During analysis, the script places the RankForge API key in an `Authorization: Bearer` header and sends the supplied analysis payload to the same untrusted endpoint. Allowing an `http://` destination can additionally expose these values to network interception. The script does not execute the server response as code, so this issue does not constitute remote payload execution. It is an insecure endpoint configuration and sensitive-data disclosure issue. ### Attack Path 1. An attacker gains the ability to define or mo ...[truncated 1237 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/forge-client.sh:9
Finding

Newly issued API key is exposed through standard error

Content
View full analysis
&2 || { echo "❌ Signup failed" >&2; exit 1; } ``` ### Technical Analysis After successful email registration, the script writes the complete API key to standard error. Standard error is routinely captured by terminal history tooling, CI/CD job logs, Agent execution transcripts, monitoring systems, and centralized log collectors. Although standard error is separate from standard output, it is not a secure secret-storage channel. Any user or service with access to the captured logs can recover the credential. The exposure happens automatically whenever the script obtains a new key through email-based signup. ### Attack Path 1. A user runs the client with `RANKFORGE_EMAIL` set and without an existing `RANKFORGE_API_KEY`. 2. The remote service returns a new API key. 3. The script prints the complete key to standard error. 4. The execution environment captures standard error in a terminal transcript, CI log, Agent conversation record, or centralized logging platform. 5. An unauthorized party with access to that output obtains the key and uses it to make RankForge API requests. ### Impact Assessment An attacker who obtains the printed value can operate with the remote permissions assigned to the API key. This may allow unauthorized SEO-analysis requests, consumption of the account's API quota, and actions attributable to the legitimate user. The issue does not provide direct local code execution or operating-system privilege escalation. The affected scope consists of the remote RankForge account capabilities associated with the leaked key. ]]>
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
84% confidence
Finding

The code only exposes two concrete actions: health and analyze. The analyze action posts user-supplied JSON to one generic SEO analysis endpoint, which may support some SEO auditing, but the code does not demonstrate dedicated functionality for keyword research, competitor analysis, ranking reports, backlink checks, or optimization workflows. The free-tier claim is loosely consistent because the script can request a free key via email, but the main mismatch is that the declared description significantly overstates the implemented capabilities shown in this code chunk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Printing the newly generated API key to stderr exposes a live secret to logs, terminal history capture, CI/CD output, agent transcripts, or any supervising system that records stderr. Anyone with access to that output can reuse the credential to access the RankForge API as the user.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill documents shell-based network operations but does not declare any tool scope or permissions boundaries. In an agent environment, this can enable unintended shell execution and outbound requests without explicit review, increasing the chance of misuse or data exfiltration through the skill workflow.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The skill instructs users or agents to transmit data externally to a third-party domain, including an email address for key issuance and later target URLs for SEO analysis. External transmission is not inherently malicious in an API integration skill, but it is security-relevant because sensitive user, tenant, or internal site data could be sent off-platform if the skill is invoked on private assets.

Content

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

Set RANKFORGE_API_KEY or RANKFORGE_EMAIL for auto-signup (free, no credit card).

bash
curl -X POST https://anton.vosscg.com/v1/keys -H 'Content-Type: application/json' -d '{"email":"you@example.com"}'

Usage

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script can silently provision a new API key from only an email address when no key is present. That expands the skill’s capabilities beyond straightforward SEO analysis into account/key creation, which can trigger unintended external actions and expose user identity data to a third-party service without clear consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This line transmits the user-provided email address to an external endpoint to create an API key. External transmission is expected for a network API client, but here it is tied to an automatic signup flow that may occur implicitly, making the data disclosure and account creation more sensitive than ordinary SEO requests.

Content

Scanner excerpt · scripts/forge-client.sh (reported line 7)May include surrounding context.

sh
API_KEY="${RANKFORGE_API_KEY:-}"
EMAIL="${RANKFORGE_EMAIL:-}"
if [ -z "$API_KEY" ] && [ -n "$EMAIL" ]; then
  RESP=$(curl -sf -X POST "$API_BASE/v1/keys" -H "Content-Type: application/json" -d "{\"email\": \"$EMAIL\"}")
  API_KEY=$(echo "$RESP" | grep -o '"api_key":"[^"]*"' | cut -d'"' -f4)
  [ -n "$API_KEY" ] && echo "✅ Free key: $API_KEY" >&2 || { echo "❌ Signup failed" >&2; exit 1; }
fi

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 · scripts/forge-client.sh (reported line 14)May include surrounding context.

sh
[ -z "$API_KEY" ] && { echo "❌ Set RANKFORGE_API_KEY or RANKFORGE_EMAIL" >&2; exit 1; }
ACTION="${1:-help}"; shift || true
case "$ACTION" in
  analyze) curl -sf -X POST "$API_BASE/v1/seo/analyze" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d "$1" ;;
  health) curl -sf "$API_BASE/v1/health" ;;
  *) echo "RankForge: analyze '<json>' | health" ;;
esac

Static analysis

No suspicious patterns detected.