Saltar al contenido
Aferiz

Seguridad

Aferiz recibe credenciales de git y de gestión, y ejecuta un agente sobre un repositorio ajeno. El modelo de amenazas es explícito — esta página resume lo que está diseñado y lo que todavía falta probar.

Ningún sello, ninguna certificación — todavía. Lo que hay es un diseño verificable, y la lista de lo que tiene que estar en verde antes del primer cliente externo, publicada al final de la página.

Aislamiento por organización

La organización es la frontera del dato. Toda entidad lleva el identificador de la organización, y toda consulta se filtra por él dos veces: en el filtro global de la base y de nuevo en el servicio que la ejecuta. Un usuario de la organización A no lee nada de la B — ni siquiera por el id directo de una fila hija.

La credencial solo entra

Cada credencial se cifra valor por valor (AES-256-GCM), con la clave maestra fuera de la base. Ninguna respuesta de la API devuelve una credencial — ni siquiera a quien la registró. El runner la recibe del control plane en el momento de la ejecución, por un canal autenticado, y la descarta al final; nunca como argumento de línea de comandos, visible en ps.

Un filtro central reescribe los secretos conocidos como *** en logs, eventos, artefactos y respuestas. Y una prueba automatizada planta un secreto canario en cada superficie de salida: si aparece, el build falla.

El sandbox no ve la credencial

Cada ejecución corre en un contenedor efímero: usuario no root, capabilities removidas, red con allowlist — el endpoint del LLM, el host del git, el host de la fuente; todo lo demás negado — con límites de CPU, memoria, tiempo y disco. Los comandos de build del propio repositorio — dotnet test, npm run build — son el vector más probable de código hostil, y corren en ese sandbox sin las credenciales de conexión en el ambiente.

Evidencia leída del commit, no del disco

Todo veredicto exige evidencia en archivo:línea — y el runner la verifica contra el objeto git del commit examinado, nunca contra el disco del sandbox. Un agente que escribiera en el worktree no podría fabricar su propia prueba. Sin evidencia confirmada, el veredicto baja a no concluyente; una salvedad sin ancla en el texto del requisito se descarta antes de llegar a alguien.

La inyección de prompt se trata como el riesgo central

El agente lee contenido que un atacante puede controlar: un README, un comentario de código, la descripción de la propia tarjeta. La defensa no es esperar que el modelo lo ignore — es quitarle el poder: las instrucciones y el contenido de terceros viajan por canales separados; los agentes de atestado y de validación no tienen escritura externa alguna; comando y red pasan por allowlist; y el veredicto solo entra a la base después de la verificación mecánica de la evidencia. Un «marca todo como cumple» inyectado produce un veredicto sin evidencia — que se vuelve no concluyente.

Los patrones clásicos de inyección en el contenido de entrada generan un aviso en la ejecución: el humano ve que hubo un intento.

Roles

Seis roles por organización, del lector al admin:

Lector
Ve proyectos, ejecuciones, atestados, salvedades y specs.
Autor del requisito
Crea y edita requisitos; acepta, responde y cierra salvedades.
Operador
Dispara ejecuciones, da feedback en veredictos, pide ajustes en la spec.
Desarrollador
Todo lo del operador, y acepta la spec.
Aprobador
Aprueba propuestas de escritura externa y reglas de patrón.
Admin
Conexiones, agentes, pipelines, miembros, claves y políticas — todo auditado.

Dos reglas no son configurables, porque son invariantes del producto: quien escribió una versión del requisito no puede aceptar su spec; y aprobar una regla de patrón es siempre un humano identificado — ninguna clave de API, tool o política lo dispensa.

Auditoría

Registro inmutable de logins, conexiones, ejecuciones, aprobaciones, aceptaciones, reglas de patrón y cambios de configuración — con autor, hora, valor anterior y nuevo. Nada se borra; una corrección es un registro nuevo. Retención mínima de doce meses, exportable en JSON. Salvedades, aceptaciones y laudos sobreviven a la retención de la ejecución que los generó: son el registro de lo que se acordó.

Qué falta antes del primer cliente externo

La lista de salida es obligatoria. Mientras un punto esté abierto, está abierto aquí también:

Secreto canario
Prueba en verde en log, evento, artefacto, API y notificación.
Sandbox por defecto
Ejecución en proceso solo con opt-in explícito.
Allowlist de red probada
Una prueba que intenta salir y falla.
Firma de webhook
Validada en todos los webhooks de entrada.
Rate limit
Activo en API y webhook.
Dependencias e imagen base
Revisadas, sin CVE crítico.
Aislamiento entre tenants
Una prueba de que la organización A no lee nada de la B.
Política de retención
Implementada y documentada en la página de privacidad.

Certificación formal (SOC 2, ISO 27001) hoy no existe y no está prometida para una fecha. Cuando entre al camino, aparece aquí.