Explotación de APIs: Explicación y PoC (1/2)

    El abuso de las API (interfaz de programación de aplicaciones) es una preocupación cada vez mayor para las empresas y organizaciones que dependen de las API para proporcionar acceso a sus servicios y datos. El abuso de las API puede adoptar muchas formas, desde el acceso no autorizado y las filtraciones de datos a los ataques DDoS y el spam. Para evitar el abuso de las API, es esencial implementar medidas de seguridad de API sólidas.   

    Cuando nos referimos al abuso de APIs, estamos hablando de la explotación de debilidades en las interfaces de programación de aplicaciones (APIs), las cuales facilitan la comunicación y el intercambio de datos entre diferentes aplicaciones y servicios en una red.

    Un ejemplo práctico de API es la integración de Google Maps en una aplicación de transporte. En lugar de crear su propio sistema de mapas, la aplicación puede utilizar la API de Google Maps para mostrar la ubicación del vehículo y la ruta hacia el destino del usuario.

    La API de Google Maps proporciona una serie de funciones y protocolos que permiten a la aplicación de transporte comunicarse con los servidores de Google para acceder a los datos necesarios y mostrar el mapa y la ruta. Además, la API se encarga de adaptar la visualización del mapa y la ruta a diferentes dispositivos y navegadores, permitiendo que la aplicación de transporte se concentre en su funcionalidad principal.

    Los endpoints de una API pueden aceptar varios métodos de solicitud, como GET, POST, PUT, DELETE, entre otros. Los atacantes pueden utilizar herramientas de fuzzing para enviar una gran cantidad de solicitudes a un endpoint en busca de vulnerabilidades. Por ejemplo, podrían realizar solicitudes GET para listar todos los recursos disponibles o enviar solicitudes POST para agregar o modificar datos.

    Entre las posibles vulnerabilidades que pueden ser explotadas a través del abuso de APIs se incluyen:

        1. Falta de autenticación y autorización adecuadas: Si una API no requiere autenticación o autorización adecuadas para acceder a ciertos recursos o realizar ciertas acciones, los atacantes podrían aprovechar esto para acceder a información confidencial o realizar operaciones no autorizadas.

        2. Validación inadecuada de datos de entrada: Si una API no valida correctamente los datos de entrada proporcionados por el usuario, los atacantes podrían enviar datos maliciosos diseñados para explotar vulnerabilidades en el sistema subyacente.

        3. Falta de cifrado en la transmisión de datos: Si una API no utiliza cifrado para proteger los datos transmitidos entre el cliente y el servidor, los atacantes podrían interceptar y leer la información confidencial transmitida a través de la red.

        4. Exposición de información sensible: Si una API expone más información de la necesaria o información sensible que no debería ser accesible públicamente, los atacantes podrían utilizar esta información para realizar ataques dirigidos o comprometer la seguridad de los usuarios.

    Para mitigar el abuso de APIs y proteger contra estas vulnerabilidades, los desarrolladores deben diseñar APIs seguras que implementen medidas de seguridad adecuadas, como la autenticación robusta, la validación adecuada de datos de entrada, el cifrado de datos y la limitación del acceso a la información sensible. Además, es importante realizar pruebas exhaustivas de seguridad, utilizando herramientas como Postman, para identificar y corregir posibles vulnerabilidades antes de que sean explotadas por los atacantes.



USO DE POSTMAN 

    Postman es una herramienta ampliamente utilizada para probar y depurar APIs. Con Postman, los desarrolladores pueden enviar solicitudes a diferentes endpoints y verificar las respuestas para asegurarse de que la API está funcionando correctamente. Sin embargo, los atacantes también pueden aprovechar Postman para explorar los endpoints en busca de vulnerabilidades y debilidades de seguridad.    

    Nos registramos e identificamos el token una vez logueados por el método POST


    Vamos a representar esta petición por POST la cual nos muestra el endpoint,  el cuerpo y el token
que se vincula en la cabecera para futura peticiones que hagamos 


    Instalamos POSTMAN:
    
    Así que lo vamos a añadir en nuestro proyecto de POSTMAN, antes que nada tenemos que crear un proyecto y guardar cada uno de los endpoints dentro de ese mismo proyecto. Vamos a añadir esta petición de login en el formato que hemos visto anteriormente, es decir en formato POST y la estructura en JSON, para que el valor del content type sea en formato JSON y lo interprete 



    Creamos una nueva colección y le damos a new http request, indicamos la url con método POST, si le damos a enviar vemos el token que el servidor nos otorga


    Para que nos sea mas fácil poder trabajar vamos a crear una variable con nuestro access token la cual se va a arrastrar a todas las peticiones que hagamos desde postman, siempre y cuando no cambie




    Añadimos un nuevo endpoint en este caso del dashboard por método GET;


    Si le damos a enviar vemos que nos interpreta perfectamente nuestro usuario sin necesidad de estar arrastrando manualmente el acccess token;




PoC 1: Compra de productos


    En este caso vamos a comprar uno de los artículos disponibles en la tienda, donde vemos que tenemos un saldo disponible de $90 y dos elementos: ‘Seat’ y ‘Wheel’. Si hacemos un pedido y examinamos de cerca la solicitud y la respuesta de la API de la tienda;


    Podemos ver una petición por GET al endpoint "products" y el cuerpo, lo añadimos a postman nuevamente con el fin de ir enumerando endpoints y le damos a enviar para hacer un pedido. Nos indicar el precio de los artículos y el saldo restante;


    Vamos a comprar uno de los productos y vemos que hace una petición por POST al endpoint "orders" donde nos indica que el pedido a sido enviado correctamente;


    Así que lo añadimos a postmanSi vemos el cuerpo del mensaje a nivel de respuesta vemos el identificador del articulo junto con el crédito restante;


    Y a nivel de solicitud nos indica la cantidad y el identificar del productos 



    Añadimos el endpoint "orders" por el método POST y añadimos el cuerpo de la solicitud en formato JSON, si le damos a enviar vemos que se realiza correctamente y la cantidad restante del saldo va bajando



PoC 2: Incremento de productos en negativo



    En esta ocasión vamos a intentar añadir productos con un saldo en negativo para que en el momento de hacer la compra podamos aumentar nuestro saldo.

    Si nos acordamos de PoC anterior de "orders", la solicitud era por POST, así que vamos a cambiar la solicitud a OPTION para que nos diga que métodos acepta el endpoint y la API:


    Como vemos acepta GET, POST ,HEAD y OPTIONS.

    En el endpoint de productos la cual la petición era por GET la vamos a cambiar por POST y vemos que tenemos un cuerpo distinto, que involucra unos campos como para poder añadir productos;


    Podemos probar a enviarle una cuerpo rellenado con un nombre, precio e imagen, pero en el precio vamos a indicar que sea -200 con el fin de que cuando compremos nos den saldo, este ataque es llamdo Mass-Asignment Attack.


    Lo enviamos y vemos que lo a aceptado;


    Vemos como efectivamente el producto con un precio en negativo;


Si realizamos un pedido indicando el identificador del producto y la cantidad vemos que se nos a sumado el precio


    Y así las veces que queramos;



    En la segunda parte veremos como podemos cambiar contraseñas de usuarios, obtener cupones e incluso obtener información privilegiada de usuarios.



No hay comentarios:

Publicar un comentario