
स्वचालित CORS गलत कॉन्फ़िगरेशन स्कैनर जो वेब अनुप्रयोगों और API में Origin हेडर इंजेक्शन, वाइल्डकार्ड रिफ्लेक्शन और क्रेडेंशियल लीकेज का परीक्षण करता है।

Corsair_scan एक सुरक्षा उपकरण है जो क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS) के गलत कॉन्फ़िगरेशन का परीक्षण करता है। CORS एक ऐसा तंत्र है जो किसी वेब पेज पर प्रतिबंधित संसाधनों को उस डोमेन के अलावा किसी अन्य डोमेन से अनुरोध करने की अनुमति देता है जहाँ से पहला संसाधन प्रस्तुत किया गया था। यदि इसे ठीक से कॉन्फ़िगर नहीं किया गया है, तो अनधिकृत डोमेन उन संसाधनों तक पहुँच सकते हैं।
CORS एक HTTP-हेडर-आधारित तंत्र है जो एक सर्वर को अपने अलावा किसी अन्य ओरिजिन (डोमेन, स्कीम, या पोर्ट) को इंगित करने की अनुमति देता है जहाँ से एक ब्राउज़र को संसाधनों को लोड करने की अनुमति देनी चाहिए। यह नए HTTP हेडर जोड़कर काम करता है जो सर्वर को यह वर्णन करने देते हैं कि कौन से ओरिजिन को वेब ब्राउज़र से उस जानकारी को पढ़ने की अनुमति है।
CORS एक ऐसे तंत्र पर भी निर्भर करता है जिसके द्वारा ब्राउज़र क्रॉस-ओरिजिन संसाधन को होस्ट करने वाले सर्वर पर एक "प्रीफ़्लाइट" अनुरोध करते हैं, ताकि यह जाँच की जा सके कि सर्वर वास्तविक अनुरोध की अनुमति देगा या नहीं। उस प्रीफ़्लाइट में, ब्राउज़र हेडर भेजता है जो HTTP विधि और हेडर को इंगित करते हैं जो वास्तविक अनुरोध में उपयोग किए जाएँगे।
CORS को लागू करते समय सबसे आम और समस्याग्रस्त सुरक्षा मुद्दा अनुरोधकर्ताओं को मान्य/व्हाइटलिस्ट करने में विफलता है। अक्सर, हम Access-Control-Allow-Origin के लिए मान '*' पर सेट देखते हैं।
दुर्भाग्य से, यह डिफ़ॉल्ट है और इस तरह वेब पर किसी भी डोमेन को उस साइट के संसाधनों तक पहुँचने की अनुमति देता है।
OWASP एप्लिकेशन सुरक्षा सत्यापन मानक (ASVS) के अनुसार, आवश्यकता 14.5.3 में कहा गया है
Verify that the Cross-Origin Resource Sharing (CORS) Access-Control-Allow-Origin header uses a strict allow list of trusted domains and subdomains to match against and does not support the "null" origin.
Corsair_scan एक अनुरोध (या अनुरोधों की सूची) को पैरामीटर के रूप में प्राप्त करके और फिर Origin हेडर में एक मान इंजेक्ट करके काम करता है। इस अनुरोध के प्रतिक्रिया में Access-Control-Allow-Origin हेडर की सामग्री के आधार पर, हम यह सुनिश्चित कर सकते हैं कि CORS कॉन्फ़िगरेशन सही है या नहीं। तीन परिदृश्य हैं जो इंगित करते हैं कि CORS गलत कॉन्फ़िगर किया गया है:
यदि CORS गलत कॉन्फ़िगर पाया जाता है, तो हम जाँचते हैं कि प्रतिक्रिया में Access-Control-Allow-Credentials हेडर है या नहीं, जिसका अर्थ है कि सर्वर क्रॉस-ओरिजिन अनुरोधों पर क्रेडेंशियल्स को शामिल करने की अनुमति देता है।
अक्सर, CORS कॉन्फ़िगरेशन वाइल्डकार्ड का उपयोग करते हैं, उदाहरण के लिए * example.com * के अंतर्गत कुछ भी स्वीकार करना। इसका मतलब है कि डोमेन domain.com.evil.com स्वीकार किया जाएगा क्योंकि यह दिए गए regex से मेल खाता है। इससे निपटने के लिए, corsair_scan चार परिदृश्यों का परीक्षण करता है:
यह प्रोजेक्ट Python 3.9 के साथ विकसित किया गया था, लेकिन Python 3.x के किसी भी संस्करण के साथ काम करना चाहिए। इसे स्थापित करने का सबसे अच्छा तरीका pip का उपयोग करना है।
pip3 install corsair_scan --user
Corsair का उपयोग पायथन मॉड्यूल या CLI दोनों के रूप में किया जा सकता है।
CORS स्कैन करने वाली विधि corsair_scan है। यहाँ इसकी परिभाषा है:
अनुरोधों की एक सूची और अनुरोध में प्रमाणपत्र जाँच को सक्षम/अक्षम करने के लिए एक पैरामीटर प्राप्त करता है
इनपुट:
data [List]: अनुरोधों की एक सूची। प्रत्येक अनुरोध एक शब्दकोश है जिसमें अनुरोध के लिए प्रासंगिक डेटा होता है:
verify [Boolean] [Default: True]: प्रत्येक अनुरोध के लिए यह मान corsair_scan_single_url को भेजता है
आउटपुट:
import corsair_scan.corsair_scan as corsair
url_data = {}
data = []
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'}
url_data['verb'] = verb
url_data['url'] = url
url_data['params'] = params
url_data['headers'] = headers
data.append(url_data)
print (corsair.corsair_scan(data, verify=True))
प्रतिक्रिया:
{'report': [{'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'}],
'summary': {'error': [], 'misconfigured': [{'credentials': True,
'misconfigured_test': ['fake_origin',
'sub-domain',
'pre-domain',
'post-domain'],
'status_code': 200,
'url': 'https://domain.com',
'verb': 'GET'}]}}
pip पैकेज स्थापना के भाग के रूप में, एक CLI स्थापित होता है। निष्पादित करने का सिंटैक्स इस प्रकार है:
corsair FILE [-nv/--noverify][-r/--report]
CLI को स्कैन करने के लिए अनुरोधों की सूची वाली एक json फ़ाइल की आवश्यकता होती है। एक उदाहरण फ़ाइल परीक्षणों के भाग के रूप में प्रदान की गई है
:
[{
"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"
}
}]
दो वैकल्पिक पैरामीटर भी हैं:

Corsair_scan को Santander UK की सुरक्षा इंजीनियरिंग टीम द्वारा विकसित किया गया था, जो हैं: