T09 · Insecure Skill Coding Practices
- Location
dashboard.html:773- Finding
DOM-Based Cross-Site Scripting Through Unescaped Dashboard API Fields
- Content
View full analysis
${data.model || '-'}`; document.getElementById('channel').innerHTML = `${data.channel || '-'}`; // System status document.getElementById('node').textContent = data.node || '-'; document.getElementById('uptime').textContent = data.uptime || '-'; document.getElementById('os').textContent = data.os || '-'; document.getElementById('runtime').innerHTML = `${data.runtime || '-'}`; document.getElementById('nodeId').innerHTML = `${data.node || '-'}`; // Sessions const sessionCount = data.sessionCount || 0; document.getElementById('sessionCount').textContent = `${sessionCount} active`; document.getElementById('activeSessions').textContent = sessionCount; // Session list const sessionList = document.getElementById('sessionList'); if (data.sessions && data.sessions.length > 0) { sessionList.innerHTML = data.sessions.map(session => ``).join(''); } ``` ### Technical Analysis The dashboard obtains data from the same-origin `/api/dashboard/data` endpoint and passes several response fields directly into `innerHTML`. The affected fields include `model`, `channel`, `runtime`, `n ...[truncated 1932 chars]${escapeHtml(session.label || session.id)} ${session.kind || 'agent'}${session.messageCount || 0} messages${session.activeMinutes || 0}mActive time- Remediation
View remediation
