T09 · Insecure Skill Coding Practices
- Location
work/decision-input.json:4- Finding
Live Financial and Portfolio Data Included in the Distributed Skill
- Content
View full analysis
Vulnerability Details
File Location:
work/decision-input.json:4-388; related generated recommendation inwork/decision-result.json:140-164
Vulnerability Type: Plaintext sensitive financial data exposure
Risk Level: MediumVulnerable Data Snippets
From
work/decision-input.json:json { "context": { "schemaVersion": "quant_strategy_context.v2", "contextId": "qsc_042cbd1010c782e5de65", "asOfDate": "2026-07-23", "mode": "live", "readyForAnalysis": true, "readyForAction": true, "portfolio": { "holdings": [ { "code": "023299", "name": "汇添富中证A500指数增强C", "marketValue": 7365.6, "weightPct": 40.0689 } ], "totalMarketValue": 18382.35 } }, "policy": { "confirmedByUser": true, "goals": [ { "plannedContributionCnyPerMonth": 5000, "purpose": "长期投资,不作他用" } ], "totalInvestableAssetsCny": 120000 }, "cash": { "availableCny": 100257.65, "source": "user_confirmed" } }From
work/decision-result.json:json { "totalInvestableAssetsCny": 118640.0, "amountCny": 5900.0 }Technical Analysis
The distributed
workartifacts contain a plaintext investment snapshot identified as live and user-confirmed. The disclosed fields include a context identifier, fund names and codes, individual market values and portfolio weights, total portfolio value, pending activity, available cash, planned monthly contributions, total investable assets, risk settings, policy timestamps, and an actionable recommendation.Although no raw user ID was observed, the context identifier and detailed financial fingerprint may permit correlation or re-identification when combined with information available to another system or party. The exposure also contradicts the project's own instruction in
SKILL.md:57not to place user profiles in a distributable Skill directory.The issue is a packaging an ...[truncated 1466 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove populated
work/decision-input.jsonandwork/decision-result.jsonfiles from all distributable packages and repository history where feasible. - Exclude generated working artifacts through source-control and packaging rules, such as adding
work/to.gitignoreand the package manifest exclusion list. - Store runtime artifacts outside the Skill directory in a user-scoped state location with restrictive filesystem permissions.
- If fixtures are necessary, replace them with clearly synthetic data that cannot correspond to a real investor. Remove live context identifiers, exact holdings, timestamps, cash values, and actionable recommendations.
- Add an automated release-time secret and privacy scan that rejects artifacts containing indicators such as:
"mode": "live"contextIdholdingsmarketValueavailableCnytotalInvestableAssetsCnyconfirmedByUser- generated
amountCnyrecommendations
- Apply data minimization and retention controls so temporary decision inputs and results are deleted when no longer needed.
- Add a continuous-integration test enforcing the instruction in
SKILL.md:57that user profiles and live financial records must never appear in the distributable Skill directory.
- Remove populated
