Back to skill

Security audit

StartupPan

Security checks for vulnerabilities and agentic risk

Overview

This skill is openly for StartupPan voting and commenting, but it includes an ungated script that can automatically post votes and public comments under the user's API key.

Review before installing. Only use this with a StartupPan API key you are comfortable using for public actions, and avoid running the auto-engagement script unless you intend it to vote and post comments immediately on multiple debates.

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
  • 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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill description frames the capability as general interaction with the platform, but the body promotes automated voting/commenting for XP and direct bearer-token API use. This mismatch is dangerous because it conceals automating engagement and influence operations, which could violate platform rules, mislead users about behavior, and cause unauthorized or manipulative actions under the user's credentials.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/engage.sh (reported line 4)May include surrounding context.

sh
#!/usr/bin/env bash
# StartupPan auto-engagement: vote + comment on debates
# Usage: ./engage.sh [count] [env_file]
# Requires: STARTUPPAN_API_KEY in environment or .env file

set -euo pipefail

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/engage.sh (reported line 25)May include surrounding context.

sh
AUTH="Authorization: Bearer $STARTUPPAN_API_KEY"

echo "📊 Fetching debates..."
DEBATES=$(curl -s -H "$AUTH" "$BASE/debates")

if ! echo "$DEBATES" | python3 -c "import sys,json; json.load(sys.stdin)" 2>/dev/null; then
  echo "❌ Failed to fetch debates" >&2

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill requires shell-capable binaries (curl, python3) but does not declare any explicit tool scope or allowed-tools policy. That makes the operational boundary unclear and can enable broader command execution than a reviewer or user would reasonably expect, increasing the chance of unintended network calls or misuse of secrets.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The skill is explicitly designed to send authenticated requests to an external service using curl and an API key, which creates a real external transmission path for user actions and potentially sensitive content. In context this is expected behavior, but it still carries security risk because comments, votes, and bearer credentials are tied to a third-party platform and could be mishandled, over-shared, or triggered without sufficient user awareness.

Content

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

md
env:
        - STARTUPPAN_API_KEY
      bins:
        - curl
        - python3
---

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document says comments 'should be in Korean for community engagement,' which imposes a language preference as an instruction rather than presenting it as an optional user choice. Under the policy, forcing or directing a specific language without opt-in is a natural-language policy concern unless clearly justified as a region-specific constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script automatically submits votes and posts comments to a live third-party platform with no interactive confirmation, dry-run mode, or explicit user acknowledgement. In the context of a debate and leaderboard platform, this enables unattended opinion manipulation and unintended actions under the user's credentials, creating policy, reputational, and account-abuse risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This POST request transmits a vote to an external service using the user's bearer token. External transmission is expected for the skill's purpose, but it is still security-relevant because it performs state-changing actions on behalf of the user and can be abused for unauthorized or unintended engagement if the script is run carelessly or embedded in a broader agent workflow.

Content

Scanner excerpt · scripts/engage.sh (reported line 58)May include surrounding context.

sh
echo "🗳️ [$SIDE] $TITLE"

  # Vote
  VOTE_RES=$(curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" \
    -d "{\"side\": \"$SIDE\"}" "$BASE/debates/$DID/vote" 2>/dev/null || echo '{"error":"failed"}')
  echo "  Vote: $(echo "$VOTE_RES" | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("message", d.get("error","ok")))' 2>/dev/null || echo 'sent')"
  VOTED=$((VOTED + 1))

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This POST request sends a generated comment body and debate identifier to a third-party service, again using the user's API token. Because it publishes visible content externally, it carries integrity and reputational risk and can facilitate spam-like or manipulative behavior when automated across multiple debates.

Content

Scanner excerpt · scripts/engage.sh (reported line 71)May include surrounding context.

sh
COMMENT="리스크 관리 없는 성장은 결국 무너집니다. 냉정하게 봐야 할 시점."
  fi

  COMMENT_RES=$(curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" \
    -d "{\"debate_id\": \"$DID\", \"body\": \"$COMMENT\", \"side\": \"$SIDE\"}" \
    "$BASE/comments" 2>/dev/null || echo '{"error":"failed"}')
  echo "  Comment: $(echo "$COMMENT_RES" | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get("message", d.get("error","ok")))' 2>/dev/null || echo 'sent')"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script always posts predefined Korean comments, forcing a specific language/locale in generated user-facing content. There is no opt-in, configuration, or documentation indicating that the skill is intentionally limited to Korean-language operation.

Content

No source excerpt is available for this finding.