T09 · Insecure Skill Coding Practices
- Location
projects.json:2- Finding
Live Feishu Application Credential Committed in Plaintext
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its housing-tracker purpose, but it ships a real Feishu credential and an under-documented monitor that can send local OpenClaw run-log details to Feishu.
Review before installing. Do not use this package as-is with the bundled Feishu configuration: the app secret should be revoked, removed from the artifact, and supplied only through protected configuration. The cron-run monitor should be removed or made explicit opt-in with a user-controlled path, recipient, and redacted payloads. Project URL fetching should be restricted to the intended Beijing Housing Commission host, and users should understand that housing data, cache-derived room details, and run notifications are sent to Feishu.
projects.json:2Live Feishu Application Credential Committed in Plaintext
scripts/monitor-tracker-runs.js:9Undocumented Collection and External Transmission of OpenClaw Cron-Run Data
scripts/tracker.js:247Unrestricted Project URL Fetching Permits Server-Side Request Forgery
A severe description-behavior mismatch is a strong trust violation: the skill claims to scrape housing data and update a spreadsheet, but the analysis indicates different behavior centered on local cron-run data and Feishu notifications. Such mismatches can conceal unauthorized data access or exfiltration because users approve one purpose while the skill executes another.
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
Referenced artifact was not completely inspected
使用 `scripts/tracker.js` 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入**飞书表格**。
The skill advertises behavior that requires network access and use of secrets from environment/config, but it does not declare any explicit tool scope or permission boundaries. In an agent setting, missing scope declarations can cause overbroad execution or user surprise about external access and secret usage, especially since the skill performs outbound requests and messaging.
The skill explicitly persists data locally, writes to a remote Feishu spreadsheet, and sends automatic DMs, but it does not clearly warn users that project data will be stored and transmitted off-system. This creates privacy, compliance, and operational risks because users may invoke the skill without understanding retention and disclosure effects.
The script automatically sends the latest run status and detail text to a Feishu user, and that detail is derived from latestRun.error or latestRun.summary without any filtering or minimization. If those fields contain sensitive operational data, stack traces, internal paths, project identifiers, or other unintended content from the run log, the script will exfiltrate that information to an external messaging channel as part of normal operation.
Most of the natural-language documentation and operational instructions are presented only in Chinese, with no indication that users may choose another language or that the locale restriction is intentional and justified. Under the language/locale policy, forcing a specific language without user opt-in is a policy concern.
This file is a JSON file, so vague-trigger checks apply. The content is purely operational state and does not document any activation phrases, scope limits, or exclusion conditions, so if this file is being used as a manifest/config for the skill, trigger specificity is missing.
The project names and URLs indicate this skill is configured specifically for Chinese-language, Beijing-region project data, but the file provides no natural-language indication that this locale constraint is optional or user-selected. Under the policy, forcing a specific language or locale without opt-in can be a natural-language policy concern when the configuration implicitly restricts operation to one locale.