T09 · Insecure Skill Coding Practices
- Location
app/static/app.js:211- Finding
Stored DOM Cross-Site Scripting Through Unescaped Dashboard Data
- Content
View full analysis
${t("no_data")}`; return; } target.innerHTML = entries .map( ([label, value]) => `${label} ${value}` ) .join(""); } ``` A remotely influenced opportunity is also rendered without escaping: ```javascript function renderOpportunities(payload) { const items = payload?.items || []; byId("opportunityCount").textContent = t("items_count", items.length); const target = byId("opportunityList"); if (!items.length) { target.className = "list-block empty-state"; target.textContent = t("no_opportunities"); return; } target.className = "list-block"; target.innerHTML = items .slice(0, 6) .map( (item) => `${item.source_account || t("unknown")} ${localizeActionType(item.recommended_action)}${item.score} · ${localizeRisk(item.risk_level)} · ${localizeReadiness((item.algorithm_hints || {}).interaction_readiness || "unknown")}
${(item.text || "").slice(0, 140)}
${ item.recommended_action && item.recommended_action !== "observe" ? `${t("draft")} ...[truncated 2262 chars]- Remediation
View remediation
