Seguridad

El permiso antes que el poder.

Un agente que puede leer tus archivos, ejecutar comandos en tu máquina, escribir en tus bases de datos y publicar en internet solo es seguro si tú decides qué toca. Cada herramienta pertenece a una categoría de permiso; es la categoría — no la herramienta — la que decide qué se te pregunta. Tres actos no pueden aprobarse de antemano en ningún modo.

8 categoríasPermiso, no confianza
3 actosSe preguntan siempre, incluso en acceso total
1 clave de firmaMantenida fuera de la API pública
Lo que acota al agente

Cuatro cosas separan
una instrucción de tus datos.

Ninguna de ellas es el buen criterio del modelo. Un modelo que acierta noventa y nueve veces de cada cien no es un sistema de permisos.

Cuatro modos

Preguntar, Auto, Plan, Total. El modo Plan es de solo lectura y rechaza de plano: te entrega el plan y te dice que cambies de modo si quieres ejecutarlo. Un modo es un techo, no una sugerencia.

Ocho categorías

Leer, escribir, ejecutar un comando, cambiar una base de datos o un bucket, escribir un registro DNS, enviar un mensaje, publicar en internet, gastar créditos. Leer nunca pregunta. Un cambio de base de datos o de DNS se pregunta incluso en modo Auto.

Tres que no pueden preaprobarse

Enviar un mensaje a alguien, publicar en internet y gastar créditos en algo que no sea una llamada a un modelo. Se preguntan cada vez, incluso en acceso total — « permitir siempre » no existe para ninguno de los tres, porque ninguno se puede deshacer.

Un techo por respuesta

Cada ejecución lleva un presupuesto en créditos. Se detiene al alcanzarlo, en vez de dejarte descubrir el coste después — y una herramienta que gasta pregunta antes, permita lo que permita el presupuesto.

Cómo está construido

Nueve mecanismos,
y la razón de cada uno.

Escritos a partir del código que los implementa. Cuando una medida tiene un límite, el límite está más abajo en esta página en lugar de omitirse.

Las sesiones
Tu clave de API se canjea por una sesión corta firmada con una clave de curva elíptica. La API pública solo guarda la mitad pública: puede verificar una sesión, no crearla. Comprometida, no podría fabricarse una identidad.
Tus credenciales
Una cadena de conexión o una clave de acceso que nos confías se cifra en reposo con AES-256-GCM y nunca sale del servidor. Al agente se le muestran colecciones, tablas y prefijos — nunca tus claves. La clave de cifrado se rota con un script que recifra, no editando un archivo de configuración.
Las peticiones salientes
Toda URL que el servidor recupera se resuelve antes de la petición y se rechaza si apunta a una dirección privada, local, de enlace local o reservada — ante todo el punto de metadatos de la nube, que entrega tokens de identidad. Los esquemas que no son HTTP se rechazan, los puertos de infraestructura se bloquean, y las redirecciones se siguen a mano y se vuelven a comprobar, porque de otro modo una redirección rodearía el control. Esto importa sobre todo en la única herramienta que sigue URLs halladas en el texto de una instrucción.
Los errores
Un fallo inesperado responde con un mensaje genérico y una referencia; el detalle completo va a nuestro registro bajo esa misma referencia. Los mensajes que sí te llegan — una conversión fallida, una página que no cargó — se limpian de URIs de bases de datos, credenciales, claves reconocibles, direcciones internas, identificadores de proyecto en la nube y rutas del servidor.
Las subidas
Un nombre de archivo venido de una petición nunca se convierte en una ruta. Se reduce a su último segmento, se eliminan los caracteres reservados, y la ruta resuelta debe seguir dentro del directorio de subida o la escritura se rechaza. Cinturón y tirantes, porque la primera versión de ese control no bastaba.
Los límites de tasa
Se cuentan sobre la dirección del propio visitante, y una cabecera de reenvío solo se cree si viene de un relé local — configurar el servidor para creer a cualquier cliente se rechaza al arrancar. Antes de esa corrección todos los visitantes contaban como una sola dirección, así que veinte contraseñas erróneas de cualquiera bloqueaban el acceso para todos.
Los despliegues
Los archivos de entorno, los directorios Git y las dependencias nunca se publican, y lo que se descartó se te devuelve con un motivo. Una ruta no puede salir de la raíz. El código de servidor de una aplicación se saca de los archivos públicos en lugar de servirse como uno más — dejado dentro, habría publicado el código fuente de la aplicación en su propio sitio.
Tu correo
La clave privada DKIM de tu dominio está cifrada, nunca sale del servidor, y se conserva en lugar de regenerarse — una clave nueva invalida las firmas del correo que ya enviaste. Los mensajes se firman con tu dominio, no con el nuestro. Y el HTML de un remitente nunca se renderiza en el lector: se reduce a texto, porque si no cualquiera que te escriba podría ejecutar script en tu sesión.
Los secretos
Ningún secreto tiene un valor de reserva escrito en el código — uno que falte detiene el arranque en vez de usar en silencio un valor por defecto idéntico en todas partes. La API pública se niega a arrancar si tiene una clave que no le corresponde tener: así es como la clave de firma se queda donde debe.
Lo que no afirmamos

Cuatro cosas que esta página
no te está diciendo.

Una página de seguridad que solo enumera fortalezas es un folleto. Estos son los límites que conocemos.

No tenemos ninguna certificación
Ni SOC 2, ni ISO 27001, ni informe de test de intrusión de un tercero. Somos una empresa pequeña y no vamos a dar a entender lo contrario con un sello. Lo que sí podemos ofrecer es el mecanismo — por eso esta página describe cómo funcionan las cosas en vez de quién las auditó.
La guarda de URL resuelve, no fija
Una dirección se comprueba antes de la petición, no se retiene durante toda ella, así que un nombre que responda distinto un instante después no queda cerrado. Cerrar esa puerta significa fijar la dirección verificada en el momento de conectar, algo que ni el cliente HTTP ni el motor de navegador que usamos exponen de forma sencilla. Preferimos nombrarlo aquí a dejar que la guarda parezca absoluta.
Una terminal no es un sandbox
En tu propio ordenador el agente se ejecuta con tus permisos, y la solicitud de autorización es la protección — no una cárcel. Precisamente por eso el modo Plan es de solo lectura, por eso un comando aprobado lo es como ese comando y nada más amplio, y por eso la versión en la nube de todo esto está apagada y no encendida.
Aceptado no es entregado
Nuestro relé suelta el mensaje en cuanto está en cola; lo que el proveedor del destinatario haga después nunca se nos informa. Te decimos desde qué dirección salió realmente un mensaje, y nos negamos a enviar desde una que tú no elegiste — pero nadie puede prometerte una bandeja de entrada.
Reportar

¿Has encontrado algo?
Cuéntanoslo.

Escribe a contact@iagenify.com con « Security » al principio del asunto. Incluye qué hiciste, qué viste, y la referencia si la plataforma te dio una. Si una prueba de concepto tocó datos, di de quién — incluso si eran tuyos.

Lo leemos

Una persona, no una cola. Si es real sabrás qué estamos haciendo al respecto.

No tenemos recompensas

No hay pago y no vamos a fingir lo contrario. Decirlo por adelantado es más justo que dejar que lo descubras después del trabajo.

No vayas más lejos de lo necesario

Nada de denegación de servicio, ni datos de terceros, ni cuentas que no sean tuyas. Lo justo para demostrarlo, y parar.

Preguntas

La seguridad, en detalle.

¿Qué puede hacer el agente sin preguntarme?

Leer, delegar en un subagente y escribir sus propias notas. Todo lo demás depende de la categoría y del modo: escribir un archivo es libre en Auto, un cambio de base de datos o de DNS se pregunta incluso ahí, y enviar, publicar o gastar se pregunta siempre, diga lo que diga el modo.

¿Dónde viven los resultados de las herramientas del agente?

En el dispositivo donde se ejecutó el agente. Nuestra base de datos guarda el paso — qué herramienta, un objetivo corto, si funcionó, cuánto costó, cuánto tardó — y nunca el contenido de un resultado. Ese reparto es deliberado: el registro de lo ocurrido te es útil, y el contenido de tus archivos no es nuestro para guardarlo.

¿Puede el agente alcanzar vuestros servicios internos?

No. La comprobación de direcciones está activa por defecto incluso en desarrollo, y el único sitio donde un flujo podría haberse apuntado a una dirección privada tiene esa salida apagada por defecto — la API es pública, y una comodidad de desarrollo ahí habría dejado que cualquier cuenta leyera una respuesta de nuestra propia red.

¿Qué pasa si se filtra mi clave de API?

Reemplázala. Las claves se guardan como hash, no como clave, así que no podemos volver a mostrártela — solo emitir una nueva y retirar la antigua. Una sesión derivada de una clave dura poco y está ligada a una familia de sesiones que podemos cerrar.

¿Tenéis un programa de recompensas?

No. Escríbenos igualmente, con « Security » al principio del asunto. Preferimos con mucho enterarnos por ti.

¿Está auditado todo esto?

Por un tercero no. Las comprobaciones son nuestras: suites unitarias sin red, un script que relee cada límite de un contenedor desde dentro del contenedor, otro que crea una cuenta desechable y despliega un sitio real antes de borrar todo lo que creó, y uno más que recorre el inicio de sesión de principio a fin. Preferimos decirte de quién son esas comprobaciones a dejar que la palabra « verificado » haga el trabajo.