Aller au contenu

CORS Misconfiguration Vulnerability

Vulnérabilité de mauvaise configuration CORS

Description

Une mauvaise configuration CORS fait référence à une vulnérabilité où les politiques Cross-Origin Resource Sharing (CORS) ne sont pas correctement configurées sur un serveur web. Cela permet d'effectuer des requêtes cross-origin non autorisées, ce qui peut entraîner une fuite d'informations ou un accès non autorisé à des données sensibles.

Voici des exemples de configurations CORS incorrectes sur différents frameworks populaires :

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"
        }
    }

Recommandation

Pour atténuer les vulnérabilités de mauvaise configuration CORS, il est important de suivre les meilleures pratiques. Cela implique de configurer correctement l'en-tête Access-Control-Allow-Origin pour n'autoriser que les origines de confiance, plutôt que d'utiliser la valeur générique (*). De plus, il est crucial de mettre en œuvre des mécanismes d'authentification et d'autorisation appropriés pour garantir que seuls les utilisateurs autorisés puissent accéder aux ressources sensibles. La surveillance et l'audit réguliers des configurations CORS peuvent aider à identifier et à résoudre toute mauvaise configuration ou vulnérabilité potentielle.

Voici des exemples de paramètres sécurisés 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"
        }
    }

Liens

Normes

  • 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