CA-O manipula Registry, Services, Power, Network y Boot (vía optimizaciones tipadas) desde un servicio SYSTEM. El modelo cubre canal IPC, ejecución y persistencia en %ProgramData%\CA-O.
- UI (Interactive, High IL, elevada por manifiesto
requireAdministrator) → Service (SYSTEM, High IL) vía Named PipeCA-O.Privileged.v1. - Service → Windows (Registry API, SCM, powercfg, netsh, bcdedit tipado).
- Service → Filesystem (
%ProgramData%\CA-O\{history.jsonl,snapshots/*,benchmarks}).
| Actor | Capacidad |
|---|---|
| Standard User | Lanza UI, conecta pipe, no puede elevar |
| Administrator (filtrado sin elevación) | Conecta pero token sin elevación → denegado CAO-SEC-003 |
| Administrator elevado | Único autorizado CAO-SEC-001 |
| Malicious Local User / Compromised Process en misma sesión | Intenta replay, payload malformado, flooding, command injection |
| Tampered Client / Tampered Data | Binario modificado, snapshots/history corruptos |
| Broken Service / Corrupted Snapshot | Crash mid-transaction, disk full, ACL dañada |
- Privilegios SYSTEM, Registry
HKLM\*, Services, Boot BCD,history.jsonl(auditoría),snapshots/{txid}/(rollback),benchmarks/, datos de máquina (fingerprint sin PII).
| Threat | Surface | Mitigación | Test |
|---|---|---|---|
| Privilege escalation vía pipe | Named Pipe ACL + impersonation | ACL: SYSTEM Full, Administrators RW, Interactive RW (connect≠authorize); GetCallerIdentity + AdministratorsOnlyAuthorizer verifica SID+grupo+ elevación; IpcRequestValidator versión exacta, RequestId GUID, Nonce 16..128 sin control chars, CreatedAtUtc ≤30s, OptimizationId regex ^[a-z0-9-]{1,80}$; errores CAO-IPC-001..005, CAO-SEC-003..005. |
PrivilegedIpcSecurityTests, WindowsCallerInspectorTests, ReplayCacheTests |
| Replay | Nonce/RequestId reuse | ReplayCache single-use por vida de servicio, MaxAge 30s (IpcProtocol:17). |
ReplayCacheTests |
| Spoofing / Token confusion | Session/IL | WindowsCallerInspector extrae SID real, nombre, IsAdminGroup, IsElevated, SessionId del token impersonado (P1-8). |
WindowsCallerInspectorTests |
| Tampering snapshots/history | Filesystem | Snapshots: snapshot.json SHA-256 en integrity.json, directorios inmutables {txid}/, validación post-escritura SnapshotStateEquals; History: hash chain prevHash→hash por línea JSONL, GenesisHash, detección corrupción/truncamiento. Rutas CaOPaths:5 bajo %ProgramData%\CA-O endurecidas vía harden-data-acls.ps1:14 (icacls /inheritance:r, SYSTEM F, Administrators M, Users RX). |
HistoryAndSnapshotPersistenceTests, HistoryHashChainTests, TransactionJournalRecoveryTests |
| Command injection / PATH hijacking | IPrivilegedCommandExecutor |
ElevatedCommandCatalog allowlist (powercfg/netsh exact tokens), CommandPolicy.Resolve rutas absolutas %SystemRoot%\System32\*, sin shell, sin PATH lookup; bcdedit no pasa por runner genérico; SystemCommandGateway valida timeout/auditoría. |
ElevatedCommandCatalogTests |
| DoS: oversized/malformed/flood | Pipe | Límites MaxRequestBytes 64KB / MaxResponseBytes 256KB (IpcProtocol:11), timeout por conexión 15s (PrivilegedPipeService:27), JsonSerializer con PropertyNamingPolicy camelCase y CAO-IPC-002 malformed; Task aislado por conexión. |
PrivilegedIpcSecurityTests (oversized, malformed, flood) |
| Rollback manipulation | Snapshot colisión | Identidad primaria TransactionId GUID, nunca OptimizationId; TX-A y TX-B para misma optimization generan dirs distintos; RollbackVerified solo si SnapshotComparison.ExactMatch. |
RegistryExactRoundTripTests, OptimizationTransactionTests |
| Downgrade / Protocol confusion | Version | ProtocolVersion 2 exacto, AppVersion.Semantic (2.2.20) en manifest, UI y Service rechazan mismatch CAO-IPC-001; ApplicationVersion/SchemaVersion/CatalogVersion futuros a extender. |
IpcRequestValidator + CAO.Integration.Tests/DocumentationCodeConsistencyTests |
| Audit tampering | history.jsonl |
Hash chain + RequestId/CallerSid/TimestampUtc por entrada; corrupción → warning explícito, no PASS. |
HistoryHashChainTests |
| Cancellation leaving half-state | Apply atomicity | CancellationToken.None durante APPLY/VERIFY, checkpoints solo antes de snapshot; CancellationDeferred reportado. |
CancellationSafetyTests |
- ETW attribution por driver: muestreo %DPC/
%Interruptpor contadores, no por traza kernel — documentado como limitación, no se presenta comoConfirmed root causesinoObserved contributor(Fase 40). - WPR ETW collector: requiere trazas kernel futuras; no se finge precisión.
- Instalador sin certificado: sin
CAO_SIGN_THUMBPRINTartefactos quedan sin Authenticode (warning explícito ensign.ps1). El auto-updater acepta paquetes sin firma verificando el SHA-256 del ZIP contra el sidecar del release (riesgo aceptado y documentado: un atacante con escritura en el release podría sustituir ambos; mitigado por firma de commits y control de acceso al repo). - DLL search order / Binary replacement: mitigado por ruta absoluta y servicio
Demand start, pero sin firma obligatoria en dev; aceptado hasta firma en release.
scripts/verify.ps1gates build+test+contracts;dotnet audit0 vulnerables;CodeQLen CI;Dependabotsemanal (revisión disciplinada, no auto-merge ciego per Fase 64).- Instalador verifica
sc qc/qfailurerecoveryrestart/5000/restart/10000/reboot/60000.
Reporte privado al mantenedor con repro + versión; no incluir history.jsonl con PII (no hay). Ver SECURITY.md:55.