Back to skill

Security audit

Identifies alumni connections from LinkedIn datasets using school-ID and personnel-IDinputs. It maps out alumni-related ties linked to individuals and educationalinstitutions. Recruiters, sales teams and B2B lead-generation specialists explore alumninetworks, track educational-background connections and build expanded contact databases.This tool works well for talent sourcing, institutional-network research and B2Blead-generation workflows.

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent paid UpKuaJing LinkedIn alumni lookup skill, with disclosed account and billing flows, but users should pay attention to API-key storage, fees, personal-data use, and update-check behavior.

Install only if you are comfortable using UpKuaJing as the data provider, paying for API calls after confirmation, and storing the provider API key in a plaintext file under your home directory. Review privacy and compliance obligations before querying LinkedIn-derived personal data, and avoid including raw personal data or secrets in error reports.

Vulnerability Patterns
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (23)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill invokes capabilities beyond its declared purpose and without an explicit permissions model: it reads environment data, accesses and writes files under the user's home directory, makes network calls, and can trigger account-management actions. This creates hidden trust boundaries and makes it easier for a user or orchestrator to run sensitive operations without understanding the scope of access.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill is presented as a LinkedIn alumni lookup tool, but it also supports API-key provisioning, local credential storage, account/balance inspection, payment-order creation, pricing retrieval, remote error reporting, and version-metadata caching. That mismatch is dangerous because users may authorize a simple data query while the skill is also capable of credential lifecycle and monetization flows that expand risk and data exposure.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The file implements cross-border platform authentication, API key issuance, account balance retrieval, and billing operations that do not align with the declared LinkedIn alumni discovery purpose. This mismatch is dangerous because users may authorize or run the skill expecting harmless alumni research while it instead interacts with an unrelated external service and manages credentials and payments.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The script can create recharge/payment orders through an external API even though the skill is described as LinkedIn alumni discovery. Hidden payment functionality increases the risk of unauthorized charges, deceptive behavior, or abuse of the host environment under false pretenses.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Exposing external account information, balances, and pricing data is unrelated to alumni discovery and expands the skill's privilege and data surface. In context, this enables enumeration of third-party account state and commercial information that users would not reasonably expect the skill to access.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The module docstring explicitly describes cross-border platform auth management, which directly contradicts the declared alumni-discovery intent. Such contradiction is a strong trust and transparency failure and may indicate concealed functionality or repackaged code with materially different behavior than advertised.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The code is wired to a third-party '跨境魔方' API and associated local credential store, which materially diverges from the manifest's stated LinkedIn alumni discovery purpose. This mismatch is dangerous because users may authorize or run the skill expecting one data flow, while it actually sends data to an unrelated external service with different trust and privacy implications.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The module retrieves an API key from process environment variables and a home-directory .env file for a service not justified by the skill description. While reading credentials is common utility behavior, in this context it expands trust boundaries and can cause users to unknowingly expose secrets to an unrelated service.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The module contains generalized persistence for request/response payloads and task results, extending behavior beyond simple alumni discovery into local data retention. This is risky because API payloads and results may contain personal or account-linked information that remains on disk longer than users expect.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
This file implements platform error telemetry that is unrelated to the declared LinkedIn alumni discovery purpose, which is a strong indicator of scope mismatch and hidden data handling. Because the function forwards request metadata and context to an external endpoint, users may unknowingly expose operational or sensitive information through a skill that does not need this capability for its stated function.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The code sends telemetry to '/agent/skill/error/report' and auto-populates skill identifiers even though this behavior is not justified by the alumni research use case. That creates unnecessary data egress and expands the trust boundary without clear need, increasing the chance that request details, identifiers, or internal context are leaked to the platform.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
This module performs outbound network communication to a server-defined endpoint and persists local state in a hidden home-directory cache, even though the advertised skill purpose is LinkedIn alumni discovery rather than update or telemetry functionality. That mismatch increases risk because the capability can disclose skill usage metadata, create unexpected network egress, and establish a mechanism that could later be repurposed for broader tracking or control without clear user consent.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The code implements self-update or version telemetry behavior by posting the skill name to a remote API and reacting to the response, but this capability is not justified by the stated business function of the skill. While not directly executing updates, it creates an undisclosed telemetry channel and a trust dependency on a remote service, which is dangerous in agent skills because it expands attack surface and can normalize hidden control-plane behavior.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The skill processes LinkedIn-derived alumni and person identifiers for talent sourcing and B2B enrichment without any visible privacy, lawful-use, or data-handling warning. In this context, the data is personally oriented and potentially sensitive, so omission of privacy guidance increases the chance of misuse, over-collection, or non-compliant processing.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The documentation instructs agents to send request parameters, response data, and error context to an error-reporting endpoint, while only stating that sensitive fields are 'automatically desensitized' and imposing size limits. It does not require explicit minimization, user notice, consent, or clear restrictions on including personal or third-party data, which creates a realistic risk of oversharing sensitive information into telemetry. In the context of a LinkedIn alumni/talent-sourcing skill, the transmitted payloads may contain personal, educational, or business contact data, making this more sensitive than generic debugging logs.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
Request/response logging can write transmitted payloads and responses to local log files without any user-facing disclosure in this file. If enabled, those logs may capture personal data, identifiers, or operational metadata and create an unintended secondary data store accessible to other local users or later processes.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The exception-reporting path transmits a caller-supplied 'context' field to a remote platform endpoint with no visible warning, consent, or redaction in this file. Error context often contains prompts, personal data, request contents, tokens, or internal paths, so forwarding it verbatim can cause confidentiality and privacy exposure.

Credential Access

High
Category
Privilege Escalation
Content
### **API Key Not Set**
First check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;
If UPKUAJING_API_KEY is not set, prompt the user to choose:
1. User has one: User provides it (manually add to ~/.upkuajing/.env file)
2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env
Wait for user selection;
Confidence
94% confidence
Finding
The skill instructs the agent to inspect `~/.upkuajing/.env` for `UPKUAJING_API_KEY` and to write newly obtained credentials there. Accessing and persisting secrets in a general-purpose local file creates credential-exposure risk through accidental disclosure, overbroad file access, or reuse by unrelated tools and workflows.

Credential Access

High
Category
Privilege Escalation
Content
First check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;
If UPKUAJING_API_KEY is not set, prompt the user to choose:
1. User has one: User provides it (manually add to ~/.upkuajing/.env file)
2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env
Wait for user selection;

### **Account Top-up**
Confidence
93% confidence
Finding
The follow-on flow expands credential handling by offering automated key application and saving the new API key into `~/.upkuajing/.env`. Combining secret provisioning with local persistence inside a skill materially increases the blast radius if the host is shared, the file is readable by other processes, or the skill is triggered unexpectedly.

Credential Access

High
Category
Privilege Escalation
Content
"envFilePath": str(env_file)
        }

    # 保存到 .env 文件
    try:
        with open(env_file, 'w', encoding='utf-8') as f:
            f.write(f"{API_KEY_ENV}={api_key}\n")
Confidence
88% confidence
Finding
The script writes a newly issued API key into a plaintext .env file under the user's home directory. Plaintext secret storage is dangerous because other local users, backup systems, logs, or accidental file sharing can expose the credential and enable unauthorized API use.

Unpinned Dependencies

Low
Category
Supply Chain
Content
httpx>=0.23.0
Confidence
95% confidence
Finding
The dependency specification uses a lower-bound only constraint (httpx>=0.23.0), which allows installation of any newer release, including major versions with breaking changes or future vulnerable versions. This weakens supply-chain reproducibility and can unexpectedly introduce insecure or incompatible code during deployment.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
pass  # 如果读取失败,继续执行

    # 不需要认证申请新密钥
    response = make_request('/agent/auth/create', {}, require_auth=False)

    # 检查是否申请成功
    if response.get('code') != 0:
Confidence
91% confidence
Finding
The explicit require_auth=False setting makes unauthenticated access the default for the key-creation request. Unsafe defaults like this broaden abuse opportunities and weaken assurance that credential issuance is tied to an expected, authorized workflow.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
pass  # 如果读取失败,继续执行

    # 不需要认证申请新密钥
    response = make_request('/agent/auth/create', {}, require_auth=False)

    # 检查是否申请成功
    if response.get('code') != 0:
Confidence
91% confidence
Finding
The explicit require_auth=False setting makes unauthenticated access the default for the key-creation request. Unsafe defaults like this broaden abuse opportunities and weaken assurance that credential issuance is tied to an expected, authorized workflow.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/common.py:196

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:61