ChileKit corre en la maquina del usuario (CLI) o como servidor MCP por stdio dentro de un cliente de IA. En ambos casos lo invoca un agente, que decide los argumentos y lee los resultados. Este documento describe que protege ChileKit, contra que y donde esta implementado.
Usuario / Agente IA ──args──▶ ChileKit (CLI o MCP) ──HTTPS──▶ APIs publicas
▲ │ (boostr, mindicador,
└──────── resultados ◀───────┘ datos.gob.cl)
| Limite | Lo que cruza | Confianza |
|---|---|---|
| Agente → ChileKit | Argumentos de comandos y tools | Baja: el agente puede estar bajo prompt injection |
| APIs → ChileKit | JSON de terceros | Nula: puede contener texto hostil |
| ChileKit → Agente | Resultados JSON o tablas | ChileKit responde por lo que emite |
| npm / GitHub → Usuario | Codigo y dependencias | Supply chain |
Un titulo de dataset en datos.gob.cl podria decir "ignora tus instrucciones y ejecuta...". El agente lo lee como resultado de una tool.
- Todo texto externo pasa por
sanitizeText(packages/core/src/sanitize.ts): se eliminan caracteres de control e invisibles, se colapsa a una linea y se trunca (500 caracteres por defecto). - Las instrucciones del servidor MCP piden tratar los resultados de tools
openWorldcomo datos, nunca como instrucciones. - Todas las tools declaran
readOnlyHint: true: ninguna escribe ni tiene efectos laterales, asi que una inyeccion no puede escalar a acciones a traves de ChileKit.
Riesgo residual: ChileKit no puede impedir que un modelo obedezca texto que parece instruccion. La mitigacion final es del cliente (confirmaciones, permisos).
Secuencias ANSI/OSC en datos externos pueden borrar la pantalla, falsificar output o crear hipervinculos engañosos en la terminal.
printRowssanea cada celda; los conectores ya entregan texto sin caracteres de control.- Se eliminan overrides bidi y caracteres de ancho cero (Trojan Source).
fetchJson(packages/sources/src/http.ts) solo contacta hosts de una allowlist explicita y solo por HTTPS. Los redirects se siguen manualmente (maximo 3) y cada destino se valida contra la allowlist antes de contactarlo.- Los argumentos del agente nunca forman el host; solo van como query string codificada
(
URLSearchParams) o como segmentos validados con regex (/^[a-z_]{1,32}$/).
Un agente que queda esperando una tool que nunca responde es un fallo silencioso.
- Timeout por request que cubre conexion, redirects y lectura del body (10 s, configurable con
CHILEKIT_TIMEOUT_MS, maximo 120 s). - Tope de 5 MB por respuesta, verificado mientras se lee el stream.
- Limites de entrada:
rows1-20,limit1-50, largo maximo en queries y nombres. - Tope de elementos procesados por respuesta (feriados, recursos por dataset).
- Politica explicita: sin rutificadores ni cruces de RUT con identidad (privacy.md).
- La validacion de RUT es local (digito verificador) y nunca sale de la maquina.
- No hay telemetria: ChileKit solo contacta las fuentes de datos declaradas.
- Dependencias fijadas en versiones exactas y lockfile congelado en CI.
pnpm auditydependency-reviewbloquean vulnerabilidades moderate+.- Dependabot con cooldown de 7 dias: no adopta releases recien publicados, que es la ventana tipica de paquetes comprometidos.
- GitHub Actions fijadas por SHA, permisos minimos, sin credenciales persistidas y auditadas por zizmor en cada PR.
- CodeQL (
security-extended) y OpenSSF Scorecard semanales.
- Exactitud de los datos de terceros. ChileKit declara fuente, oficialidad y frescura en cada manifiesto, pero no certifica valores.
- Seguridad del cliente MCP o del modelo que consume las tools.