Saltar al contenido
Lectura12 minPreview

Autenticación y autorización: dos preguntas distintas

En el curso Seguridad web con OWASP Top 10 usted conoció las diez categorías de riesgo de un vistazo. En esta serie se detiene en cada una con calma. Empezamos por la número uno: A01, control de acceso roto, que ocurre cuando una aplicación permite que una persona haga algo o vea algo que las reglas del negocio no le permiten.

Dos preguntas distintas

Toda aplicación que maneja datos de personas debe responder dos preguntas en cada petición:

  • Autenticación: ¿quién es usted? Se responde con una contraseña, un segundo factor, un certificado o una llave de acceso. El resultado es una identidad: "esta petición viene de Ana".
  • Autorización o control de acceso: ¿qué puede hacer esa identidad con este recurso concreto? El resultado es una decisión: permitir o denegar.

La confusión entre ambas es la raíz de casi todos los fallos de esta categoría. Muchas aplicaciones responden muy bien la primera pregunta y se olvidan de la segunda: comprueban que hay una sesión válida y, a partir de ahí, confían en todo lo que el usuario pida.

Piense en el edificio de una empresa en San José. El guarda revisa la cédula de cada visitante y le entrega un gafete: eso es autenticación. Ahora imagine que ese gafete abre todas las puertas, incluidas la oficina de planillas y el cuarto de servidores. El guarda hizo bien su trabajo, pero nadie decidió qué puertas correspondían a cada persona. Eso es un control de acceso roto.

Qué decide la autorización

Una decisión de autorización completa combina tres piezas: el sujeto (quién pide, con su rol y su organización), la acción (leer, crear, modificar, borrar, aprobar, exportar) y el recurso concreto (este pedido, no "los pedidos").

Sujeto:   ana (rol: cliente, tenant: tienda-norte)
Acción:   leer
Recurso:  pedido 1052 (dueño: beto, tenant: tienda-norte)
Decisión: DENEGAR, el pedido no pertenece a ana

Si una pieza falta en la lógica, aparece una grieta. Una regla que solo mira el rol ("los clientes pueden leer pedidos") sin mirar el recurso deja que cualquier cliente lea cualquier pedido.

La decisión se toma siempre en el servidor. Ocultar un botón o validar con JavaScript en el navegador mejora la experiencia, pero no protege nada: cualquier persona puede enviar la petición HTTP directamente.

DELETE /api/pedidos/1052 HTTP/1.1
Host: tienda.ejemplo.cr
Cookie: sesion=4b9e0d7a61c24f3e

Si el servidor lo ejecuta sin preguntar de quién es el pedido, la interfaz cuidada no sirvió de nada.

Breve historia

La idea es antigua. En 1971 Butler Lampson describió la matriz de acceso, una tabla de sujetos por objetos con los permisos en cada celda, y en 1975 Jerome Saltzer y Michael Schroeder publicaron los principios de diseño que todavía se citan: negar por defecto (fail-safe defaults), verificar cada acceso (complete mediation) y dar el mínimo privilegio.

En la web, la fundación OWASP nació en 2001 y publicó su primer Top 10 en 2003. El control de acceso ha estado siempre en la lista, con nombres cambiantes:

EdiciónCómo aparecía
2003 y 2004A2, control de acceso roto
2007, 2010 y 2013Partido en dos: referencias directas inseguras a objetos (IDOR) y falta de restricción de URL o de control por función
2017Reunido otra vez como A5, control de acceso roto
2021Sube al primer lugar, A01
2025Sigue primero e incorpora SSRF

Por qué importa en ciberseguridad y en el trabajo

En los datos que OWASP recopiló para 2021, el 94 % de las aplicaciones analizadas tenía alguna forma de control de acceso roto. Además, las herramientas automáticas la detectan mal: un escáner no sabe que el pedido 1052 es de Beto y no de Ana. Por eso la defensa depende de personas. Quien desarrolla escribe la verificación, quien revisa código la busca, quien prueba escribe los casos negativos y el analista del SOC vigila los registros para detectar abusos. Si nadie lo domina, la falla la descubre un tercero.

Dónde aparece

LugarEjemplo de pregunta de autorización
Tiendas y banca en línea¿Este pedido o esta cuenta es del cliente que lo pide?
APIs de aplicaciones móviles¿Este token puede usar la ruta de administración?
Plataformas con varias empresas¿Este usuario pertenece a la empresa dueña del dato?
Sistemas de salud y gobierno¿Este funcionario puede ver este expediente?
Paneles internos y herramientas de soporte¿Este empleado puede cambiar roles?

Conceptos clave

ConceptoQué significa
RecursoCualquier objeto protegido: una nota, una factura, un archivo, una ruta
RolEtiqueta que agrupa permisos, como user o admin
SesiónEstado que el servidor guarda para recordar quién es usted entre peticiones, normalmente ligado a una cookie
IDORReferencia directa insegura a objetos: el servidor usa un ID del cliente sin verificar el dueño
Escalada de privilegiosObtener permisos que no le corresponden, hacia otro usuario o hacia un rol superior
Denegar por defectoTodo está prohibido salvo lo que se permite de forma explícita
CWECatálogo común de tipos de debilidades de software, mantenido por MITRE

Durante el curso usará herramientas de terminal. Sus sintaxis se escriben así: lo que va entre corchetes es opcional, lo que va en MAYÚSCULAS lo reemplaza usted y ... indica que puede repetirse. Si olvida una opción, pida ayuda a la propia herramienta con --help, por ejemplo curl --help o pytest --help.