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