T09 · Insecure Skill Coding Practices
- Location
scripts/pinkr_openapi_skill.py:16- Finding
API Credential and Sensitive CRM Data Transmitted over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to be a legitimate Pinkr CRM API helper, but it handles sensitive customer and business data with insecure transport, broad write authority, and unprotected local saving of results.
Install only if you trust the Pinkr integration and can enforce a validated HTTPS PK_API_URL, tightly scoped PK_APPKEY permissions, and explicit review before write operations. Avoid using this in shared workspaces unless local output saving is disabled, protected, or regularly cleaned, because customer and business records may be written to disk.
scripts/pinkr_openapi_skill.py:16API Credential and Sensitive CRM Data Transmitted over Plaintext HTTP
scripts/pinkr_openapi_skill.py:16Unrestricted API Endpoint Can Redirect Credentials and CRM Data
scripts/pinkr_openapi_skill.py:39Complete CRM API Responses Persisted Locally without Protection
scripts/requirements.txt:1Unpinned Third-Party Dependency Produces Non-Reproducible Installations
The request target is taken from PK_API_URL and sent directly to requests.post without validation, while the default endpoint is also plain HTTP. If an attacker or misconfiguration controls the environment variable, the skill can exfiltrate app credentials and sensitive CRM/order/member payloads to an arbitrary server, and HTTP transport further enables interception or redirection.
}
try:
response = requests.post(url, data=form_data, timeout=30)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
The default API URL uses plain HTTP (http://dev.openapi.pinkr.com) while the skill is designed to transmit authenticated requests and sensitive CRM/customer data. Using an unencrypted transport exposes app credentials, personal data, order data, and business operations to interception or tampering by any attacker on the network path, especially in development or shared environments.
The default API base URL is http://dev.openapi.pinkr.com, so member, order, inventory, and credential-bearing requests are transmitted over unencrypted HTTP unless the operator overrides it. This exposes sensitive CRM/SCRM data and the app identifier to interception or tampering by anyone on the network path, which is especially dangerous given the skill handles customer and business records.
The skill documents use of environment variables, shell commands (curl, jq), and network access, but does not declare an explicit tool or permission scope. That creates an over-broad execution model where an agent may use capabilities not clearly constrained or user-visible, increasing the risk of unintended network transmission, file writes, or secret handling beyond the user's expectations.
This skill processes highly sensitive CRM/SCRM data including member profiles, phone numbers, addresses, order history, card numbers, deposits, and coupon activity, yet it does not clearly warn users that this data will be transmitted to a third-party API. Without explicit disclosure and consent cues, users may unknowingly send regulated personal or commercially sensitive data off-platform.
The skill exposes business-affecting write operations such as updating shipment status, refund status, inventory, member data, deposits, coupon redemption, and sales synchronization, but does not include explicit cautions about irreversibility, downstream effects, or the need for user confirmation. An agent could perform state-changing actions that are difficult to undo and materially affect customers, accounting, inventory, or fulfillment.
The skill saves full API responses and formatted output to local files under output/, and those responses can include member names, phone numbers, card numbers, balances, orders, addresses, and other business data. Persisting this data without minimization, consent, access controls, or retention handling increases the risk of local disclosure through shared hosts, backups, logs, or accidental file exposure.
The module description, help text, prompts, and user-facing output strings are all written in Chinese, which imposes a single language experience with no opt-in or locale selection. Under the policy, forcing a specific language without user choice is a natural-language policy violation unless clearly justified and documented.
The dependency is specified as just requests with no version pin or bounded range, which makes builds non-reproducible and can silently pull in different releases over time. In a security-sensitive integration skill that exchanges CRM/SCRM data with third-party systems, this increases supply-chain risk and makes it impossible to determine whether a vulnerable version is being installed.
requests
Because requests is unpinned, the manifest provides no assurance that installation will avoid versions affected by known advisories. For a skill that likely performs authenticated API calls and handles customer, order, membership, or token-bearing traffic, dependency ambiguity is more dangerous because a vulnerable requests release could expose credentials, mishandle TLS/redirect behavior, or leak sensitive data.
No suspicious patterns detected.