T09 · Insecure Skill Coding Practices
- Location
bankcard.py:29- Finding
API Credential and Bank Card Number Exposed in URL Query Parameters
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it claims, but it sends full bank card numbers and an API key to a third-party service in URL query parameters without a clear privacy warning.
Review before installing if you will process real card numbers. Use a dedicated low-privilege JisuAPI key, avoid submitting card numbers unless the user explicitly agrees, and be aware that the remote provider or network infrastructure may retain URL query logs containing the key and card number.
bankcard.py:29API Credential and Bank Card Number Exposed in URL Query Parameters
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
The skill declares environment and implied network use in metadata, but does not define an explicit tool scope such as allowed tools or permissions. That weakens the trust boundary for the agent/runtime and can lead to over-broad execution or unclear authorization around external requests and secret access. In this skill, that matters because it reads an API key from environment variables and sends user-supplied bank card numbers to a third-party service.
The skill handles highly sensitive financial data but does not warn that submitted card numbers are transmitted to JisuAPI, a third-party service. This creates a privacy and compliance risk because users or calling agents may disclose full bank card numbers without informed consent, and the data leaves the local trust boundary.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests
BANKCARD_QUERY_URL = "https://api.jisuapi.com/bankcard/query"
def query_bankcard(appkey: str, req: dict):
The skill sends a full bank card number to a third-party API service, which is sensitive financial data and may be subject to privacy, compliance, or data-handling risks. The code provides no user-facing disclosure, consent mechanism, masking, minimization, or documentation of how card data is shared, retained, or protected by the external provider.
The activation description and the rest of the skill documentation are written entirely in Chinese and frame invocation around Chinese user utterances, but the file does not state that the skill is intentionally limited to Chinese-language use or offer an alternative language option. This can be a natural-language locale policy issue when a skill implicitly forces one language without user opt-in.
The natural-language descriptions and usage text are written in Chinese, which can impose a locale preference on users without opt-in. The file does not indicate that the skill is region-specific or provide any language selection mechanism.
No suspicious patterns detected.