T09 · Insecure Skill Coding Practices
- Location
scripts/walmart_search.py:34- Finding
Environment-controlled Walmart gateway can receive the API key
- Content
View full analysis
str: """网关基础地址:env LINKFOX_TOOL_GATEWAY 优先,缺省回退正式地址。""" return (os.environ.get("LINKFOX_TOOL_GATEWAY") or "https://tool-gateway.linkfox.com").rstrip("/") def get_api_url(): sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "_shared")) return get_api_base() + API_PATH def get_api_key(): """ 获取配置在环境变量的API Key。 如果获取不到,按 SKILL.md 的 **## 解决认证和积分问题** 处理。 """ key = os.environ.get("LINKFOX_AGENT_API_KEY") or os.environ.get("LINKFOXAGENT_API_KEY") if not key: print( "API Key 未配置", file=sys.stderr, ) sys.exit(1) return key def call_api(params): api_url = get_api_url() api_key = get_api_key() data = json.dumps(params).encode("utf-8") headers = { "Authorization": api_key, "Content-Type": "application/json", "User-Agent": "LinkFox-Skill/2.0", "SESSION_ID": os.environ.get("SESSION_ID", ""), "MODE_ID": os.environ.get("MODE_ID", ""), "APP_NAME": os.environ.get("APP_NAME", ""), } req = Request( api_url, data=data, headers=headers, method="POST", ) try: with urlopen(req, timeout=150) as response: return json.loads(response.read().decode("utf-8")) ``` ### Technical Analysis The script permits `LINKFOX_TOOL_GATEWAY` to replace the trusted LinkFox gateway without validating the URL scheme or hostname. It then unconditionally attaches `LINKFOX_AGENT_API_KEY` or `LINKFOXAGENT_API_KEY` to the `Authorization` header. Sending an API credential to the legitimate LinkFox gateway is necessary for the declared Walmart search function. Allowing an arbitrary environment-selected des ...[truncated 1098 chars]- Remediation
View remediation
