Saltar al contenido

Los tres bordes

Dónde termina tu control: el borde del IPC, el borde de los permisos y el borde del sistema operativo. Qué se decide en cada uno, quién lo vigila y cuál es el fallo característico de cada frontera.

Los tres, en orden de dentro a fuera

Por qué los dos primeros no se sustituyen

Es el punto conceptual del nivel y merece detenerse. Tipos y permisos parecen la misma clase de control —los dos «validan» lo que cruza— y son ortogonales.

Un contrato de tipos responde a: ¿tiene este mensaje la forma correcta? Si el comando espera un identificador y una bandera, un mensaje con una cadena y un número no encaja, y se rechaza. Eso previene errores, no ataques: un atacante que controla tu JavaScript puede construir mensajes perfectamente bien formados todo el día.

Un contrato de permisos responde a: ¿tiene derecho este llamante a pedir esto? No mira la forma, mira la autorización. Un comando bien tipado y sin permiso no se ejecuta; un comando permitido con argumentos mal formados no se ejecuta tampoco. Hacen falta los dos, y ninguno de los dos hace el trabajo del otro.

TXT
                        tipo correcto      tipo incorrecto  permitido             se ejecuta         error de deserialización  no permitido          error de permiso   error de permiso

La celda de arriba a la izquierda es la única que hace algo, y hacen falta las dos condiciones para llegar a ella. Esa es la razón de que la fase III y la fase V sean fases distintas y no una sola.

Dónde falla cada uno, con ejemplos

Borde 1. Cambias un campo de un struct en Rust y olvidas actualizar el tipo de TypeScript. Compila todo, arranca todo, y falla al llamar al comando. Con bindings generados —nivel 19— ese fallo se convierte en un error de compilación del frontend, que es donde debe estar.

Borde 2. Concedes el permiso de escritura de ficheros al directorio de datos de la aplicación, y el ámbito acepta una ruta relativa que el frontend construye. Alguien mete un .. en el nombre y sale del directorio. El nivel 30 trata exactamente esta familia.

Borde 3. Tu aplicación lee un fichero del usuario sin problemas en desarrollo. Firmas, activas el runtime endurecido, y en la máquina de otro aparece un diálogo que nadie esperaba, o directamente un error de permisos, porque el entitlement correspondiente no estaba declarado. Nivel 60.

Qué borde se trabaja en cada fase

borde vigilante fases
1 · tipos el contrato de serialización y los bindings III, y se apoya en IV
2 · permisos las capabilities y los ámbitos V, con aplicaciones en VII, VIII y IX
3 · el sistema el sistema operativo VI (llaveros), IX (permisos de notificación y demás), XII (firma y sandbox)

Si te fijas, las fases VII, VIII y IX aparecen como aplicaciones del borde 2 y no como temas propios de seguridad. Eso es deliberado: leer un fichero, lanzar un proceso o mostrar una notificación son, cada uno, un ejercicio del mismo modelo de permisos sobre un dominio distinto. Aprendido el modelo en la fase V, las tres siguientes son variaciones.