Saltar a contenido

CORS Misconfiguration Vulnerability

Vulnerabilidad de mala configuración de CORS

Descripción

Una configuración incorrecta de CORS se refiere a una vulnerabilidad donde las políticas de Cross-Origin Resource Sharing (CORS) no están configuradas correctamente en un servidor web. Esto permite que se realicen solicitudes de origen cruzado no autorizadas, lo que puede provocar una fuga de información o un acceso no autorizado a datos sensibles.

A continuación se muestran ejemplos de configuraciones incorrectas de CORS en diferentes frameworks populares:

CORS_ALLOWED_ORIGIN_REGEXES = [
    r"*",
]
CORS_ALLOW_METHODS = [
    "DELETE",
    "GET",
    "OPTIONS",
    "PATCH",
    "POST",
    "PUT",
]
  const express = require('express');
  const cors = require('cors');
  const app = express();

      const ingredients = [];

  app.use(cors({
      origin: '*'
  }));

  app.get('/ingredients', (req, res) =>{
      res.send(ingredients);
  });
  app.listen(6069);
    import org.springframework.boot.autoconfigure.SpringBootApplication
    import org.springframework.boot.runApplication
    import org.springframework.web.bind.annotation.CrossOrigin
    import org.springframework.web.bind.annotation.GetMapping
    import org.springframework.web.bind.annotation.PathVariable
    import org.springframework.web.bind.annotation.RestController

    @SpringBootApplication
    class DemoApplication

    fun main(args: Array<String>) {
        runApplication<DemoApplication>(*args)
    }

    @RestController
    class UserController {

        @CrossOrigin(origins = "*")
        @GetMapping("/users/{id}")
        fun getUser(@PathVariable id: String): String {
            // Fetch user data from the database based on the provided id
            return "User with id $id"
        }
    }

Recomendación

Para mitigar las vulnerabilidades de configuración incorrecta de CORS, es importante seguir las mejores prácticas. Esto incluye configurar adecuadamente el encabezado Access-Control-Allow-Origin para permitir únicamente orígenes de confianza, en lugar de utilizar el valor comodín (*). Además, es crucial implementar mecanismos de autenticación y autorización adecuados para garantizar que solo los usuarios autorizados puedan acceder a recursos sensibles. Supervisar y auditar de forma periódica las configuraciones de CORS puede ayudar a identificar y abordar cualquier posible configuración incorrecta o vulnerabilidad.

A continuación se muestran ejemplos de ajustes seguros de CORS:

    CORS_ALLOWED_ORIGINS = [
    "https://cross-origin-website.com",
    "https://sub.cross-origin-website.com",
    ]
    CORS_ALLOW_METHODS = [
        "DELETE",
        "GET",
        "OPTIONS",
        "PATCH",
        "POST",
        "PUT",
    ]
    const express = require('express');
    const cors = require('cors');
    const app = express();

        const ingredients = [];

    app.use(cors({
        origin: 'https://cross-origin-website.com'
    }));

    app.get('/ingredients', (req, res) =>{
        res.send(ingredients);
    });
    app.listen(6069);
    import org.springframework.boot.autoconfigure.SpringBootApplication
    import org.springframework.boot.runApplication
    import org.springframework.web.bind.annotation.CrossOrigin
    import org.springframework.web.bind.annotation.GetMapping
    import org.springframework.web.bind.annotation.PathVariable
    import org.springframework.web.bind.annotation.RestController

    @SpringBootApplication
    class DemoApplication

    fun main(args: Array<String>) {
        runApplication<DemoApplication>(*args)
    }

    @RestController
    class UserController {

        @CrossOrigin(origins = ["http://localhost:8080"]) // Replace with your allowed origin(s)
        @GetMapping("/users/{id}")
        fun getUser(@PathVariable id: String): String {
            // Fetch user data from the database based on the provided id
            return "User with id $id"
        }
    }

Enlaces

Estándares

  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_7_3
    • REQ_8_3
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213