fix(security-audit): close prompt-audit bypass and privacy gaps

Stop WebSocket follow-up turns from reusing a request-wide audit cache, scan
client-controlled instruction fields, fail closed on stale weaker configs, and
tighten preview/SSRF controls including persisted request stage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mt21625457andCursor committed 2026-07-17 08:46:57 +08:00
1 parent d11bdb13f5
commit 0f7f8a317e
18 files changed
+362 -66

No files matched your search

@@ -45,7 +45,8 @@
<dt class="text-gray-500">Config</dt><dd>v{{ event.config_version }}</dd>
<dt class="text-gray-500">Chunks</dt><dd>{{ event.chunk_total }}</dd>
<dt class="text-gray-500">Latency</dt><dd>{{ event.latency_ms }} ms</dd>
<dt class="text-gray-500">Protocol</dt><dd>{{ event.snapshot.protocol }} · {{ event.snapshot.endpoint }} · {{ event.snapshot.stage }}</dd>
<dt class="text-gray-500">{{ t('admin.promptAudit.events.stage') }}</dt><dd>{{ event.snapshot.stage || 'http' }}</dd>
<dt class="text-gray-500">Protocol</dt><dd>{{ event.snapshot.protocol }} · {{ event.snapshot.endpoint }}</dd>
</dl>
</div>
</BaseDialog>
@@ -79,7 +79,7 @@
<td class="px-3 py-3 text-gray-700 dark:text-dark-200">{{ event.snapshot.group_name || '—' }}</td>
<td class="px-3 py-3">
<p class="font-medium text-gray-900 dark:text-white">{{ event.snapshot.endpoint }}</p>
<p class="mt-1 text-xs text-gray-500">{{ event.snapshot.model }} · {{ event.snapshot.protocol }}</p>
<p class="mt-1 text-xs text-gray-500">{{ event.snapshot.model }} · {{ event.snapshot.protocol }} · {{ event.snapshot.stage || 'http' }}</p>
</td>
<td class="px-3 py-3">
<span class="rounded-full px-2 py-0.5 text-xs font-medium" :class="decisionClass(event.decision)">{{ event.decision }} · {{ event.risk_level }}</span>