Back to skill

Security audit

Social Hub Server

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent matching-engine purpose, but it centralizes sensitive user profiles and relationship metadata with under-scoped external AI processing, broad local retention, and identifiable shared-group logs.

Review before installing. This skill should only be used in an environment where all participants have agreed to centralized profile storage and external AI processing. Operators should define approved AI providers, exclude or separately consent private fields, restrict detailed logs to authorized staff, add retention and deletion controls, and protect the ~/.matchbot-engine data directory.

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
SKILL.md:96
Finding
Sensitive User Profiles Are Transmitted to Unspecified External AI Services## Vulnerability Details **File Location**: `SKILL.md`, lines 96–138 **Vulnerability Type**: Uncontrolled disclosure of sensitive data to external services **Risk Level**: High **Relevant instruction excerpts translated into English:** ```text Line 96: Second, convert the new tag data into vectors and update the corresponding ChromaDB collections. For each dimension (skills, interests, goals, challenges, and basic_info), convert the dimension's tag text into a vector through an embedding API, and then upsert it into the corresponding collection. Line 128: LLM deep matching: Submit the tag summaries of A and B to an LLM and separately evaluate situational consistency and capability complementarity. For the specific prompt template and scoring logic, refer to references/matching-algorithm.md. Line 138: Fields whose disclosure setting is "private" must not appear in any information presented to the other party and are used only internally by the matching algorithm. ``` ### Technical Analysis The skill directs the agent to transmit every listed profile dimension to an embedding API and to submit both users' profile summaries to an LLM. These dimensions include potentially sensitive basic information, personal goals, challenges, interests, and skills. The disclosure policy only prevents a `private` field from being shown to another matched user. It does not prevent that field from being transmitted to the embedding provider or LLM provider for algorithmic processing. The instructions do not define: - Approved or allowlisted service providers - Informed user consent for third-party processing - Exclusion of private fields from remote requests - Data minimization or field-level redaction - Provider retention and model-training restrictions - Transport-security requirements - Identifier pseudonymization - Deletion or revocation procedures - Audit logging for external disclosures Consequently, da ...[truncated 1479 chars]
Remediation
## Remediation Suggestions 1. Exclude all `private` fields from external API requests by default. Process them only with an approved local model unless the user gives explicit, purpose-specific consent. 2. Introduce a field-level outbound-data policy that separately controls storage, matching use, embedding, LLM submission, and disclosure to other users. 3. Send only the minimum attributes necessary for each scoring operation. Replace raw profile text with coarse, non-identifying features whenever possible. 4. Remove user IDs and other stable identifiers before sending data to external providers. Use short-lived pseudonymous request identifiers. 5. Restrict integrations to allowlisted providers with enforced TLS, no-training commitments, zero-retention or contractually limited retention, regional processing controls, and documented deletion procedures. 6. Require informed consent before remote AI processing and provide users with opt-out, data-export, correction, and deletion mechanisms. 7. Add outbound request auditing that records the provider and field categories sent without duplicating sensitive content in logs. 8. Validate that referenced matching prompts cannot include private attributes through indirect concatenation or derived summaries.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:104
Finding
Identifiable Matching Decisions and Feedback Are Broadcast to a Shared Group## Vulnerability Details **File Location**: `SKILL.md`, lines 104–150 **Vulnerability Type**: Excessive disclosure of relationship metadata through shared observability logs **Risk Level**: Medium **Relevant instruction excerpts translated into English:** ```text Line 104: When MATCH_ACCEPT is received, update that party's decision for the corresponding match_id to accept. Check whether the other party has also responded. If both parties accept, execute the match confirmation workflow. If the other party has not responded, wait. Send the following log to the group: "[ENGINE] user_{id} accepted match {match_id}; waiting for the other party." Line 108: When FEEDBACK is received, update the feedback data for the corresponding match_id in the matching history. Send the following log to the group: "[ENGINE] Received feedback from user_{id} for match {match_id}, rating {rating}." Line 134: Send the following log to the group: "[ENGINE] Match found: user_{a} <-> user_{b}, overall score {score}; both parties have been notified." Line 150: Send the following log to the group: "[ENGINE] Match {match_id} confirmed! user_{a} <-> user_{b} will establish contact." ``` ### Technical Analysis The skill operates through an internal group containing the users' personal agents and deliberately publishes identifiable matching events to that group. The logs disclose user identifiers, pair identities, match identifiers, scores, acceptance status, confirmation status, and individual feedback ratings. These details are not necessary for general service observability. Publishing them to a common communication channel violates data minimization and least-disclosure principles. Any unrelated group participant, compromised personal agent, or party with group-history access can collect and correlate relationship activity. Match IDs may also function as object references. The audited document does not establish s ...[truncated 1501 chars]
Remediation
## Remediation Suggestions 1. Send match-specific events only to the two relevant personal agents and explicitly authorized operational services. 2. Replace shared-group event logs with aggregate telemetry, such as counts of evaluated and confirmed matches, without user IDs, pair identities, match IDs, ratings, or decisions. 3. Store detailed logs in an access-controlled audit system separated from the agent communication group. 4. Use short-lived pseudonymous identifiers in operational telemetry and maintain the identity mapping in a restricted service. 5. Apply role-based access control, least privilege, retention limits, and immutable access auditing to detailed matching records. 6. Authenticate every incoming protocol message and verify that its sender is one of the users associated with the referenced match before processing acceptance, rejection, or feedback. 7. Use unguessable match identifiers, enforce object-level authorization, and reject replayed, stale, or duplicate messages. 8. Prevent ratings and individual decisions from appearing in general logs, error messages, metrics labels, or group history.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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 (3)

Missing User Warnings

High
Confidence
97% confidence
Finding
The skill sends user profile tags and pairwise profile summaries to external embedding and LLM services for vectorization and match evaluation, but does not warn users or constrain what data may be transmitted. Because the engine processes intimate profile, goals, challenges, and relationship-matching context for all users, undisclosed third-party transfer materially increases confidentiality, compliance, and secondary-use risks.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill explicitly stores sensitive profile tags, disclosure settings, heartbeat metadata, and match history in local files without any stated retention limits, access controls, encryption, or user-facing notice. In a centralized matching engine that aggregates all users' private relationship and profile data, this creates a real privacy and data exposure risk if the host is compromised, backups leak, or operators access data beyond user expectations.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill instructs sending operational logs to a shared internal group that include user identifiers, online presence, profile update events, acceptance/rejection of matches, feedback activity, and match pairings. Even if intended for observability, these logs disclose highly sensitive relationship and behavioral metadata to all participants with group visibility, violating least-privilege and increasing insider exposure risk.

Static analysis

No suspicious patterns detected.