
हल्का CLI टूल, जो वेब एप्लिकेशन, API और आधुनिक सेवाओं में व्यवस्थित रूप से रेस कंडीशन (Race Conditions) का पता लगाने और उनका शोषण करने के लिए डिज़ाइन किया गया है।
रेस कंडीशन आधुनिक अनुप्रयोगों में सबसे अधिक प्रभाव वाली सुरक्षा कमजोरियों में से एक हैं, फिर भी स्वचालित स्कैनर इन्हें कम ही पकड़ पाते हैं। जहाँ Nuclei, ffuf और sqlmap जैसे उपकरण स्थैतिक कमजोरियों का पता लगाने में उत्कृष्ट हैं, वे मूल रूप से समवर्तीता-आधारित समस्याओं के प्रति अंधे हैं।
पेंटेस्टर्स आज एक विकल्प का सामना करते हैं: प्रत्येक एंगेजमेंट के लिए मैन्युअल रूप से डिस्पोजेबल स्क्रिप्ट लिखें, या रेस कंडीशन परीक्षण को पूरी तरह से छोड़ दें। दोनों ही विकल्प स्केलेबल या पेशेवर नहीं हैं।
RatRace इसका समाधान करता है रेस कंडीशन परीक्षण के लिए एक पॉलिश, दोहराए जाने योग्य वर्कफ़्लो प्रदान करके—जो पहले एड-हॉक स्क्रिप्टिंग था, उसे एक व्यवस्थित प्रक्रिया में बदलता है जो CI/CD पाइपलाइनों के साथ एकीकृत होती है और पेशेवर रिपोर्ट उत्पन्न करती है।
रेस कंडीशन कमजोरियाँ अक्सर उच्च-प्रभाव वाले क्षेत्रों में दिखाई देती हैं:
ये बग बग बाउंटी प्रोग्रामों में लगातार सबसे अधिक बाउंटी अर्जित करते हैं क्योंकि ये सीधे व्यावसायिक राजस्व और ग्राहक विश्वास को खतरे में डालते हैं।
एक बार YAML में रेस परिदृश्यों को परिभाषित करें, परियोजनाओं में पुन: उपयोग करें। फ़ॉर्मेट परिचितता के लिए Nuclei टेम्पलेट्स को दर्शाता है:
id: checkout-race
info:
name: Checkout Duplicate Order Race
severity: critical
race:
mode: burst
concurrency: 20
request:
method: POST
path: /api/v1/checkout
headers:
Authorization: "Bearer {{session}}"
body: '{"item_id": "SKU-001"}'
validate:
follow_up:
method: GET
path: /api/v1/orders?user={{user_id}}
expect:
json_field: "orders.length"
condition: equals
value: 1
बर्स्ट मोड — सटीक सिंक्रोनाइज़ेशन के साथ गोरूटीन-आधारित समानांतर अनुरोध (स्थिर, उत्पादन-तैयार)
5ms रेस विंडो वाले अधिकांश अनुप्रयोगों के लिए आदर्श
लास्ट-बाइट सिंक — HTTP/1.1 TCP-स्तरीय आक्रमण (कार्यान्वयन तैयार, परीक्षण चरण)
सिंगल-पैकेट — HTTP/2 फ्रेम-आधारित आक्रमण (कार्यान्वयन तैयार, परीक्षण चरण)
RatRace स्वचालित रूप से:
equals, not_equals, greater_than, containsमौजूदा अनुरोध आयात करें:
# curl कमांड से
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o template.yaml
# Burp निर्यातित HAR फ़ाइलों से
ratrace import --har session.har -o template.yaml
CI/CD स्वचालन:
ratrace race -u $TARGET -t template.yaml --silent
echo $? # एग्जिट कोड 10 = रेस मिली, 0 = साफ
पेशेवर रिपोर्टिंग:
# स्वचालन के लिए JSON
ratrace race -u $TARGET -t template.yaml -o results/
# HTML रिपोर्ट (योजित V2)
ratrace report --input results.json --format html
git clone https://github.com/bogdanticu88/ratrace.git
cd ratrace
go build ./cmd/ratrace
./ratrace --help
आवश्यकताएँ: Go 1.24+
docker build -t ratrace:latest .
docker run --rm -it ratrace:latest race -u https://api.example.com -t template.yaml
# 1. curl से आयात करें या मौजूदा टेम्पलेट का उपयोग करें
ratrace import --curl 'curl -X POST https://api.example.com/checkout ...' -o checkout.yaml
# 2. रेस निष्पादित करें
ratrace race -u https://api.example.com -t checkout.yaml -m burst -c 20
# 3. निष्कर्षों की समीक्षा करें
# आउटपुट दिखाता है:
# 🔴 [CRITICAL] Checkout Duplicate Order Race
# Anomaly Rate: 91.7%
# Confidence: 84%
ratrace race \
-u https://shop.example.com \
-t examples/templates/checkout-race.yaml \
-m burst \
-c 25 \
--output results/
# वर्बोज़ लॉग के बिना चलता है, सिमैंटिक कोड के साथ बाहर निकलता है
ratrace race -u https://api.example.com -t template.yaml --silent
# एग्जिट कोड जांचें
if [ $? -eq 10 ]; then
echo "रेस कंडीशन मिली!"
exit 1
fi
ratrace race -u <url> -t <template> [options]
Options:
-m, --mode string burst|lastbyte|singlepacket (टेम्पलेट से डिफ़ॉल्ट)
-c, --concurrency int गोरूटीन गणना (डिफ़ॉल्ट 20)
-H, --header strings कस्टम हेडर (दोहराने योग्य)
-x, --proxy string अनुरोधों के लिए प्रॉक्सी URL
-o, --output string परिणामों के लिए आउटपुट निर्देशिका
--timeout duration अनुरोध टाइमआउट (डिफ़ॉल्ट 10s)
--insecure TLS प्रमाणपत्र सत्यापन छोड़ें
--dry-run टेम्पलेट पार्स करें और बाहर निकलें
--silent लॉग दबाएँ, केवल निष्कर्ष दिखाएँ
ratrace import [--curl <command> | --har <file>] -o <output.yaml>
मौजूदा अनुरोधों (curl कमांड या HAR निर्यात) को RatRace टेम्पलेट्स में बदलता है।
मौजूदा वर्कफ़्लो के साथ एकीकृत करने के लिए उपयोगी।
ratrace report --input results.json --format [html|json] --output report.html
रेस टेस्ट परिणामों से मानव-पठनीय रिपोर्ट उत्पन्न करता है।
ratrace ratelimit -u <url> -c <concurrency>
परीक्षण करता है कि क्या एंडपॉइंट समवर्ती दर सीमा बायपास के लिए कमजोर हैं।
टेम्पलेट YAML फ़ाइलें हैं जो एक रेस परिदृश्य को परिभाषित करती हैं। पूर्ण संदर्भ:
id: unique-identifier
info:
name: "मानव-पठनीय नाम"
severity: critical|high|medium|low|info
tags: [tag1, tag2]
race:
mode: burst|lastbyte|singlepacket
concurrency: 20
request:
method: POST|GET|PUT|DELETE|PATCH
path: /api/endpoint
headers:
Authorization: "Bearer {{token}}"
Custom-Header: "value"
body: '{"json": "body", "user": "{{user_id}}"}'
validate:
follow_up:
method: GET
path: /api/orders?user={{user_id}}
expect:
json_field: "orders.length"
condition: equals|greater_than|contains|not_equals
value: 1
चर ({{name}} प्लेसहोल्डर का उपयोग करें):
ratrace race ... -H "Authorization: Bearer {{session_token}}"स्वच्छ, रंग-कोडित लॉगिंग परीक्षण प्रगति दिखाती है:
[INF] Loading template path=checkout-race.yaml
[INF] Template loaded id=checkout-race mode=burst
[RUN] Firing burst attack concurrency=20
[INF] All requests completed total=20
[RUN] Clustering responses baseline=17 anomalous=3
[RACE] Race condition detected anomaly_rate=15% confidence=94%
[CONF] Validation passed field=orders.length expected=1
[INF] Race test complete findings=1
Templates: 1 Requests: 20 Time: 3.2s
🔴 [CRITICAL] Checkout Duplicate Order Race
Anomaly Rate: 15.0%
Confidence: 94%
Status Diff: 201 → 200
Field Diffs: order_id (100 → 101)
पूर्ण परिणाम स्वचालन और संग्रह के लिए results_<timestamp>.json में सहेजे जाते हैं:
{
"TemplateID": "checkout-race",
"Target": "https://api.example.com/api/v1/checkout",
"Mode": "burst",
"Concurrency": 20,
"TotalRequests": 20,
"Duration": 3200000000,
"Findings": [
{
"TemplateName": "Checkout Duplicate Order Race",
"Severity": "critical",
"AnomalyRate": 0.15,
"Confidence": 0.94,
"Diff": {
"StatusChanged": true,
"BaselineStatus": 201,
"AnomalousStatus": 200
}
}
]
}
CI/CD एकीकरण और स्वचालन के लिए उपयोग किया जाता है:
make build # बाइनरी संकलित करें
make test # सभी परीक्षण
make test-unit # केवल यूनिट परीक्षण
make test-int # एकीकरण परीक्षण
make coverage # कवरेज रिपोर्ट (HTML)
make lint # लिंटर चलाएँ
make run-race # बिल्ड करें और उदाहरण चलाएँ
cmd/ratrace/
└── main.go प्रवेश बिंदु, CLI परिभाषा
internal/
├── cmd/ उप-कमांड कार्यान्वयन
├── engine/ रेस आक्रमण मोड (burst, lastbyte, singlepacket)
├── validator/ प्रतिक्रिया क्लस्टरिंग, अंतर, अनुवर्ती जाँच
├── importer/ HAR और curl पार्सर
├── reporter/ JSON और HTML आउटपुट
├── template/ YAML पार्सिंग और टेम्पलेटिंग
├── log/ संरचित रंग लॉगिंग
└── models/ साझा डेटा प्रकार
मुद्दे, PR और टेम्पलेट योगदान का स्वागत है। कृपया सुनिश्चित करें:
make testmake lintMIT
RatRace अधिकृत सुरक्षा परीक्षण, बग बाउंटी प्रोग्राम और पेनिट्रेशन परीक्षणों के लिए डिज़ाइन किया गया है। केवल उन प्रणालियों पर उपयोग करें जिनके आप मालिक हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति है। दूसरों की प्रणालियों का अनधिकृत परीक्षण अवैध है।
Bogdan Ticu — सुरक्षा अनुसंधान और इंजीनियरिंग
मुद्दों, प्रश्नों या सुरक्षा रिपोर्ट के लिए: GitHub Issues
| कोड | अर्थ |
|---|
| 0 | सफलता — कोई रेस कंडीशन नहीं मिली |
| 3 | डेटा त्रुटि — टेम्पलेट नहीं मिला, पार्स त्रुटि |
| 4 | निष्पादन त्रुटि — नेटवर्क विफलता, इंजन त्रुटि |
| 10 | रेस कंडीशन मिली — कार्रवाई आवश्यक |
| 11 | दर सीमा बायपास की पुष्टि हुई |
| 12 | विसंगति का पता चला लेकिन सत्यापन अनिर्णायक |