Slide 1

Slide 1 text

Asegurando tus APIs: Explorando el OWASP Top 10 de Seguridad en APIs José Manuel Ortega [email protected]

Slide 2

Slide 2 text

Welcome to Commit Conf ∘ Introducir el concepto de seguridad en las APIs ∘ OWASP Top 10 y su importancia para la seguridad en APIs ∘ Actualización del OWASP Top 10 security en 2023 ∘ Herramientas para evaluar y mejorar la seguridad de tus APIs. ∘ Estrategias y mejores prácticas para garantizar la seguridad de tus APIs.

Slide 3

Slide 3 text

Introducir el concepto de seguridad en las APIs ● Amenazas comunes a la seguridad de las API ○ Ataques de inyección ○ Ataques man-in-the-middle (MITM) ○ Ataques denegación de servicio distribuida (DDoS) ○ Ataques de control de acceso a las aplicaciones

Slide 4

Slide 4 text

Guidelines https://owasp.org/API-S ecurity/editions/2023/e n/0x00-header

Slide 5

Slide 5 text

OWASP Top 10 y su importancia para la seguridad en APIs

Slide 6

Slide 6 text

Actualización del OWASP Top 10 security en 2023

Slide 7

Slide 7 text

Actualización del OWASP Top 10 security en 2023 1.Broken Object Level Authorization – Autorización a nivel de objeto rota https://api.example.com/v1.1/users/payment/show?user_id=12 https://api.example.com/v1.1/messages/show?id=d0c240ea139206 019f692d

Slide 8

Slide 8 text

Actualización del OWASP Top 10 security en 2023 1.Broken Object Level Authorization – Autorización a nivel de objeto rota

Slide 9

Slide 9 text

Actualización del OWASP Top 10 security en 2023 1.Broken Object Level Authorization # Inicializar el gestor de archivos gestor_archivos = GestorArchivos() # Subir algunos archivos archivo1 = Archivo("archivo1.txt", id_usuario=1) archivo2 = Archivo("archivo2.txt", id_usuario=2) gestor_archivos.subir_archivo(archivo1) gestor_archivos.subir_archivo(archivo2) # Un atacante intenta acceder a un archivo que no le pertenece id_usuario_atacante = 3 nombre_archivo_a_acceder = "archivo1.txt" archivo_a_acceder = gestor_archivos.obtener_archivo(nombre_archivo_a_acceder, id_usuario_atacante) class Archivo: def __init__(self, nombre_archivo, id_usuario): self.nombre_archivo = nombre_archivo self.id_usuario = id_usuario class GestorArchivos: def __init__(self): self.archivos = [] def subir_archivo(self, archivo): self.archivos.append(archivo) def obtener_archivo(self, nombre_archivo, id_usuario): for archivo in self.archivos: if archivo.nombre_archivo == nombre_archivo: return archivo return None

Slide 10

Slide 10 text

Actualización del OWASP Top 10 security en 2023 1.Broken Object Level Authorization def obtener_archivo(self, nombre_archivo, id_usuario): for archivo in self.archivos: if archivo.nombre_archivo == nombre_archivo and archivo.id_usuario == id_usuario: return archivo return None

Slide 11

Slide 11 text

Actualización del OWASP Top 10 security en 2023 2.Broken Authentication – Autenticación rota ● La autenticación podría verse comprometida de muchas maneras. Por ejemplo, si la autenticación permite la fuerza bruta, contraseñas débiles o un control de identidad no verificable, podría romperse fácilmente.

Slide 12

Slide 12 text

Actualización del OWASP Top 10 security en 2023 2.Broken Authentication – Autenticación rota POST /graphql { "query":"mutation { login (username:\"\",password:\"\") { token } }" }

Slide 13

Slide 13 text

Actualización del OWASP Top 10 security en 2023 2.Broken Authentication – Autenticación rota ● Tokens leaks https://api.example.com/v1.1/users/payment/show?user_id=12 &access_token=360f91d065e56a15a0d9a0b4e170967b

Slide 14

Slide 14 text

Actualización del OWASP Top 10 security en 2023 2.Broken Authentication – Autenticación rota ● Json Web Tokens

Slide 15

Slide 15 text

Actualización del OWASP Top 10 security en 2023 3.Broken Object Property Level Authorization – Autorización de nivel de propiedad de objeto rota ● Expone propiedades de un objeto consideradas sensibles y a las que no debe acceder el usuario. ● Permite al usuario cambiar, añadir y o eliminar el valor de una propiedad sensible, para la que no debería tener acceso.

Slide 16

Slide 16 text

Actualización del OWASP Top 10 security en 2023 3.Broken Object Property Level Authorization – Autorización de nivel de propiedad de objeto rota ● https://api.example.com/v1.1/users/show?user_id=12 { "id": 6253282, "username": "vickieli7", "screen_name": "Vickie", "location": "San Francisco, CA", "bio": "Infosec nerd. Hacks and secures. Creates god awful infographics.", "api_token": "8a48c14b04d94d81ca484e8f32daf6dc", "phone_number": "123-456-7890", "address": "1 Main St, San Francisco, CA, USA" }

Slide 17

Slide 17 text

Actualización del OWASP Top 10 security en 2023 3.Broken Object Property Level Authorization note1 = Note("Nota privada de Juan", user_id=1) note2 = Note("Nota secreta de María", user_id=2) note_manager = NoteManager() note_manager.add_note(note1) note_manager.add_note(note2) # Supongamos que un usuario intenta ver las notas de otro usuario (un atacante) usuario_malicioso_id = 3 notas_usuario_malicioso = note_manager.get_notes_for_user(usuario_malicioso_id) for nota in notas_usuario_malicioso: print(nota.content) class Note: def __init__(self, content, user_id): self.content = content self.user_id = user_id class NoteManager: def __init__(self): self.notes = [] def add_note(self, note): self.notes.append(note) def get_notes_for_user(self, user_id): return [note for note in self.notes if note.user_id == user_id]

Slide 18

Slide 18 text

Actualización del OWASP Top 10 security en 2023 3.Broken Object Property Level Authorization def get_notes_for_user(self, user_id, request_user_id): # Verificar si el usuario solicitante tiene permiso para ver las notas del usuario especificado if user_id == request_user_id: return [note for note in self.notes if note.user_id == user_id] else: return None

Slide 19

Slide 19 text

Actualización del OWASP Top 10 security en 2023 4.Unrestricted Resource Consumption – Consumo de recursos sin restricciones ● La explotación de esta vulnerabilidad por atacantes mediante un ataque de denegación de servicio (DoS), ante la falta de suficientes recursos para atender a todas las peticiones que se realizan a la API. ● Un aumento sustancial de los costes operativos asociado al incremento de los recursos que se deben emplear, por ejemplo, más almacenamiento en la nube.

Slide 20

Slide 20 text

Actualización del OWASP Top 10 security en 2023 5.Broken Function Level Authorization – Autorización rota a nivel de función

Slide 21

Slide 21 text

Actualización del OWASP Top 10 security en 2023 5.Broken Function Level Authorization – Autorización rota a nivel de función

Slide 22

Slide 22 text

Actualización del OWASP Top 10 security en 2023 5.Broken Function Level Authorization def actualizar_perfil_usuario(id_usuario, nuevos_datos): # Obtener datos del usuario (asumiendo una conexión a la base de datos) datos_usuario = obtener_datos_usuario(id_usuario) # Actualizar datos (asumiendo la manipulación de datos) datos_usuario.update(nuevos_datos) # Guardar datos actualizados (asumiendo interacción con la base de datos) guardar_datos_usuario(datos_usuario) return {"mensaje": "Perfil actualizado correctamente"}

Slide 23

Slide 23 text

Actualización del OWASP Top 10 security en 2023 5.Broken Function Level Authorization def actualizar_perfil_usuario(usuario_actual, id_usuario, nuevos_datos): # Compruebe si el usuario actual tiene permiso para actualizar el perfil objetivo if not esta_autorizado(usuario_actual, id_usuario): return {"error": "No autorizado para actualizar el perfil"} def esta_autorizado(usuario_actual, id_usuario_objetivo): """ Esta función determina si el usuario actual está autorizado para actualizar el perfil objetivo. (Reemplace con su lógica de autorización basada en roles y permisos de usuario) """ return usuario_actual.id == id_usuario_objetivo # Ejemplo: Permitir solo actualizaciones de uno mismo # Uso (asumiendo un objeto de usuario 'usuario_actual' que ha iniciado sesión) actualizar_perfil_usuario(usuario_actual, usuario_actual.id, {"nombre": "Juana Pérez"})

Slide 24

Slide 24 text

Actualización del OWASP Top 10 security en 2023 6. Unrestricted Access to Sensitive Business Flows-Acceso sin restricciones a flujos empresariales sensibles ● OWASP señala que cuando se crea un endpoint de API, se expone un flujo de negocio y es fundamental entender que hay flujos de negocio más sensibles que otros y el acceso excesivo a ellos puede resultar perjudicial para la empresa. ● Ejemplos de estos flujos pueden ser los de compra de un producto, el de publicación de comentarios o el de reservas. ● La vulnerabiliadd se produce cuando se expone un flujo de negocio sensible sin contar con mecanismos que restrinjan el acceso de forma adecuada.

Slide 25

Slide 25 text

Actualización del OWASP Top 10 security en 2023 7.Server Side Request Forgery – Falsificación de peticiones del lado del servidor

Slide 26

Slide 26 text

Actualización del OWASP Top 10 security en 2023 7.Server Side Request Forgery – Falsificación de peticiones del lado del servidor ● Validación de entrada de usuario ● Listas blancas de direcciones y recursos permitidos ● Limitar permisos y aplicar el principio de mínimo privilegio.

Slide 27

Slide 27 text

Actualización del OWASP Top 10 security en 2023 8.Security Misconfiguration – Configuración incorrecta o no segura ● Faltan parches de seguridad ● Configuraciones por defecto ● Funciones innecesarias que están activadas ● La aplicación no utiliza seguridad de la capa de transporte (TLS) ni una política de intercambio de recursos entre orígenes (CORS). ● Los mensajes de error que exponen información confidencial

Slide 28

Slide 28 text

Actualización del OWASP Top 10 security en 2023 8.Security Misconfiguration – Configuración incorrecta o no segura ● Poner en marcha un proceso de hardening ● Revisar y actualizar las configuraciones de la API ● Automatizar la evaluación de la configuración y los ajustes en todos los entornos

Slide 29

Slide 29 text

Actualización del OWASP Top 10 security en 2023 9.Improper Asset Management – Gestión inadecuada de activos

Slide 30

Slide 30 text

Actualización del OWASP Top 10 security en 2023 10.Unsafe Consumption of APIs – Consumo no seguro de APIs ● Una API interactúa con otras a través de un canal no cifrado. ● No se validan ni sanean los datos obtenidos de otras API antes de procesarlos y trasladarlos a componentes de la API. ● No se validan las redirecciones. ● No se limitan los recursos que se pueden emplear para procesar respuestas de servicios de terceros. ● No se implementan tiempos de espera en las interacciones con servicios de terceros.

Slide 31

Slide 31 text

Herramientas para evaluar y mejorar la seguridad

Slide 32

Slide 32 text

Herramientas para evaluar y mejorar la seguridad

Slide 33

Slide 33 text

Herramientas para evaluar y mejorar la seguridad

Slide 34

Slide 34 text

Herramientas para evaluar y mejorar la seguridad

Slide 35

Slide 35 text

Herramientas para evaluar y mejorar la seguridad

Slide 36

Slide 36 text

Herramientas para evaluar y mejorar la seguridad

Slide 37

Slide 37 text

Herramientas para evaluar y mejorar la seguridad

Slide 38

Slide 38 text

Herramientas para evaluar y mejorar la seguridad

Slide 39

Slide 39 text

Herramientas para evaluar y mejorar la seguridad

Slide 40

Slide 40 text

Herramientas para evaluar y mejorar la seguridad

Slide 41

Slide 41 text

Herramientas para evaluar y mejorar la seguridad

Slide 42

Slide 42 text

Herramientas para evaluar y mejorar la seguridad

Slide 43

Slide 43 text

Herramientas para evaluar y mejorar la seguridad crAPI https://github.com/OWASP/crAPI Completely Ridiculous API (crAPI) Pixi https://github.com/DevSlop/Pixi Vulnerable REST API based on the MEAN stack VAmPI https://github.com/erev0s/VAmPI OWASP API Top 10 vulnerabilities vAPI https://github.com/roottusk/vapi OWASP API Top 10-based exercises BankGround https://gitlab.com/karelhusa/bankg round Open source project to learn REST and GraphQL security

Slide 44

Slide 44 text

Estrategias y mejores prácticas para garantizar la seguridad de tus APIs ● Implementar comprobaciones de autorización a nivel de objeto y considerar la posibilidad de utilizar ID de objetos generados aleatoriamente. ● Asignar y aplicar privilegios en funciones que requieran confidencialidad. ● Establecer límites al tamaño de las peticiones, las frecuencias y a qué pueden acceder los usuarios. ● Imponer restricciones a los flujos de llamdas que podrían ser el origen de un ataque si se usan en exceso. ● Evitar configuraciones inseguras cuando sea posible. ● Documentar los servicios y actualizar estos catálogos periódicamente.

Slide 45

Slide 45 text

Estrategias y mejores prácticas para garantizar la seguridad de tus APIs ● Mejorar la gobernanza de las APIs ● Utilizar herramientas de descubrimiento de APIs ● Desplegar una pasarela API ● Añadir un firewall de aplicaciones web (WAF) ● Cifrar todos los datos (mediante TLS, por ejemplo) ● Utilizar OAuth para controlar el acceso de la APIs ● Aplicar la limitación de velocidad para restringir la frecuencia con la que se puede llamar a su API. ● Considerar un enfoque de confianza cero o zero trust

Slide 46

Slide 46 text

Asegurando tus APIs: Explorando el OWASP Top 10 de Seguridad en APIs José Manuel Ortega [email protected]