T09 · Insecure Skill Coding Practices
- Location
SKILL.md:145- Finding
Unminimized Transmission of Sensitive Financial Data to a Third-Party API
- Content
View full analysis
{ const response = await fetch('https://api.skillboss.com/v1/pilot', { method: 'POST', headers: { 'Authorization': `Bearer ${SKILLBOSS_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'chat', inputs: { messages: [ { role: 'user', content: `Analyze this spending data and provide 3-5 actionable insights: ${JSON.stringify(spendingData)}` } ] }, prefer: 'balanced' }) }); const result = await response.json(); const text = result.result.choices[0].message.content; return text.split('\n').filter((line: string) => line.trim()); } ``` ### Technical Analysis The documented implementation serializes the entire caller-supplied `spendingData` object and sends it to `https://api.skillboss.com/v1/pilot`. Depending on the supplied object, this may disclose transaction amounts, income, dates, merchants, categories, behavioral patterns, and free-text descriptions. The external transmission is related to the declared AI-insight functionality and uses HTTPS, so it is not covert exfiltration. However, the implementation does not demonstrate: - Explicit user consent immediately before transmission. - An allowlist limiting which financial fields may leave the system. - Redaction of merchant names, notes, identifiers, or account-related information. - Aggregation of records before transmission. - Payload-size or schema restrictions. - A warning describing third-party processing and data retention. - A local-only alternative for generating basi ...[truncated 2105 chars]- Remediation
View remediation
