En seguridad de la información , un delegado confuso es un programa informático que es engañado por otro programa (con menos privilegios o menos derechos) para que haga un mal uso de su autoridad en el sistema. Es un tipo específico de escalada de privilegios . [1] El problema del delegado confuso se cita a menudo como un ejemplo de por qué es importante la seguridad basada en capacidades .
Los sistemas de capacidad protegen contra el problema del diputado confuso, mientras que los sistemas basados en listas de control de acceso no lo hacen. [2]
En el ejemplo original de un diputado confundido, [3] había un programa compilador proporcionado en un servicio comercial de tiempo compartido . Los usuarios podían ejecutar el compilador y, opcionalmente, especificar un nombre de archivo donde escribiría la salida de depuración, y el compilador podría escribir en ese archivo si el usuario tenía permiso para escribir allí.
El compilador también recopilaba estadísticas sobre el uso de las características del lenguaje. Esas estadísticas se almacenaban en un archivo llamado "(SYSX)STAT", en el directorio "SYSX". Para que esto fuera posible, se le dio permiso al programa compilador para escribir en archivos en SYSX.
Pero había otros archivos en SYSX: en particular, la información de facturación del sistema se almacenaba en un archivo "(SYSX)BILL". Un usuario ejecutaba el compilador y nombraba "(SYSX)BILL" como el archivo de salida de depuración deseado. [ cita requerida ]
Esto produjo un problema de adjunto confuso. El compilador realizó una solicitud al sistema operativo para abrir (SYSX)BILL. Aunque el usuario no tenía acceso a ese archivo, el compilador sí lo tenía, por lo que la apertura se realizó correctamente. El compilador escribió la salida de compilación en el archivo (aquí "(SYSX)BILL") de manera normal, sobrescribiéndolo y la información de facturación se destruyó.
En este ejemplo, el programa compilador es el sustituto porque actúa a petición del usuario. El programa se considera "confuso" porque se le engañó para que sobrescribiera el archivo de facturación del sistema.
Cada vez que un programa intenta acceder a un archivo, el sistema operativo necesita saber dos cosas: qué archivo solicita el programa y si el programa tiene permiso para acceder al archivo. En el ejemplo, el archivo se designa por su nombre, “(SYSX)BILL”. El programa recibe el nombre del archivo del usuario, pero no sabe si el usuario tenía permiso para escribir en el archivo. Cuando el programa abre el archivo, el sistema utiliza el permiso del programa, no el del usuario. Cuando el nombre del archivo se pasó del usuario al programa, el permiso no se acompañó de él; el sistema aumentó el permiso de forma silenciosa y automática.
No es esencial para el ataque que el archivo de facturación esté designado por un nombre representado como una cadena. Los puntos esenciales son los siguientes:
Una falsificación de solicitud entre sitios (CSRF) es un ejemplo de un ataque de proxy confuso que utiliza el navegador web para realizar acciones confidenciales contra una aplicación web. Una forma común de este ataque ocurre cuando una aplicación web utiliza una cookie para autenticar todas las solicitudes transmitidas por un navegador. Mediante JavaScript , un atacante puede obligar a un navegador a transmitir solicitudes HTTP autenticadas .
El gusano informático Samy utilizaba secuencias de comandos entre sitios (XSS) para convertir la sesión autenticada de MySpace del navegador en un servidor confuso. Mediante XSS, el gusano obligaba al navegador a publicar una copia ejecutable del gusano como mensaje de MySpace que luego era visto y ejecutado por los amigos del usuario infectado.
El clickjacking es un ataque en el que el usuario actúa como un agente confundido. En este ataque, el usuario cree que está navegando sin peligro en un sitio web (un sitio web controlado por el atacante), pero en realidad se le engaña para que realice acciones confidenciales en otro sitio web. [4]
Un ataque de rebote de FTP puede permitir a un atacante conectarse indirectamente a puertos TCP a los que la máquina del atacante no tiene acceso, utilizando un servidor FTP remoto como servidor confuso.
Otro ejemplo se relaciona con el software de cortafuegos personal , que puede restringir el acceso a Internet a determinadas aplicaciones. Algunas aplicaciones evitan este problema iniciando un navegador con instrucciones para acceder a una URL específica. El navegador tiene autoridad para abrir una conexión de red, aunque la aplicación no la tenga. El software de cortafuegos puede intentar solucionar este problema avisando al usuario en los casos en que un programa inicia otro que accede a la red. Sin embargo, con frecuencia el usuario no tiene suficiente información para determinar si dicho acceso es legítimo: los falsos positivos son comunes y existe un riesgo sustancial de que incluso los usuarios sofisticados se acostumbren a hacer clic en "Aceptar" cuando se les pide que lo hagan. [5]
No todos los programas que hacen un mal uso de la autoridad son delegados confusos. A veces, el mal uso de la autoridad es simplemente el resultado de un error del programa. El problema del delegado confuso ocurre cuando la designación de un objeto se pasa de un programa a otro y el permiso asociado cambia involuntariamente, sin ninguna acción explícita por parte de ninguna de las partes. Es insidioso porque ninguna de las partes hizo nada explícito para cambiar la autoridad.
En algunos sistemas es posible solicitar al sistema operativo que abra un archivo utilizando los permisos de otro cliente. Esta solución tiene algunas desventajas:
La forma más sencilla de resolver el confuso problema de la delegación es agrupar la designación de un objeto y el permiso para acceder a ese objeto. Esto es exactamente lo que es una capacidad . [ cita requerida ]
Si se utiliza la seguridad de capacidad en el ejemplo del compilador, el cliente pasaría al servidor una capacidad para el archivo de salida, como un descriptor de archivo , en lugar del nombre del archivo. Dado que carece de una capacidad para el archivo de facturación, no puede designar ese archivo para la salida. En el ejemplo de falsificación de solicitud entre sitios, una URL suministrada "entre" sitios incluiría su propia autoridad independiente de la del cliente del navegador web.