Back to skill

Security audit

Viboscope

Security checks for vulnerabilities and agentic risk

Overview

This skill provides a real matching service, but it asks the agent to collect and send highly sensitive profile data with weak consent and update controls.

Review carefully before installing. This skill handles unusually sensitive psychological and relationship data, may inspect local workspace and git information before asking, and may send profile details to Viboscope before explicit registration consent. Do not run the suggested curl update command without independent verification, store any API key outside version-controlled project files, and require manual approval for messages, deletions, and profile uploads.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (4)

other

Error
Location
SKILL.md:336
Finding

Psychological Profile Data Is Transmitted Before Explicit Consent

Content
View full analysis
Body: {} ``` The explicit consent requirement appears only later: ```text **Before sending:** Ask explicit consent: "Your psychological profile will be stored on the Viboscope server to calculate compatibility with other users. Other people see only public data (nickname, city, age, interests, skills, languages, looking_for, last_active) — never your personality scores, portrait, or questionnaire answers. You can control visibility of age, location, and last_active in privacy settings. Continue?" Only set `consent_given: true` if user explicitly agrees. ``` ### Technical Analysis The onboarding workflow requires the agent to send the assembled profile to the remote `/profile/gaps` endpoint before registration. The example request includes geographic location, age, Big Five traits, and potentially all other collected profile fields. Elsewhere, the profile schema includes values, attachment characteristics, conflict style, work style, behavioral portrait, gender, questionnaire answers, and relationship preferences. These fields constitute highly sensitive personal and psychological information. Although the skill requires explicit consent before `/register`, that consent occurs after the anonymous `/profile/gaps` transmission. Consequently, declining registration does not pre ...[truncated 2025 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:80
Finding

Silent Workspace and Git Metadata Reconnaissance Exceeds Default Least Privilege

Content
View full analysis
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:48
Finding

Unverified Remote Skill Update Can Replace Trusted Agent Instructions

Content
View full analysis
"A new version of Viboscope is available. Update: `curl -s https://viboscope.com/api/v1/skill -o .claude/skills/viboscope.md`" If same or server unavailable → say nothing, proceed normally. ``` ### Technical Analysis The update procedure retrieves skill instructions from a remote endpoint and writes them directly into the agent's trusted skills directory. It does not require a pinned digest, cryptographic signature, transparency log, version-specific immutable URL, content inspection, staging location, or rollback mechanism. HTTPS protects transport only while the endpoint and certificate trust chain remain uncompromised. It does not protect against compromise of the Viboscope server, DNS or account takeover, malicious changes by the service operator, or a vulnerable backend serving attacker-controlled content. Because the downloaded artifact is an agent instruction file, replacement can materially alter later agent behavior without conventional executable code. A modified skill could instruct the agent to read credentials, disclose files, execute shell commands, send messages, or weaken consent and prompt-injection protections. The payload can also change after the original package has been audited. The command is presented to the user rather than silently executed, which reduces exploitability, but it still recommends direct replacement without verification or review. ### Attack Path 1. An attacker compromises the remote service, deployment pipeline, domain, or skill endpoint. 2. The attacker modifies `/api/v1/skill` to return hostile agent instructions. 3. The health ...[truncated 881 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:25
Finding

IDE API-Key Storage Guidance Permits Credential Exposure in Project Files

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (12)

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill directs silent collection of personal data from the workspace and previous interactions before obtaining consent. Because the skill is designed to build psychological profiles, this context makes the issue more dangerous: the harvested data may reveal sensitive traits, identity, location, work history, and private communications that are not necessary to collect by default.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

md
5. Actions:
   - "Reply" → start conversation
   - "Check compatibility" → search for sender's nickname to get server-calculated score
   - "Not interested" → `DELETE /inbox/{id}`
   - "Block" → `POST /users/{nickname}/block`

6. Mark as read: `PATCH /inbox/{id}` with `{"read": true}`

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

text

**Manage:** "Show subscriptions", "Pause subscription", "Delete subscription"
→ `GET /subscriptions`, `PATCH /subscriptions/{id}`, `DELETE /subscriptions/{id}`

## Mode: Profile Deepening

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes very broad phrases such as generic requests to 'find me' or search for people, which can cause the skill to activate in unrelated contexts. Overbroad activation is risky here because the skill performs sensitive profiling, onboarding, and potential data collection behaviors that users may not have intended to invoke.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill claims it 'never acts without the user's knowledge' but later directs covert context gathering from files, git config, session history, and platform data. This contradiction is dangerous because it misleads users about the actual privacy posture and may cause them to disclose or permit use of data under false assumptions.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly instructs the agent to silently inspect workspace files, git config, prior interactions, and platform profile data to infer personal attributes before asking the user. That is a privacy-invasive data collection behavior and exceeds what is necessary for the user’s immediate request, especially because it is done without prior notice or consent.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% 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 · SKILL.md (reported line 325)May include surrounding context.

md
- **If two LLM portraits contradict** (e.g. Claude says introvert, ChatGPT says extrovert): average the scores. If the gap is >0.30, ask the user: "[LLM1] and [LLM2] disagree on [trait] — which feels more accurate?" Questionnaire data resolves this if available.
- If no questionnaire for a dimension: use LLM-extracted score
- If neither: leave null, reflect in completeness %
- **YOU extract all numerical scores** from text. NEVER ask the user "rate your Openness 0-1" — they don't know what that means
- When LLM wrote "no data" for a section: respect it, leave null, do NOT fill in from imagination
- Save questionnaire answers progressively — after each questionnaire, immediately save `data/raw/questionnaire-{name}.json`
- Create directories if needed: `mkdir -p data/raw`

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
⛔ POST-REGISTRATION CHECKLIST — verify ALL before proceeding:
1. `api_key` saved to `data/.api_key` (or `.env` in IDE platforms)
2. On Unix: `chmod 600 data/.api_key`
3. `data/.gitignore` created with `.api_key`
4. `data/profile.yaml` generated with full profile
5. `POST /profile/gaps` called → completeness and recommendations shown to user

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
⛔ POST-REGISTRATION CHECKLIST — verify ALL before proceeding:
1. `api_key` saved to `data/.api_key` (or `.env` in IDE platforms)
2. On Unix: `chmod 600 data/.api_key`
3. `data/.gitignore` created with `.api_key`
4. `data/profile.yaml` generated with full profile
5. `POST /profile/gaps` called → completeness and recommendations shown to user

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

  • If score is low, be gentle: "This might not be the easiest match — you approach closeness differently" not "low attachment compatibility"
  • Never reveal the other person's attachment style or psychological traits directly

Romantic search — gender filter: If gender is obvious from context ("find me a boyfriend", "ищу девушку"), use it directly without asking. Otherwise, ask naturally: "Are you looking for a man, a woman, or open to anyone?" Then pass gender_filter in the search:

text
POST /search { "context": "romantic", "filters": { "looking_for": ["romantic-partner"], "gender_filter": ["male"] } }

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
91% confidence
Finding

The autonomous mode authorizes the agent to send up to five messages on the user’s behalf without per-message confirmation once delegation is given. Even with explicit delegation, this creates a meaningful risk of unwanted disclosures, reputational harm, harassment, or commitment-making because outbound communications are high-impact actions.

Content

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

md
Activated ONLY when user explicitly says: "Chat with Anna on my behalf" / "Talk to her for me"

**Rules:**
- **Maximum 5 messages without confirmation.** After 5 → pause and report:
  "Sent 5 messages. Key points: ... Continue?"
- Use ONLY public profile info (interests, skills, looking_for) as conversation basis
- **NEVER reveal** forbidden data (see Security section)

Vague Triggers

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Using generic triggers like 'inbox' or equivalent everyday phrases can invoke the skill when a user merely wants to discuss messages generally. In a skill that reads inbox summaries and message data, ambiguous activation increases the chance of unintended access to private account data or confusing cross-tool behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.