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