- Location
- config_files/portfolio.json:2
- Finding
- Real Personal Portfolio and Asset Data Is Distributed in Plaintext<![CDATA[
## Vulnerability Details
**File Location**: `config_files/portfolio.json`, lines 2-49; duplicated in `SKILL.md`, lines 163-181
**Vulnerability Type**: Plaintext disclosure of sensitive financial data
**Risk Level**: Medium
### Vulnerable Code
The packaged portfolio configuration explicitly identifies the information as a real portfolio and discloses cash, total assets, securities, quantities, purchase costs, and market values:
```json
{
"name": "Alex的真实持仓",
"update_time": "2026-03-08",
"cash": 2307880.54,
"total_assets": 5310139.54,
"positions": [
{
"code": "002353",
"name": "杰瑞股份",
"quantity": 7400,
"cost": 117.30,
"current_price": 122.50,
"market_value": 906500,
"stop_loss": -8,
"take_profit": 5,
"sector": "油气装备"
},
{
"code": "000975",
"name": "山金国际",
"quantity": 28300,
"cost": 30.99,
"current_price": 30.49,
"market_value": 862867,
"stop_loss": -8,
"take_profit": 5,
"sector": "贵金属/黄金"
},
{
"code": "688027",
"name": "国盾量子",
"quantity": 900,
"cost": 711.23,
"current_price": 699.88,
"market_value": 629892,
"stop_loss": -8,
"take_profit": 5,
"sector": "量子通信"
},
{
"code": "300502",
"name": "新易盛",
"quantity": 1500,
"cost": 393.35,
"current_price": 402.00,
"market_value": 603000,
"stop_loss": -8,
"take_profit": 5,
"sector": "光模块/AI算力"
}
]
}
```
The project documentation also reproduces sensitive values:
```json
{
"positions": [
{
"code": "002353",
"name": "杰瑞股份",
"quantity": 7400,
"cost": 117.30,
"stop_loss": -8,
"take_profit": 5
}
],
"cash": 2307880.54,
"total_assets": 5310139.54
}
```
### Technical Analysis
Sensitive financial information is embedded directly in the distributable project rather than being maintained as private runtime data.
...[truncated 1709 chars]
- Remediation
- <![CDATA[
## Remediation Suggestions
1. Remove the real portfolio data from the current package, published releases, repository history, caches, and retained build artifacts.
2. Replace it with a clearly fictional `portfolio.example.json` containing synthetic names, quantities, prices, and balances.
3. Remove or sanitize the duplicated financial values in `SKILL.md`.
4. Store live portfolio files outside the distributable Skill directory.
5. Add the live configuration path to version-control and packaging exclusion rules.
6. Restrict local file permissions so only the intended user can read the live portfolio.
7. If portfolio data must be stored or synchronized, use an approved encrypted storage mechanism with appropriate access controls.
8. Review prior recipients and repository history to determine whether disclosure notifications or data-removal actions are necessary.
]]>