Cómo encontrar y corregir referencias directas a objetos inseguras en Python
Keshav Malik
19 de julio de 2023
0 minutos de lecturaUna referencia directa a objetos insegura (IDOR) es una vulnerabilidad de seguridad que ocurre cuando la implementación de un sistema permite que los atacantes accedan directamente a objetos o recursos confidenciales y los manipulen sin verificar la autorización. Por ejemplo, puede haber una vulnerabilidad IDOR cuando una aplicación da acceso directo a objetos según datos proporcionados por el usuario, lo que permite que un atacante omita la autorización.
Comprender las vulnerabilidades IDOR
Debemos abordar las vulnerabilidades IDOR para mantener la confidencialidad, integridad y disponibilidad de los datos confidenciales que manejan tus aplicaciones de Python. Los desarrolladores deben comprender las vulnerabilidades IDOR para evitar el acceso no autorizado, mantener la confianza de los usuarios y evitar posibles consecuencias financieras y legales graves.
Tipos de vulnerabilidades IDOR
Las vulnerabilidades IDOR adoptan distintas formas según la implementación y las funciones de la aplicación.
IDOR con referencias a objetos
Esta forma de vulnerabilidad IDOR ocurre cuando un atacante puede acceder a un objeto no autorizado o modificarlo. Un ejemplo común es cuando una aplicación web permite acceder a datos confidenciales, como cuentas bancarias, mediante una solicitud sencilla, por ejemplo, example.com/accounts?id={account_id}. Si la aplicación no verifica eficazmente los permisos del solicitante, los usuarios no autorizados pueden ver o manipular la información de la cuenta.
IDOR con referencias a archivos
Este tipo de vulnerabilidad IDOR implica la recuperación no autorizada de archivos. Por ejemplo, si una aplicación de chat almacena registros confidenciales de conversaciones en archivos numerados de forma consecutiva, un atacante podría acceder a conversaciones privadas mediante solicitudes con números similares: example.com/1.log, example.com/2.log, y así sucesivamente.
IDOR ciega
Una vulnerabilidad IDOR ciega se refiere a los casos en los que la explotación no es directamente visible en la respuesta del servidor, aunque se haya producido una modificación no autorizada. Con una IDOR ciega, un atacante puede cambiar los datos privados de otro usuario sin verlos. Por ejemplo, si una aplicación web permite que un usuario modifique la configuración de su perfil mediante una llamada a la API, como example.com/users/update?id={user_id}, un atacante podría manipular el user_id de la solicitud y cambiar la configuración del perfil de un usuario sin ver directamente sus datos.
Patrones comunes para detectar vulnerabilidades IDOR en el código
Para detectar vulnerabilidades IDOR en el código, hay que estar alerta y conocer los patrones comunes:
Falta de control de acceso: Es probable que una aplicación que usa datos proporcionados por el usuario para acceder directamente a los recursos, sin verificar su autorización, tenga una vulnerabilidad IDOR.
Identificadores fáciles de adivinar: Los identificadores fáciles de adivinar, como los enteros secuenciales (
user_id=99001) o las cadenas cortas (user_id=user1), aumentan el riesgo de vulnerabilidades IDOR en una aplicación. Usar identificadores difíciles de adivinar, como los identificadores únicos universales (UUID), puede reducir este riesgo.Acceso directo a archivos: Una aplicación que da a los usuarios acceso directo a cualquier recurso, como imágenes o archivos CSV, mediante URL o parámetros de solicitud es vulnerable a las vulnerabilidades IDOR. Debemos asegurarnos de que existan mecanismos de control adecuados para evitar dar a los usuarios acceso directo a los archivos.
Crear una aplicación de Python vulnerable a IDOR con FastAPI
En esta sección, crearemos una API web vulnerable a IDOR con FastAPI, un framework de Python. Después, veremos cómo corregir la vulnerabilidad.
Para seguir este tutorial práctico, asegúrate de tener Python 3.x instalado en tu máquina.
Primeros pasos
Primero, necesitamos una aplicación nueva. Crea un directorio para tu proyecto y accede a él:
Luego, instala FastAPI, Uvicorn, SQLAlchemy y SQLite con el siguiente comando:
Por último, crea un archivo llamado main.py en el directorio del proyecto.
Crear una API vulnerable con FastAPI
Ahora que configuramos la estructura de directorios y los requisitos, escribamos el código que contiene una vulnerabilidad IDOR. Primero, copia el código de abajo en main.py:
La vulnerabilidad IDOR está en el endpoint /users/user_id. Como la aplicación no tiene controles de acceso, cualquier usuario puede ver los datos de otros usuarios si cambia el user_id en la URL.
Cómo identificar y corregir vulnerabilidades IDOR
Ahora, encontremos y corrijamos la falla de seguridad IDOR en nuestra aplicación FastAPI.
Cómo encontrar vulnerabilidades
Para identificar vulnerabilidades IDOR, debemos buscar patrones específicos en el código. En la aplicación FastAPI, debemos examinar el endpoint /users/{user_id}, que representa una posible vulnerabilidad IDOR por los siguientes motivos:
Referencias directas a objetos sin protección: En la función
get_user_by_id, el parámetrouser_idhace referencia directamente al objetoUserde la base de datos. Cualquier cliente podría manipular el valor deuser_iden la solicitud para acceder a los datos de otros usuarios, ya que ningún mecanismo de control de acceso protege esta referencia directa.Falta de autorización: En la misma función
get_user_by_id, no hay verificaciones que confirmen si el usuario que realiza la solicitud está autorizado para acceder a los datos del usuario solicitado. Cualquier usuario puede acceder a los datos de cualquier otro usuario si manipula el parámetrouser_id.
Cómo corregir el código vulnerable
Para corregir la vulnerabilidad IDOR, debemos actualizar el endpoint /users/{user_id} e incorporar verificaciones adecuadas de control de acceso.
Simulemos un usuario autenticado y permitamos el acceso solo si el user_id de la URL coincide con el ID del usuario autenticado. Para esta demostración, supongamos que el usuario autenticado tiene el ID 1. Este es el código actualizado:
En este bloque de código, agregamos una verificación de control de acceso que compara el user_id de la URL con el authenticated_user_id. La aplicación genera un error HTTP 403 Forbidden si los ID no coinciden. Este error impide que los usuarios no autorizados accedan a la información de otros usuarios y corrige la vulnerabilidad IDOR.
Cómo detectar y corregir problemas de seguridad con Snyk
Snyk es una solución de seguridad con funciones de análisis de composición de software (SCA) y pruebas de seguridad de aplicaciones estáticas (SAST). Usemos Snyk para encontrar y corregir problemas de seguridad en nuestra aplicación FastAPI.
Instalar y autenticar Snyk CLI
Para comenzar, instala Snyk CLI en tu máquina siguiendo la guía de instalación de la documentación.
Después de instalar la CLI, debes autenticar tu cuenta de Snyk. Ejecuta el comando snyk auth en la terminal. Se abrirá una ventana del navegador donde podrás iniciar sesión con tu cuenta de GitHub o Google.
Analizar las dependencias en busca de vulnerabilidades
Para analizar el proyecto en busca de vulnerabilidades en bibliotecas de terceros, necesitamos un archivo requirements.txt. Crea requirements.txt con el siguiente comando:
A continuación, analiza las dependencias del proyecto en busca de vulnerabilidades ejecutando el siguiente comando en la terminal:
Este comando analiza tus dependencias, identifica y describe las vulnerabilidades, detalla su gravedad y ofrece orientación para corregirlas. Por ejemplo, podrías encontrar una vulnerabilidad de denegación de servicio (DoS) de gravedad media en starlette@0.14.2.
Nota: Snyk no puede analizar el proyecto si falta un paquete requerido. La opción –skip-unresolved anula este comportamiento.
Cómo corregir vulnerabilidades con Snyk
Snyk también puede ayudarte a corregir vulnerabilidades. El comando snyk fix puede solucionar automáticamente algunos de los problemas detectados. Snyk actualizará o aplicará parches a las dependencias afectadas para que sean versiones seguras y mantendrá tus aplicaciones actualizadas y protegidas.
Usar Snyk Code para el análisis estático del código
Snyk también cuenta con una potente solución de pruebas de seguridad de aplicaciones estáticas (SAST). El comando snyk code puede analizar el código de tu aplicación, identificar problemas de seguridad y proporcionar información detallada sobre cómo corregirlos.
Para usar snyk code, ejecuta el siguiente comando en la terminal:
Snyk Code realizará un análisis profundo de tu base de código y destacará las vulnerabilidades de seguridad que encuentre. También ofrece recomendaciones para corregirlas, lo que te ayuda a mantener una aplicación segura y confiable.
Explicación de las vulnerabilidades IDOR
Como desarrolladores, debemos asegurarnos de que nuestras aplicaciones sean seguras. Las vulnerabilidades IDOR amenazan las aplicaciones web, por lo que debemos aprender a encontrarlas y corregirlas. Si comprendes bien las vulnerabilidades IDOR, podrás crear aplicaciones de Python eficientes y seguras.
En este tutorial, aprendiste a encontrar y corregir vulnerabilidades IDOR en una aplicación de Python. También vimos cómo Snyk puede ayudarte a identificar y solucionar riesgos de seguridad en las dependencias de tu proyecto y en el código de la aplicación. Snyk es una potente herramienta de seguridad; integrarla en tu rutina de desarrollo agrega una capa adicional de protección para mantener tu código sólido.
Conoce mejor lo que Snyk ofrece con una prueba gratuita.
Empieza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.



