Corsair_scan es una aparejo de seguridad para probar las configuraciones incorrectas de Intercambio de capital de origen cruzado (CORS). CORS es un mecanismo mediante el cual se pueden solicitar capital restringidos en una página web desde otro dominio fuera del dominio desde el cual se sirvió el primer procedimiento. Si no se configura correctamente, los dominios no autorizados pueden ceder a estos capital.
¿Qué es CORS?
CORS es un mecanismo basado en encabezados HTTP que permite a un servidor especificar orígenes (dominio, esquema o puerto) distintos al suyo desde el cual un navegador debe permitir que se carguen los capital. Con este fin, se agregan nuevos encabezados HTTP que los servidores pueden usar para describir qué orígenes pueden adivinar esta información desde un navegador web.
CORS todavía se apoyo en un mecanismo mediante el cual los navegadores realizan una solicitud de «comprobación previa» al servidor que aloja el procedimiento de origen cruzado para repasar que el servidor permite la solicitud existente. En esta comprobación previa, el navegador envía encabezados que indican el método HTTP y los encabezados que se utilizan en la solicitud existente.
El problema de seguridad más global y problemático con la implementación de CORS es la descuido de fuerza / tira blanca de solicitantes. Con demasiada frecuencia vemos que el valía de Access-Control-Allow-Origin se establece en ‘*’.
Desafortunadamente, este es el valía predeterminado y, como tal, permite que cualquier dominio en la web acceda a los capital de ese sitio.
De acuerdo con el Normalizado de comprobación de seguridad de aplicaciones de OWASP (ASVS), dice en el requisito 14.5.3
Asegúrese de que el encabezado Access-Control-Allow-Origin de Cross-Origin Resource Sharing (CORS) utilice una tira estricta de permitidos de dominios y subdominios de confianza para la coincidencia y que no admita orígenes «nulos».
¿Cómo funciona corsair_scan?
Corsair_scan funciona reenviando una solicitud (o tira de solicitudes) recibida como parámetro y luego insertando un valía en el encabezado Origin. Dependiendo del contenido del encabezado Access-Control-Allow-Origin en la respuesta a esta solicitud, podemos determinar si la configuración de CORS es correcta o no. Hay tres escenarios que indican que CORS está configurado incorrectamente:
- El origen espurio enviado en la solicitud se refleja en Access-Control-Allow-Origin
- El valía de Access-Control-Allow-Origin es *
- El valía de Access-Control-Allow-Origin es cero
Si resulta que CORS está configurado incorrectamente, verificamos si la respuesta incluye el encabezado Access-Control-Allow-Credentials, lo que significa que el servidor permite que las credenciales se incluyan en solicitudes de origen cruzado.
Las configuraciones de CORS a menudo usan comodines, por ejemplo, aceptan cualquier cosa en * example.com *. Esto significa que el dominio de origen.com.evil.com es aceptado porque coincide con la expresión regular dada. Para contrarrestar esto, corsair_scan está probando cuatro escenarios:
- Inyección de dominio espurio: establecemos el encabezado de origen en https://scarymonster.com, incluso si la solicitud innovador no tiene un encabezado de origen
- Si la solicitud innovador tiene un encabezado de origen (para maduro claridad, asumimos que es https://example.com):
- Inyección de predominio: Concatenamos nuestro dominio espurio con el dominio innovador de la izquierda. En nuestro ejemplo, el origen se establece en https://scarymonsterexample.com
- Inyección posterior al dominio: lo opuesto al predominio, solo concatenación a la derecha. El origen es https://example.com.scarymonster.com
- Inyección de subdominios: a veces, la configuración de CORS incluirá en la tira blanca todos los subdominios de un dominio en particular. Si perfectamente esto no es un problema en sí mismo, puede ser un problema circunspecto si uno de los dominios es frágil a XSS. El origen en este tablas es https://scarymonster.example.com
¿Como lo instalo?
Este esquema fue desarrollado con Python 3.9, pero debería funcionar con cualquier lectura de Python 3.x. La mejor forma de instalarlo es utilizando pip.
pip3 instalar corsair_scan –user
¿Como lo uso?
Corsair se puede utilizar como módulo de Python y como CLI.
Módulo de Python
El método que realiza el escaneo CORS es corsair_scan. Aquí está su definición:
corsair_scan
Recibe una tira de solicitudes y un parámetro para activar / desactivar la comprobación del certificado en la solicitud
Entrada:
- Datos [List]: Una tira de solicitudes. Cada consulta es un diccionario que contiene los datos relevantes para la consulta:
- Url_data [Dict]: Este es un diccionario que contiene todos los datos relevantes para la consulta:
- URL [String]: Esta es la URL a la que se enviará la solicitud
- verbo [String]: El verbo para la solicitud (obtener, anunciar, parchear, eliminar, opciones …)
- parámetro [String]: El texto enviado en la solicitud (si corresponde)
- titulares [Dict]: Este es un dictado con todos los encabezados incluidos en la solicitud.
- Url_data [Dict]: Este es un diccionario que contiene todos los datos relevantes para la consulta:
- cheque [Boolean] [Default: True] : Envía este valía a corsair_scan_single_url para cada solicitud
producción:
- Reporte final [List]: Contiene el crónica completo de la prueba realizada. Cuando el filtro se establece en definitivo, todavía se agrega al crónica un prontuario de la prueba.
- crónica [List]: Inventario de informes individuales detallados con una prueba realizada
- Sumario [Dict] : Sumario de los problemas detectados en el escaneo.
ejemplo
Importar corsair_scan.corsair_scan como corsair
URL_Data =
Datos = []
Verbo = ‘RECIBIR’
URL = ‘https://example.com/’
params = ‘usufructuario = usuario1 y contraseña = 1234’
encabezados = ‘Aceptar’: ‘texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / webp,/; q = 0.8 ′,
‘Accept-Language’: ‘en-GB, en; q = 0.5’, ‘Connection’: ‘keep-alive’, ‘Upgrade-Unsecure-Requests’: ‘1’,
‘Origen’: ‘https://example.com’,
‘Host’: ‘example.com’
Url_data[‘verb’] = Verbo
Url_data[‘url’] = URL
Url_data[‘params’] = Parámetro
Url_data[‘headers’] = Encabezados
data.append (url_data)
imprimir (corsair.corsair_scan (datos, repasar = Serio))
Respuesta:
‘Mensaje’: [‘fake_origin’: ‘Access-Control-Allow-Origin’: ‘https://scarymonster.com’,
‘Origin’: ‘https://scarymonster.com’,
‘credentials’: True,
‘error’: False,
‘misconfigured’: True,
‘status_code’: 200,
‘post-domain’: ‘Access-Control-Allow-Origin’: ‘https://example.com.scarymonster.com’,
‘Origin’: ‘https://example.com.scarymonster.com’,
‘credentials’: True,
‘error’: False,
‘misconfigured’: True,
‘status_code’: 200,
‘pre-domain’: ‘Access-Control-Allow-Origin’: ‘https://scarymonsterexample.com’,
‘Origin’: ‘ https://scarymonsterexample.com’,
‘credentials’: True,
‘error’: False,
‘misconfigured’: True,
‘status_code’: 200,
‘sub-domain’: ‘Access-Control-Allow-Origin’: ‘https://scarymonster.example.com’,
‘Origin’: ‘https://scarymonster.example.com’,
‘credentials’: True,
‘error’: False,
‘misconfigured’: True,
‘status_code’: 200,
‘url’: ‘https://example.com/’,
‘verb’: ‘GET’],
‘Sumario’: ‘Error’: [], ‘configurado incorrectamente’: [‘credentials’: True,
‘misconfigured_test’: [‘fake_origin’,
‘sub-domain’,
‘pre-domain’,
‘post-domain’],
‘status_code’: 200,
‘url’: ‘https://dominio.com’,
‘Verbo’: ‘OBTENER’]
CLI
Se instala una CLI como parte de la instalación del paquete pip. La sintaxis a ejecutar es la futuro:
Corsarios ARCHIVO [-nv/–noverify][-r/–report]
La CLI necesita un archivo JSON con una tira de requisitos que realizarán el escaneo. Se proporciona un archivo de muestra como parte de las pruebas:
[
“verb”: “GET”,
“url”: “https://example.com/”,
“params”: “user=user1&password=1234”,
“headers”:
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8″,
“Accept-Language”: “en-GB,en;q=0.5”,
“Connection”: “keep-alive”,
“Upgrade-Insecure-Requests”: “1”,
“Origin”: “https://example.com”,
“Host”: “example.com”
]
Incluso hay dos parámetros opcionales:
- -nv / –noverify: para excluir la fuerza del certificado cuando se prueba en un sitio con un certificado autofirmado
- -r / –report: cuidado el crónica como un archivo JSON
ejemplo
Calendario
- Divulgación de corsair_scan como aparejo CLI
- Observar datos de URL de un archivo de texto ✅
- Mejorar el formato del crónica