Wide-deployment Windows path without WSL2. The agentic bridge already runs on native Python + PowerShell; the only bash dependency is the H4/H2 gate scripts, which run under Git Bash (Git for Windows) — much lighter than WSL2. - h4_scan now returns a status (ok|blocked|timeout|unavailable). Timeout stays FAIL-CLOSED (block/deny). "unavailable" (no bash / gate missing) DEGRADES the turn to observed_only and does NOT block the developer — never silently certifies without a working gate. - bash interpreter is configurable via CASAN_AGENTIC_BASH; gates use it. - doctor reports bash_available / gates_runnable + a remediation warning, and stays green (degraded, not failed) when bash is absent. - tests: +4 no-bash cases (degrade to observed_only, tool still allowed, non-certified finalize, injection still blocked when bash present). 34/34. - docs: Windows guide + security guide now point to Git Bash, not WSL2, and document the timeout-vs-unavailable distinction. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.1 KiB
CASAN Agentic Client — Mô hình bảo mật & giới hạn bypass (Plan-20)
Tài liệu này nêu rõ CASAN đảm bảo gì và không đảm bảo gì khi developer gõ prompt trực tiếp trong một agentic client (Claude Code, Codex, VS Code). Mục tiêu là không dùng từ “bắt buộc tuyệt đối” sai mức: một số tuyến chỉ là guardrail theo project, có thể bị người có quyền sửa cấu hình bypass.
Liên quan: Plan-20 §3 · Spike-20 §9.
1. Certification strength — bốn mức, không gộp
| Strength | Ý nghĩa | Cam kết | Bypass |
|---|---|---|---|
casan_owned |
Launcher/SDK/Chat Participant do CASAN điều khiển toàn vòng đời | Mạnh nhất trong local client | Rất khó với người dùng thường |
managed_hook |
Hook/policy được tổ chức pin, user không tắt được | Guardrail tổ chức | Cần quyền quản trị môi trường |
project_hook |
Hook commit trong repo, user trust project | Guardrail theo project | Có thể bypass bởi người sửa/tắt config |
observed_only |
Chỉ telemetry, không đủ admission/tool gate | Không certified | N/A |
UI và export H6 không được gộp bốn mức trên thành một nhãn pass. Turn ở
observed_only không bao giờ hiển thị certified.
2. Điều kiện tối thiểu để một turn được certified
- Có
admission_idhợp lệ, còn hạn (TTL), gắn đúng project root canonical và session/turn. - Mọi side-effect tool trong coverage đã công bố đều qua
pre-tool. - Enforcement mode =
enforcevà certification strength ∈ {project_hook,managed_hook,casan_owned}. - Không có tín hiệu bypass coverage (ví dụ tool cross-project, tool ngoài coverage).
finalizechạy đúng một lần và các control kết thúc không đánh flag.
Nếu bất kỳ điều kiện nào thiếu → turn là non-certified. Bridge fail-closed: khi không quyết định được trong internal timeout → block/deny.
Phân biệt timeout vs gate-unavailable (graceful degradation):
- Timeout (gate tồn tại nhưng không trả lời kịp) → fail-closed: block prompt / deny tool. Coi như có thể có rủi ro.
- Gate không chạy được (ví dụ Windows không có
bash/Git Bash) → degrade: turn bị hạ cấpobserved_only, không certify, nhưng không chặn developer. Đây là thực tế triển khai, không phải tấn công. CASAN không bao giờ certify âm thầm khi H4/H2 không chạy, và cũng không biến việc thiếu bash thành lý do chặn mọi prompt. Cài Git Bash để bật lại certification.
3. Những gì CASAN KHÔNG hứa
- Không chặn được mọi prompt trong mọi AI extension bên thứ ba.
- Không coi
project_hooklà security boundary tuyệt đối khi user có quyền sửa/tắt.claude/settings.jsonhoặc.codex/hooks.json. - Không gọi model lần hai từ hook để “chạy lại qua CASAN”.
- Không suy diễn token/cost khi client không cấp nguồn tin cậy — số thiếu là
nullkèm warning, không phải0. - Codex tool hooks là guardrail, không phủ 100% hosted/specialized tools; turn dùng tool ngoài coverage bị hạ cấp, không certified.
4. Threat model đã kiểm thử
Suite tests/phase-agentic-bridge-tests.sh (Spike-20 C1–C12 + threat) kiểm:
| Mối đe dọa | Phòng thủ | Test |
|---|---|---|
| Side-effect không admission | Deny fail-closed | C4 |
| Replay admission hết hạn | TTL check → deny | C5 |
| Dùng lại admission khác project | Project binding → deny + bypass_signal | C5, THREAT bypass |
| Prompt injection | H4 admission scan → block trước model | C2 |
Tamper admission_id (path traversal) |
Chỉ chấp nhận uuid hex, chặn .. |
THREAT tamper |
| Bridge/hook timeout | Internal timeout ngắn hơn outer → block/deny; ghi H6 failure | C6 |
| Outer hook timeout (fail-open của client) | Side-effect vẫn bị pre-tool deny nếu thiếu admission |
C7/C4 |
| Stop loop | finalize idempotent, stop_hook_active guard |
C8/C9 |
| Secret/tool output lọt log | Redact + chỉ lưu hash, không lưu raw prompt/output | C11 |
| Cost hiding (bịa số 0) | Missing → null + telemetry_quality |
C10 |
| Certified giả ở observe mode | Observe luôn observed_only, không certified |
THREAT observe |
5. Contract dữ liệu & privacy
- State ở
.specify/state/agentic-sessions/, ghi atomic + lock per-turn. - Không dùng raw prompt làm key; dùng salted hash +
turn_idopaque. - Admission có TTL, project root canonical, và session binding.
- Không ghi secret/credential hoặc toàn bộ tool output vào audit; evidence chỉ giữ bản redact + hash.
- Mỗi record mang
schema_version,trace_id,project_id,client,client_version,integration_mode,certification_strength,occurred_at.
6. Khi cần enforcement mạnh
Absolute enforcement cần casan_owned hoặc managed_hook:
- managed_hook: pin hook/policy qua managed environment/MDM/requirements; user
không tắt được. Đặt
CASAN_AGENTIC_INTEGRATION_MODE=managed_hookqua môi trường quản trị, không commit trong repo. - casan_owned: dùng launcher/SDK/Chat Participant do CASAN sở hữu toàn bộ vòng
đời (ví dụ
@casanVS Code Chat Participant — tuyến CASAN-owned, không phải global interceptor cho mọi prompt Copilot).
Plan-20 không quảng bá project_hook như một sandbox tuyệt đối.
7. Rollout & rollback
- Feature flags:
CASAN_AGENTIC_BRIDGE_ENABLED,CASAN_AGENTIC_ENFORCEMENT_MODE,CASAN_AGENTIC_CLIENT_ALLOWLIST. - Bắt đầu
observe, sau đóenforcetrong pilot; production default chỉ đổi sau exit gate. - Trace sinh trong observe mode luôn
observed_only, không retroactively certified. - Rollback chỉ tắt adapter;
bin/casan-chatvà core H1→H7 hiện tại vẫn hoạt động.