Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Kestra-cve-2026-53576 — CVE-2026-53576 का एंड-टू-एंड पुनरुत्पादन और क्रॉस-लेयर डिटेक्शन, जो Kestra में अनऑथेंटिकेटेड RCE है — इसे बेस PoC से आगे ले जाकर यह दिखाया गया है कि कैसे एक सामान्य Docker-socket मिसकॉन्फ़िगरेशन container-root को पूर्ण host compromise में बदल देता है। | Kitploit
उपकरण/GitHubGitHub/atlasvector/kestra-cve-2026-53576
विशेषाधिकार वृद्धिकंटेनर सुरक्षास्थायित्व तंत्रभेद्यता विश्लेषणशोषणपोस्ट-शोषणपेनिट्रेशन टेस्टिंगपेपर और शोधरेड टीमिंग

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
घटना प्रतिक्रिया
लैब और अभ्यास
GitHubatlasvector/kestra-cve-2026-53576

Kestra-cve-2026-53576

CVE-2026-53576 का एंड-टू-एंड पुनरुत्पादन और क्रॉस-लेयर डिटेक्शन, जो Kestra में अनऑथेंटिकेटेड RCE है — इसे बेस PoC से आगे ले जाकर यह दिखाया गया है कि कैसे एक सामान्य Docker-socket मिसकॉन्फ़िगरेशन container-root को पूर्ण host compromise में बदल देता है।

रिपॉजिटरी देखें
2 दिन पहलेअभी तक समीक्षित नहीं

Kestra में ट्रेलिंग-पाथ ऑथ बायपास के माध्यम से अनऑथेंटिकेटेड RCE (CVE-2026-53576)

विषय-सूची

  • कार्यकारी सारांश
  • 1. सारांश
  • 2. प्रभावित / ठीक किए गए संस्करण
  • 3. परीक्षण वातावरण और प्री-फ़्लाइट जाँच
  • 4. मूल कारण
  • 5. हमला अनुकरण
  • 6. डिटेक्शन इंजीनियरिंग
  • 7. ATT&CK मैपिंग
  • 8. उपचार और हार्डनिंग
  • 9. संदर्भ

कार्यकारी सारांश

Kestra, एक ओपन-सोर्स वर्कफ़्लो ऑर्केस्ट्रेशन प्लेटफ़ॉर्म, ने एक ऑथेंटिकेशन फ़िल्टर भेजा जो यह तय करता था कि किसी अनुरोध को क्रेडेंशियल्स की आवश्यकता है या नहीं, यह जाँच करके कि URL /configs पर समाप्त होता है या नहीं - यह जाँच एक हानिरहित सार्वजनिक एंडपॉइंट को उजागर करने के लिए थी।

चूँकि जाँच केवल स्ट्रिंग के अंत को देखती थी, कोई भी अनुरोध जिसका URL उस तरह से समाप्त होता था, ऑथेंटिकेशन को पूरी तरह से छोड़ देता था, जिसमें वे एंडपॉइंट भी शामिल थे जो मनमाना कोड बनाते और चलाते हैं। परिणाम: कोई भी व्यक्ति जो नेटवर्क पर एक कमज़ोर Kestra इंस्टेंस तक पहुँच सकता है, शून्य क्रेडेंशियल्स के साथ root के रूप में कमांड चला सकता है, कोई फ़िशिंग नहीं, कोई पासवर्ड अनुमान नहीं, कोई विशेषाधिकार वृद्धि चरण आवश्यक नहीं।

इस अभ्यास में, उस एकल अंतराल को एक स्व-होस्टेड लैब इंस्टेंस के विरुद्ध शुरू से अंत तक निभाया गया:

  • अनऑथेंटिकेटेड कोड निष्पादन।
  • एक उजागर Docker सॉकेट की खोज।
  • अंतर्निहित होस्ट पर पूर्ण root पहुँच तक वृद्धि।
  • दो स्वतंत्र दृढ़ता तंत्र (एक SSH बैकडोर कुंजी और एक शेड्यूल्ड बीकन)।

प्रत्येक चरण को रक्षात्मक टेलीमेट्री (नेटवर्क IDS, होस्ट रनटाइम सुरक्षा, Linux ऑडिट, और सिस्टम लॉग) के विरुद्ध कैप्चर किया गया।

यदि अनपैच्ड छोड़ा जाए तो व्यावसायिक प्रभाव: Kestra चलाने वाले होस्ट का पूर्ण समझौता, केवल एप्लिकेशन का नहीं - और विस्तार से उस होस्ट से पहुँचने योग्य किसी भी अन्य चीज़ का भी।

समाधान: Kestra 1.0.45 / 1.3.21 या बाद के संस्करण में अपग्रेड करें (अकेला पैच प्राथमिक भेद्यता को बंद कर देता है; वृद्धि और दृढ़ता के चरणों के लिए एक अलग, स्वतंत्र समाधान की आवश्यकता होती है - Docker सॉकेट को एप्लिकेशन कंटेनरों में माउंट न करें, अनुभाग 8 देखें)।

1. सारांश

यह रिपोर्ट CVE-2026-53576 का दस्तावेज़ीकरण करती है, जो Kestra ≤1.3.20 में एक CVSS 10.0 अनऑथेंटिकेटेड रिमोट कोड निष्पादन भेद्यता है, जो एक पाथ-सफ़िक्स ऑथेंटिकेशन बायपास (AuthenticationFilter.java, endsWith("/configs")) के कारण होती है।

एक हमलावर जो किसी वर्कफ़्लो का नेमस्पेस और ID configs नाम देता है, बिना क्रेडेंशियल्स के, Kestra कंटेनर के अंदर root के रूप में मनमाना शेल कमांड बना और चला सकता है। 1.0.45 और 1.3.21 में ठीक किया गया। यही बग स्वतंत्र रूप से CVE-2026-49869 के अंतर्गत भी रिपोर्ट किया गया था, जो CISA KEV-सूचीबद्ध संख्या है जो वास्तविक इन-द-वाइल्ड शोषण से जुड़ी है। दोनों को एक साथ उद्धृत किया जाना चाहिए, क्योंकि सार्वजनिक स्रोत और स्कैनर या तो किसी एक का संदर्भ दे सकते हैं।

2. प्रभावित / ठीक किए गए संस्करण

कमज़ोरKestra ≤ 1.3.20 (और 1.0.x लाइन पर pre-1.0.45)
ठीक किया गया1.0.45 / 1.3.21+
CVECVE-2026-53576
जुड़वाँ सलाहCVE-2026-49869 - वही बग, CISA KEV-सूचीबद्ध (इन-द-वाइल्ड)

समयरेखा

दिनांकघटना
2026-06-02Kestra 1.3.21 जारी; चेंजलॉग "ऑथेंटिकेशन फ़िल्टर में संभावित ऑथेंटिकेशन बायपास" का संदर्भ देता है
2026-06-03Kestra 1.0.45 1.0.x लाइन पर जारी
2026-09-02CVE-2026-49869 (जुड़वाँ सलाह) CISA KEV कैटलॉग में जोड़ा गया
2026-09-22 से 09-24यह लैब प्रतिकृति, डिटेक्शन बिल्ड, और क्रॉस-लेयर सत्यापन

3. परीक्षण वातावरण और प्री-फ़्लाइट जाँच

स्व-होस्टेड होमलैब: - Debian होस्ट (होस्टनाम docker, कर्नेल 6.12.107+deb13-amd64), - Docker Engine 29.8.1। - Kestra आधिकारिक kestra/kestra:v1.3.20 इमेज के रूप में तैनात, kestra.int.atlasvec.com पर एक Caddy रिवर्स प्रॉक्सी के माध्यम से पहुँच योग्य। - परीक्षण के अंतर्गत टेलीमेट्री स्टैक: Falco (रनटाइम/eBPF, होस्ट-स्तर), - Suricata 8.0.3 IDS (निष्क्रिय SPAN मिरर), Splunk की ओर अग्रेषित।

कुछ भी छूने से पहले, मैंने पुष्टि की कि लक्ष्य वास्तव में कमज़ोर था और टेलीमेट्री स्टैक सक्रिय था। मैंने हमले-पूर्व स्थिति का स्नैपशॉट भी लिया ताकि काम पूरा होने पर मैं वापस लौट सकूँ।

Kestra कमज़ोर संस्करण चला रहा है: 01-kestra-version-v1.3.20

कंटेनर स्वयं, चालू और पहुँच योग्य: 06-docker-kestra-running

होस्ट पर लोड किए गए Falco के यूनिट: 02-falco-units-one-active

Falco सक्रिय रूप से इवेंट उत्सर्जित कर रहा है (आधुनिक eBPF मोड): 03-falco-modern-bpf-active-emitting

Suricata की सेवा सक्रिय: 04-suricata-systemctl-active

और इसका eve.json लाइव इवेंट लिख रहा है: 05-suricata-eve-json-live

4. मूल कारण

यह दो गलतियाँ हैं जो एक साथ मिलती हैं, एक नहीं।

पहला, ऑथेंटिकेशन फ़िल्टर यह तय करता है कि कोई अनुरोध ऑथ को छोड़ सकता है या नहीं, यह अनुरोध पथ के अंत से मिलान करके करता है:```java // AuthenticationFilter.java — the vulnerable check, confirmed against the self-hosted v1.3.20 source if (path.endsWith("/configs")) { // treated as a public, unauthenticated path }

root@kitploit:~
यह जाँच एक हानिरहित एंडपॉइंट, सार्वजनिक इंस्टेंस कॉन्फ़िग को उजागर करने के लिए मौजूद है। चूँकि `endsWith` केवल स्ट्रिंग के अंत को पढ़ता है, यह एक सुरक्षित पथ को किसी अन्य पथ से अलग नहीं बता सकता जो संयोगवश उसी तरह समाप्त होता है।

दूसरा, Kestra का राउटर अभी भी उन मिलते-जुलते पथों को उनके वास्तविक, संवेदनशील हैंडलरों तक पहुँचाता है। `/api/v1/main/flows/configs` फ़्लो-क्रिएट हैंडलर तक पहुँचता है। `/api/v1/main/executions/configs/configs` एक्ज़ीक्यूशन हैंडलर तक पहुँचता है। फ़िल्टर दोनों को सार्वजनिक के रूप में पास कर देता है, और राउटर उन्हें वैसे भी चलाता है। किसी फ़्लो के namespace और ID को `configs` नाम दें, और एक कोड-निष्पादक एंडपॉइंट अब `/configs` पर समाप्त होता है, इसलिए यह सार्वजनिक पथ के मुफ़्त पास को विरासत में ले लेता है।

कैप्चर किया गया अनुरोध युग्म इसे स्पष्ट रूप से दिखाता है। बिना क्रेडेंशियल के `GET /api/v1/main/flows/search` `401` लौटाता है। उसी खाली auth हेडर के साथ `POST /api/v1/main/flows/configs` `200` लौटाता है और फ़्लो को संग्रहीत करता है (§5.1 देखें)।

## 5. हमला सिमुलेशन

> नीचे दिया गया प्रत्येक चरण अपने स्वयं के स्क्रीनशॉट के साथ कैप्चर किया गया है। यह सब मेरे अपने पृथक homelab के अंदर, रिवर्स प्रॉक्सी के पीछे स्व-होस्टेड Kestra इंस्टेंस के विरुद्ध चलता है।

### 5.1 चरण 1 - auth bypass -> Kestra कंटेनर के अंदर root

**नियंत्रण :** बिना क्रेडेंशियल के `GET /api/v1/main/flows/search` → `401 Unauthorized`। 
पुष्टि करता है कि सामान्य रूट पर auth लागू है।
![01-burp-control-401](https://assets.kitploit.com/production/public/readmes/56348/2a6d266e96b2b4e09bc32c0ccf3609159eaf5bacdc204989d5572211e616e6ff/8a8bab993fd7ba08656d03ad85822001996be4c391de87c535751cc9e14542a1-display-v1.webp)
_____

**रोपण :** बिना auth हेडर के `POST /api/v1/main/flows/configs` भेजना। बॉडी एक फ़्लो YAML है जिसका `namespace` और `flow id` दोनों `configs` हैं, जिसमें एक Commands टास्क है जो Process टास्क रनर का उपयोग करता है। सर्वर `200 OK` लौटाता है और फ़्लो को संग्रहीत करता है। अन्यथा संरक्षित रूट पर `/configs` प्रत्यय ही बायपास को ट्रिगर करता है **(धारा 4 देखें)।**
![02-burp-plant-flow-200](https://assets.kitploit.com/production/public/readmes/56348/5d2a2db2d70e9d60e7136c765a7a85f4d8b684ea945da5b84e84d85a2b05a151/1ee6d8f7efd58d22ef41b536f32acbbdd417d68ac030ed28e2d06f9d6d4ccb93-display-v1.webp)
**सुनें और प्रतीक्षा करें** : परीक्षण उद्देश्यों के लिए nc का उपयोग करके सरल लिसनर शुरू करना, ताकि हम रिवर्स शेल को पकड़ सकें।

![03-kali-listener-4444](https://assets.kitploit.com/production/public/readmes/56348/88d7d3516aaeef900bbb9b372d9006323a3d7391078b693124ee24710da557ac/aa9806454d3742b7e958611a5c6ed2d3dfb3072eec3c14e4bb3f050a41220803-display-v1.webp)




**ट्रिगर / निष्पादन** `POST /api/v1/main/executions/configs/configs`, बिना auth हेडर → `200 OK`, नया एक्ज़ीक्यूशन बनाया गया।
![04-burp-execute-200](https://assets.kitploit.com/production/public/readmes/56348/e70d1cd38f3825dca36c25e722bdfcf4a7614b1402fe1b6d0ccebdf992738bbe/9a394373a293d22ef55e3b6ee32eae6991feac73a5ccbc7909536bdf3435172d-display-v1.webp)

**BaaaaM :** हमने शेल पॉप कर लिया है, लेकिन याद रखें - हम "पृथक" हैं, `root` **लेकिन** Kestra docker कंटेनर के अंदर, इसलिए हमें यहाँ से "निकलने" में सक्षम "नहीं" होना चाहिए। "**खैर, मैंने यही सोचा था**"
![05-kali-revshell-container](https://assets.kitploit.com/production/public/readmes/56348/97257430abd2415f37f12c790a738d73e12f0c2509c193b1b7d24545453a1a70/9880399e445d4b8b602c1f381bbd8523a83c8c3c097b9a919e2b1871c7f1129e-display-v1.webp)


टास्क का कमांड Kestra JVM प्रक्रिया के सीधे चाइल्ड के रूप में चलता है, जिसकी पुष्टि होस्ट-साइड प्रक्रिया ट्री के माध्यम से होती है, और Kestra के स्वयं के एक्ज़ीक्यूशन लॉग के अनुसार सफलतापूर्वक पूर्ण होता है।

**Kestra का लॉग्स डैशबोर्ड**
![06-kestra-ui-pwn-log](https://assets.kitploit.com/production/public/readmes/56348/b447d0d268daa119b1d64a9d7d95a588b80a7cb228613b81a6bfd69777aea7bb/467a61936f8779b533cc83a297d651957e17f9d00241ff97cc7640df917450fe-display-v1.webp)


**Kestra का प्रक्रिया ट्री**
![07-kestra-process-tree](https://assets.kitploit.com/production/public/readmes/56348/a7e20df484e1c5759fca4f5e403bc280ffc45b03b47dae22804321bb8398858c/0a0e30aa6c0537adf8ddd204453c8d51e808de2d5ff764fc5ad8f551cf059665-display-v1.webp)

**परिणाम:** Kestra कंटेनर के अंदर root के रूप में अनधिकृत रिमोट कोड निष्पादन। यह **CVE-2026-53576** का पूर्ण, स्व-निहित प्रमाण है।


### 5.2 चरण 2 - उजागर Docker सॉकेट के माध्यम से एस्केलेशन (homelab-विशिष्ट, CVE का हिस्सा नहीं)

चरण 1 शेल से, `/var/run/docker.sock` कंटेनर में माउंट किया हुआ पाया गया - एक Docker-outside-of-Docker (DooD) पैटर्न, जो सामान्य है जब Kestra का स्वयं का `Docker` टास्क रनर कॉन्फ़िगर किया जाता है, क्योंकि इसे बात करने के लिए एक डेमॉन की आवश्यकता होती है।

उस सॉकेट तक पहुँचना ही होस्ट **root** के बराबर है: Docker API एक क्लाइंट को उन कंटेनरों के लिए मनमाने होस्ट बाइंड माउंट और होस्ट PID/नेटवर्क नेमस्पेस कॉन्फ़िगर करने देता है जिन्हें वह स्पॉन करता है, और सॉकेट के पीछे का डेमॉन पहले से ही होस्ट पर root के रूप में चलता है।

यह कर्नेल या कंटेनर-एस्केप एक्सप्लॉइट नहीं है - यह Docker API वही कर रहा है जो करने के लिए इसे डिज़ाइन किया गया है, ऐसी जगह से पहुँचा गया जहाँ से इसे पहुँच योग्य नहीं होना चाहिए था।

सॉकेट का उपयोग करके, मैंने होस्ट फ़ाइलसिस्टम को बाइंड करके और होस्ट PID और नेटवर्क नेमस्पेस के साथ एक सहोदर कंटेनर बनाया, फिर उसे शुरू किया।

**नोट:** परीक्षण के दौरान एक दूसरा, अधिक शांत प्रकार भी सामने आया, हालाँकि मैंने इसे अलग से स्क्रीनशॉट नहीं लिया। हमेशा एक नया सहोदर कंटेनर बनाने के बजाय, वही सॉकेट एक्सेस आपको पहले से चल रहे कंटेनर के विरुद्ध `POST /containers/{id}/exec` चलाने देता है, इसलिए कोई कंटेनर-क्रिएट इवेंट बिल्कुल नहीं होता। इस Docker होस्ट पर मेरे पास Kestra और Portainer दोनों हैं, जिनमें से किसी का भी उपयोग मैं उसी एस्केप के लिए कर सकता हूँ। यह डिटेक्शन के लिए मायने रखता है: नया विशेषाधिकार प्राप्त कंटेनर बनाए जाने पर केंद्रित कोई भी नियम इस प्रकार को चूक जाता है।

root की पुष्टि करना और सॉकेट को वहाँ पड़ा हुआ, किसी भी प्रतिबंध से अनमाउंटेड पाना:
![08-docker-socket-present](https://assets.kitploit.com/production/public/readmes/56348/d2a34fd7db05bb2966a540410dbc8e76cfec416a545786349372984902b128f9/ca3ce180476010ee482b60c42687751f27a072aa2c0b78fbb6400b8406cee5e5-display-v1.webp)

जाँचना कि Docker डेमॉन वास्तव में सॉकेट के माध्यम से पहुँच योग्य है:
![09-docker-api-version](https://assets.kitploit.com/production/public/readmes/56348/7ce4365a9c48db827aa3c6e53c73622bef0ee7a99f530b5e37a065601b3892b0/d6debd41ca945cd5812add55df46cc5dd2f7bbaba1c88965f438ee7d5c9a4bcc-display-v1.webp)

सूचीबद्ध करना कि कौन सी इमेज पहले से लोकल हैं, ताकि मुझे कुछ भी पुल करने की आवश्यकता न हो:
![10-docker-images-enum](https://assets.kitploit.com/production/public/readmes/56348/aa1ff3ff76e92437899afc7b603925eeb53838f99f4d8586df69f8a96ff23622/34cd26942854c4c4bf59135beb54cac278aaad304faac4a3f5b64bec9e1a84de-display-v1.webp)

पहला प्रयास: होस्ट फ़ाइलसिस्टम को बाइंड करके एक विशेषाधिकार प्राप्त कंटेनर:
![11-docker-create-privileged](https://assets.kitploit.com/production/public/readmes/56348/38f4f42a486e3f46f4d798e131b3eb3bd58a7e7507b7a9e88845ed52ee32bd29/673b8ab3de93e21c6fbe23b343c4cd7fc4ddac11554ad56c0d656e2ae46467dd-display-v1.webp)

दूसरा प्रयास, इस बार होस्ट PID और नेटवर्क नेमस्पेस जोड़ना:
![12-docker-create-hostns](https://assets.kitploit.com/production/public/readmes/56348/f2a5c239adbabc9b3cef7f24d2ff60b49765bfec2ec231520d18edbcaec597cb/c387405779506f4d5e8f30715d359550b69d2c1a899525b293e8b69ce61c6e73-display-v1.webp)

तीसरा प्रयास, सीधे माउंटेड होस्ट फ़ाइलसिस्टम में chroot करना:
![13-docker-create-chroot](https://assets.kitploit.com/production/public/readmes/56348/dc38f66a291764a224f2982d22b9ca3cb37bdb31d39c48344b8030448f452e41/23519a1a158885f8b9b5691ffab18ef6eb1b5c989af00bf7c4caf6fe58ee7176-display-v1.webp)

लिसनर तैयार और उस पोर्ट पर प्रतीक्षा कर रहा है जिस पर एस्केप शेल कॉलबैक करेगा:
![14-host-listener-4491](https://assets.kitploit.com/production/public/readmes/56348/37b558192ffff02366b4d219e2393d1f9fe468e82555c90a236e2cf1bdd35aa7/116c772ff659ec661cad22e023a6179eb8ffd1ebf409624b4832a27a4e947626-display-v1.webp)

कंटेनर शुरू करना:
![15-docker-container-start](https://assets.kitploit.com/production/public/readmes/56348/277f7899c2fbb23d86a1918621f5efe79c635bd84af584811e98bdf37b7ab253/3f02d6a19613662df1b32fb8fa1bdbb03043f6b232844d2de3a23f552873103e-display-v1.webp)


**Root, लेकिन इस बार यह होस्ट है, कंटेनर नहीं:**
![16-host-root-id](https://assets.kitploit.com/production/public/readmes/56348/0a77d4e6c239354c2c79737c51f492005cf129af8c5a595614c1005c0a125405/02ed259073555446cd67e2ce2ab86c7408fb9c2e7864ce3daac8bc50fbd2db36-display-v1.webp)

कर्नेल संस्करण वास्तविक होस्ट से मेल खाता है, कंटेनर के पृथक दृश्य से नहीं:
![17-host-root-uname](https://assets.kitploit.com/production/public/readmes/56348/9f059686a831bfb8b5196412b9fd10492e8aeeb211dcb7d45fc98b3b6c0f999c/2c2dbd97e8c41b21085d9230d3b2ffb74f76c693947d9831007cff197fe3647d-display-v1.webp)


शेष सत्र के लिए एक उचित इंटरैक्टिव शेल में अपग्रेड करना:
![18-host-pty-upgrade](https://assets.kitploit.com/production/public/readmes/56348/34894e77c38df22cbbd807a14fd14b8e49aadc6f894d990e4022bc5b85978b62/0f81e4ed6fa6dfef8867eed194e7e4cdf12dc025b00c5763b2884530199c15d7-display-v1.webp)

### 5.3 चरण 3 - दृढ़ता, पुष्टि की गई फायरिंग

होस्ट-root शेल से मैंने दो स्वतंत्र दृढ़ता तंत्र स्थापित किए,

**पहला**, एक SSH कुंजी। मैंने जाँचा कि पहले से किसकी पहुँच थी :
![19-host-authkeys-enum](https://assets.kitploit.com/production/public/readmes/56348/553f3a2b399361ce652e836fab2525686519f44dee9d94d8b7c9d45b1b939d44/0a2c697dc0f216566dba1b4cb38f134ce23ff7b57bc40dc87032016a558e2668-display-v1.webp)

फिर sshd के स्वयं के कॉन्फ़िग में जाँचा कि कुछ भी नई कुंजी को अवरुद्ध करेगा या नहीं:
![20-host-sshd-config-enum](https://assets.kitploit.com/production/public/readmes/56348/a25dd7b5a8376e48cee6c75e64264fa973def1db09a9d7ea520b705e32021ef3/adbfee0a5f27442b43fa318a36ef281d5abc1d998c367f2e5978b11d8282677d-display-v1.webp)

हमलावर बॉक्स पर एक कीपेयर जनरेट किया:
![21-attacker-keygen](https://assets.kitploit.com/production/public/readmes/56348/4b560189f5ab37c619d941dfedadd77a4fa8a49420aa720eafd6fccc44f7f734/f90cf5f5b1ebb76fe1505b063ef844e17c9c7b8e9f21a2f92213eb36f9428dec-display-v1.webp)

पुष्टि की कि sshd वास्तव में सुन रहा था:
![22-host-sshd-active](https://assets.kitploit.com/production/public/readmes/56348/bd0ee4ae0a24f08b096c16eff66fd4ff87efccd92f1c1b509078d24f65af0e0f/78518194b025287cdf07b81a3335ea8b02239fcca6cbd2f32b507e28cc908cf9-display-v1.webp)

सार्वजनिक कुंजी को root के `authorized_keys` में डाला:
![23-host-authkeys-implant](https://assets.kitploit.com/production/public/readmes/56348/e2faba217e62433f6dcd9777fa85c8dcd24858ab1c6a2f5d1293515d744003bc/0c1ca3973a85e0ade63514eaa9ad4f3d0fd63f047dc7be19b112058f24632cfd-display-v1.webp)

और मेल खाती निजी कुंजी के साथ लॉग इन किया:
![24-ssh-root-login-proof](https://assets.kitploit.com/production/public/readmes/56348/14b698fb9eae32aff09e6ec7d179ecf1c2ef665d7b87be8d6f9fac956e68db2b/a2ced84629d34de099a598e38f71ba54411a890eaadb50a2dc8dd8dc099a6459-display-v1.webp)

**PS:** यह मूल RCE श्रृंखला से स्वतंत्र root एक्सेस है। भले ही Kestra को पैच कर दिया जाए, यह कुंजी अभी भी काम करती है।

**दूसरा**, एक cron बीकन। मैंने एक अंतराल पर चलने के लिए सेट एक root-स्तरीय कॉलबैक डाला, फिर यह देखने के लिए एक नए लिसनर के साथ परीक्षण किया कि यह वास्तव में निर्धारित समय पर फायर होता है या नहीं:
![25-host-cron-persist](https://assets.kitploit.com/production/public/readmes/56348/3dfa92072c55dd052127ef69943a6c43a855534420b286e0dbd62ce833dc441f/7a75828de1e323b44a4c792a2eed2713cf656433685deef7931026f815b2dd98-display-v1.webp)

**यह फायर हुआ। होस्ट पर एक दूसरा फुटहोल्ड, RCE और SSH कुंजी दोनों से स्वतंत्र।**


### 5.4 सत्यापित kill-chain टाइमलाइन।

नीचे दी गई टाइमलाइन अलग है: यह पूरी तरह से स्वतंत्र डिफेंडर-साइड टेलीमेट्री (नेटवर्क IDS + होस्ट रनटाइम सुरक्षा) से पुनर्निर्मित है, जिसे वास्तविक Splunk डेटा के विरुद्ध लाइव खींचा और मान्य किया गया।

**प्राथमिक RCE - नेटवर्क डिलीवरी का पता लगाता है, होस्ट निष्पादन की पुष्टि करता है, 103 सेकंड का अंतर:**

| समय (EDT)   | परत              | घटना                                                                                        |
| ------------ | ------------------ | -------------------------------------------------------------------------------------------- |
| 02:46:09.778 | नेटवर्क (Suricata) | इस सटीक CVE के लिए सार्वजनिक ET हस्ताक्षर फायर होता है                                                 |
| 02:47:52.277 | होस्ट (Falco)       | Kestra कंटेनर के अंदर रिवर्स शेल की पुष्टि, सटीक कमांड और कंटेनर ID कैप्चर किया गया |

**एस्केलेशन - नेटवर्क और होस्ट प्रत्येक स्वतंत्र रूप से एक ही घटना के एक अलग हिस्से की पुष्टि करते हैं:**

| समय (EDT)   | परत              | घटना                                                                                                                              |
| ------------ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| 03:48:55.503 | होस्ट (Falco)       | एस्केलेशन कंटेनर से रिवर्स शेल                                                                                        |
| 03:51:57.360 | नेटवर्क (Suricata) | TCP फ़्लो **और** एक सामग्री-आधारित अलर्ट - जब `id` चलाया गया तो होस्ट से सादे टेक्स्ट में निकलती शाब्दिक स्ट्रिंग `uid=0(root)` देखी गई |


## 6. डिटेक्शन इंजीनियरिंग

मैंने वास्तविक कैप्चर की गई टेलीमेट्री के विरुद्ध डिटेक्शन बनाए, फिर प्रत्येक को एक रीप्ले के विरुद्ध परीक्षण किया। मैट्रिक्स दिखाता है कि मेरे शुरू करने से पहले कवरेज कहाँ मौजूद थी और कहाँ नहीं।

### 6.0 डिटेक्शन कवरेज मैट्रिक्स

| चरण | नेटवर्क (Suricata) | होस्ट (Falco) | होस्ट (auditd/journald) | स्थिति |
| --- | --- | --- | --- | --- |
| प्रारंभिक एक्सप्लॉइट अनुरोध | सार्वजनिक ET हस्ताक्षर फायर होता है | कोई ऐप-लेयर दृश्यता नहीं | - | कवर (पूर्व-मौजूद) |
| RCE निष्पादन | - | नेटिव नियम, T1059-टैग किया गया | - | कवर (पूर्व-मौजूद) |
| Docker-सॉकेट एस्केलेशन (तकनीक) | - | अंतराल: केवल परिणामी शेल को पकड़ता है, सॉकेट-दुरुपयोग API कॉल को नहीं | EXECVE रिकॉर्ड सटीक `curl --unix-socket` कॉल कैप्चर करते हैं | अंतराल पाया गया, auditd + एक कस्टम Falco नियम के साथ बंद किया गया |
| एस्केलेशन प्रभाव पुष्टि | लीक हुए `id` आउटपुट पर सामग्री अलर्ट | वही सामान्य शेल नियम | - | कवर (पूर्व-मौजूद, क्रॉस-लेयर) |
| SSH दृढ़ता | - | - | journald: पूर्ण PAM जीवनचक्र और कुंजी फिंगरप्रिंट | कवर (केवल-होस्ट) |
| Cron दृढ़ता | - | - | journald और linux_audit, दो स्रोत, सटीक 5-मिनट कैडेंस | कवर (केवल-होस्ट) |

अंतराल docker-सॉकेट एस्केलेशन है। Falco के डिफ़ॉल्ट नियम एक समझौता किए गए कंटेनर द्वारा स्पॉन किए गए शेल को पकड़ते हैं, लेकिन स्थिर डिफ़ॉल्ट सेट में कुछ भी Docker API को सीधे चलाने के लिए `/var/run/docker.sock` तक पहुँचने वाली प्रक्रिया को फ़्लैग नहीं करता। जो नियम विशेषाधिकार प्राप्त-कंटेनर लॉन्च को छूते हैं, `Launch Privileged Container` और `Launch Sensitive Mount Container`, `incubating` और `sandbox` परिपक्वता पर आते हैं, इसलिए डिफ़ॉल्ट नियमसेट उन्हें भी लोड नहीं करता। मैंने अंतराल को एक auditd सहसंबंध खोज (डिटेक्शन 03) और एक कस्टम Falco नियम (§6.3) के साथ बंद किया।

### 6.1 Splunk - पाँच सहसंबंध खोजें, तैनात और शेड्यूल की गईं

सभी पाँच Splunk में लाइव चलती हैं (`*/5 * * * *`, अलर्ट ट्रैकिंग सक्षम, प्रति-फ़ील्ड थ्रॉटलिंग), न कि केवल लिखी गई और टेक्स्ट के रूप में छोड़ी गईं। प्रत्येक के लिए पूर्ण SPL, सटीक FP नोट्स, गंभीरता, MITRE टैग, और प्रतिक्रिया रनबुक `detections/splunk/*.spl` में हैं। नीचे दी गई स्थिति तालिका प्रत्येक के लिए लाइव-परीक्षण किया गया परिणाम है, जिसमें एक वास्तविक बग भी शामिल है जो मैंने पाया और ठीक किया।

| #   | डिटेक्शन                                                  | MITRE                | स्थिति                                                                                                                              |
| --- | ---------------------------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| 01  | नेटवर्क एक्सप्लॉइट हस्ताक्षर (Suricata ET अलर्ट का उपभोग करता है) | T1190                | **फायर हुआ** - ऐतिहासिक रीप्ले की पुष्टि, तब से कोई नई घटना नहीं (वर्तमान लुकबैक के बाहर)                                             |
| 02  | होस्ट RCE निष्पादन (Falco रीडायरेक्ट-टू-नेटवर्क नियम)        | T1059                | **फायर हुआ** - ऐतिहासिक रीप्ले की पुष्टि                                                                                             |
| 03  | Docker-सॉकेट दुरुपयोग (auditd, अंतराल-बंद करने वाला)               | T1610, T1611         | **लाइव शेड्यूलर पर ही फायर हुआ** - वास्तविक `*/5 * * * *` रन पर `triggered_alert_count: 1` की पुष्टि, न कि केवल मैनुअल परीक्षण |
| 04  | SSH root-लॉगिन दृढ़ता                                 | T1098.004, T1021.004 | **फायर हुआ** - ऐतिहासिक रीप्ले की पुष्टि                                                                                             |
| 05  | Cron-बीकन दृढ़ता                                    | T1053.003            | **एक बग के साथ तैनात जिसे मैंने पाया और लाइव ठीक किया।** `-10m` डिस्पैच विंडो में तीन 5-मिनट बकेट में से केवल दो थे जिनकी `distinct_intervals >= 3` थ्रेशोल्ड को आवश्यकता है, इसलिए यह वास्तविक डेटा में बीकन के अभी भी चलने के बावजूद कभी फायर नहीं हो सकता था। इसे `-30m` तक चौड़ा किया और पुनः तैनात किया - और शेड्यूलर ने तब से इसे 53 बार फायर किया है, इसलिए फिक्स टिका हुआ है। |

डिटेक्शन 03 का श्रम विभाजन जानबूझकर है: SPL में Suricata के स्वयं के हस्ताक्षर तर्क को पुनः लागू करने के बजाय, या Falco को सॉकेट-स्तरीय तकनीक पकड़ने की कोशिश करने के बजाय जिसके लिए इसे नहीं बनाया गया था, यहाँ SIEM परत सटीक `curl --unix-socket` कॉल के auditd के EXECVE रिकॉर्ड का उपभोग करती है - इस विशिष्ट तकनीक के लिए सबसे विश्वसनीय साबित हुआ टेलीमेट्री स्रोत।

1. **डिटेक्शन 01** - ET हस्ताक्षर फायरिंग (`suricata:eve` अलर्ट):```spl
index=main sourcetype=suricata:eve event_type=alert
  alert.signature="ET WEB_SPECIFIC_APPS Kestra Unauthenticated Remote Code Execution (CVE-2026-53576)"
| stats count min(_time) as first_seen max(_time) as last_seen
        values(src_ip) as source_ips
  by dest_ip dest_port
| eval first_seen=strftime(first_seen,"%Y-%m-%d %H:%M:%S")
| eval last_seen=strftime(last_seen,"%Y-%m-%d %H:%M:%S")

det01-network-et-signature

  1. Detection 02 - Falco का redirect-to-network नियम, प्रति कंटेनर अलग-अलग। Source IP, Kestra कंटेनर के bridge address (172.17.0.3, port 4489 पर primary RCE) से होस्ट स्वयं (172.66.66.67, port 4491 पर escalation) की ओर शिफ्ट होता है - कंटेनर-से-होस्ट escalation दृश्यमान हो जाता है - जबकि destination स्थिर रहता है: 172.66.66.125 पर हमलावर का listener: det02-falco-redirect-revshell

  2. Detection 03 - curl --unix-socket docker.sock के auditd EXECVE रिकॉर्ड: det03-auditd-docker-sock

  3. Detection 04 - journald root SSH लॉगिन, key fingerprint कैप्चर किया गया: det04-ssh-root-login

  4. Detection 05 - छिपी हुई dotfile cron beacon (/usr/local/bin/.sysmon) जो root के रूप में ठीक 5-मिनट की cadence पर चल रही है: ~6.5 घंटों (04:30-11:00 EDT) में 79 अलग-अलग अंतराल। distinct_intervals >= 3 threshold ही एक periodic beacon को one-off cron job से अलग करता है: det05-cron-beacon

सभी पाँच scheduled saved searches (*/5 * * * *) के रूप में deploy किए गए: saved-searches-scheduled

प्रमाण कि cron scheduler वास्तव में इन्हें चलाता है, केवल यह नहीं कि वे मौजूद हैं: सभी पाँच 54 बार execute हुए। Detection 03 एक बार fire हुआ (docker-socket का दुरुपयोग, 06:35 EDT) और Detection 05 53 बार fire हुआ (अभी भी सक्रिय cron beacon)। Detections 01/02/04 में 0 fires दिखते हैं क्योंकि वे one-time historical events हैं (exploit request, RCE, SSH login) जो -10m lookback से बाहर हो चुके हैं, जबकि कोई live या recurring instance अभी भी alert करेगा: scheduler-triggered-alert

6.2 Sigma - portable host process-spawn नियम

/dev/tcp/ reverse-shell pattern - जो primary RCE और escalation callback दोनों में उपयोग हुआ। SigmaHQ इसके लिए एक नियम देता है: "Suspicious Reverse Shell Command Line" (id 738d9bcf-6999-4fdb-b4ac-3033037db8ab, Florian Roth द्वारा Nextron Systems में), और इसके keywords में से एक है bash -i >& /dev/tcp/ - ठीक वही जो हमारे capture में दिखा।

तो मैंने उस नियम को बिना बदलाव के लिया (detections/sigma/lnx_shell_susp_rev_shells.yml) और इसके keyword को उसी Falco event पर जाँचा जिसे Detection 02 पहले ही कैप्चर कर चुका था। Sigma अपने आप "fire" नहीं होता - यह एक portable signature है, चलने वाला engine नहीं - लेकिन मैं दिखा सकता हूँ कि इसका keyword किसी textbook उदाहरण के बजाय इस run की वास्तविक telemetry पर लगता है।

सार्वजनिक SigmaHQ नियम "Suspicious Reverse Shell Command Line" - इसका bash -i >& /dev/tcp/ keyword, Detection 02 के समान वास्तविक event पर:

sigma-devtcp-match-event

6.3 Falco - docker-socket gap को बंद करने वाला custom नियम

detections/falco/docker_socket_abuse.yaml - live Falco instance पर deploy किया गया और वास्तविक replay पर firing की पुष्टि हुई, 2026-09-24T10:27:29Z।

Falco का default ruleset इसे कवर नहीं करता। किसी process का /var/run/docker.sock तक पहुँचना detect करना कोई नई बात नहीं है - Sysdig के स्वयं के Falco उदाहरण इसे socket path पर open_write देखकर करते हैं - लेकिन shipped/default set में ऐसा कोई नियम नहीं है (project के पास इसके लिए एक खुला अनुरोध है, falcosecurity/falco #2940), और एकमात्र निकटवर्ती default नियम केवल docker/kubectl CLIs को पकड़ता है, raw curl --unix-socket को नहीं।

पेच यह है: वह मानक open_write-on-the-socket दृष्टिकोण इस setup में fire नहीं हुआ - modern_bpf और passive mirror के साथ, socket तक connect() के ज़रिए पहुँचा जाता है, open() के ज़रिए नहीं। इसलिए मैं spawn के समय process command line पर match करता हूँ (spawned_process + proc.cmdline contains "docker.sock"), वही event class जिसे Falco यहाँ पहले से ही विश्वसनीय रूप से handle करता है। यह प्रति call दो बार fire होता है - shell wrapper और curl leaf - पूर्ण context के साथ:``` priority=Critical, container_id=d417e027d444, image=kestra/kestra:v1.3.20, user=root, cmdline="curl -s --unix-socket /var/run/docker.sock http://localhost/version", tags=[T1610, T1611]

root@kitploit:~
कस्टम Falco नियम फायरिंग - "Unexpected Process Accessing Docker Socket" (T1610/T1611):
![det17-falco-custom-docker-sock](https://assets.kitploit.com/production/public/readmes/56348/6fa1b11a7c8c6a3c8619ac95a2950cf1f326df0ef1651324aa0b4f80db389a12/8ac8f1a2c5184a84ba2af0c9c85c3112506e19c62b0734105e5b74c90e4d8078-display-v1.webp)

फायर हुए स्टॉक Falco नियम - डिफ़ॉल्ट सेट में कोई docker-socket नियम नहीं है, यही अंतराल है:
![falco-rule-inventory](https://assets.kitploit.com/production/public/readmes/56348/5da667ac881b32f6bc633e58b4d00a08ea22cf3a5000b3ae8522cb3937b051a4/3fe1201158632dc6aef5257bf3620e83e087814f3da0108f7d2ef04fd5088ec9-display-v1.webp)

### 6.4 Suricata - मौजूदा सार्वजनिक कवरेज, कस्टम नियम स्थगित

प्राथमिक एक्सप्लॉइट के लिए नेटवर्क लेयर पहले से ही एक सार्वजनिक Emerging Threats सिग्नेचर द्वारा कवर की गई है, `ET WEB_SPECIFIC_APPS Kestra Unauthenticated Remote Code Execution (CVE-2026-53576)`, जो Phase 2 के दौरान वास्तविक ट्रैफ़िक पर फायर हुआ।

नीचे वही बायपास नेटवर्क लेयर पर देखा गया है, और मैंने क्वेरी को भेद्यता पैटर्न से बनाया। `flows` या `executions` एंडपॉइंट पर जिस भी रिक्वेस्ट का पाथ `/configs` पर समाप्त होता था, वह `200` लौटाती थी, जबकि एक सामान्य रूट (`/flows/search`) अपेक्षित `401` लौटाता था।

`Attacker IP (XFF)` कॉलम वास्तविक HTTP ओरिजिन है, जो `X-Forwarded-For` हेडर से पढ़ा गया: `10.10.10.106`, मेरा Mac जिस पर Burp चल रहा था। Suricata का अपना `src_ip` केवल रिवर्स-प्रॉक्सी हॉप (`172.66.66.1`) देखता है। यह उस `172.66.66.125` Kali बॉक्स से अलग मशीन है जिसने बाद में रिवर्स शेल पकड़े और SSH लॉगिन किया, इसलिए HTTP एक्सप्लॉइट और कॉलबैक अलग-अलग होस्ट से आए।

![suricata-raw-post-http](https://assets.kitploit.com/production/public/readmes/56348/d713d35f0d858af8dd5d477a9929ed6d07e55bce5e9e43946dfe1fb1cca73699/975155c6fe8a39a0de715497a7e5a659b17641a7ed4ed2d7f4d7bfcd02842398-display-v1.webp)

### 6.5 डैशबोर्ड

`cve_2026_53576_kill_chain` Splunk पर डिप्लॉय किया गया है और इसमें शामिल हैं: हेडलाइन KPIs (डिटेक्शन लेयर, ATT&CK तकनीकें, डिप्लॉय किए गए डिटेक्शन, पर्सिस्टेंस मेकैनिज़्म), टेलीमेट्री लेयर द्वारा रंगा गया एक अटैक-टाइमलाइन कॉलम चार्ट, एक MITRE ATT&CK किल-चेन मैप जिसमें प्रत्येक चरण के लिए लाइव एविडेंस काउंट है, §5.4 से नेटवर्क-और-होस्ट सहसंबद्ध टाइमलाइन, शेड्यूल्ड सेव्ड सर्च द्वारा डिटेक्शन कवरेज, docker-socket तकनीक का विभाजन, और लॉग्स से लाइव खींची गई एक इंडिकेटर्स-ऑफ-कॉम्प्रोमाइज़ टेबल।

- KPIs, अटैक-टाइमलाइन चार्ट, और ATT&CK मैप की शुरुआत:
![dashboard-kill-chain-1](https://assets.kitploit.com/production/public/readmes/56348/e0fe4ac39189ed9b3c4741ab5c8fb3276484a482dcb476b11e14381700647afd/5f586685c93346bd1df629ea4092a5a61146d0a32c2d258dfba620b3dd984161-display-v1.webp)

- ATT&CK मैप का शेष भाग, सहसंबद्ध किल-चेन, docker-socket विभाजन के बगल में डिटेक्शन कवरेज, और IOC टेबल:
![dashboard-kill-chain-2](https://assets.kitploit.com/production/public/readmes/56348/f4479575da20da3a4028a0abaac1c3b565c5b034582b157730599a15601e195f/8b18bbbdd05d8955c38f457d71029f3b2be53b409959a7560c0f8f08f038cbaf-display-v1.webp)


## 7. ATT&CK मैपिंग

| Tactic               | Technique                                                 | Evidence                                                                                                |
| -------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| Initial Access       | T1190 - Exploit Public-Facing Application                 | Control/plant/execute requests (§5.1); Suricata ET signature fire, §5.4                                 |
| Execution            | T1059.004 - Command and Scripting Interpreter: Unix Shell | Kestra `Commands` task, host process tree (`07-kestra-process-tree.png`); Falco rule, §6.1 Detection 02 |
| Command and Control  | T1095 - Non-Application Layer Protocol                    | Raw `/dev/tcp/` TCP reverse shell - no application-layer C2 framing used                                |
| Discovery            | T1613 - Container and Resource Discovery                  | Docker image enumeration via the socket (`10-docker-images-enum.png`)                                   |
| Privilege Escalation | T1610 - Deploy Container                                  | Sibling container create/start via the Docker API (`11`–`15`); auditd EXECVE records, §6.1 Detection 03 |
| Privilege Escalation | T1611 - Escape to Host                                    | Host-root confirmation, hostname/kernel match (`16`, `17`)                                              |
| Persistence          | T1098.004 - Account Manipulation: SSH Authorized Keys     | Key implant to `/root/.ssh/authorized_keys` (`23`)                                                      |
| Lateral Movement     | T1021.004 - Remote Services: SSH                          | Successful key-based root login (`24`); journald, §6.1 Detection 04                                     |
| Persistence          | T1053.003 - Scheduled Task/Job: Cron                      | Cron beacon, confirmed firing on schedule (`25`); §6.1 Detection 05                                     |

## 8. उपचार और हार्डनिंग

**प्राथमिक फिक्स।** Kestra 1.0.45 (1.0.x लाइन) या 1.3.21+ (1.3.x लाइन) पर अपग्रेड करें। यह अकेले ही auth-bypass को बंद कर देता है - इस अभ्यास का Stage 1 - और यह
एकमात्र फिक्स है जिसे लागू करने के बाद किसी अतिरिक्त कम्पेसेंटिंग कंट्रोल की आवश्यकता नहीं होती। देखें [GHSA-2q47-568g-9h4f](https://github.com/kestra-io/kestra/security/advisories/GHSA-2q47-568g-9h4f)।

**यदि तत्काल पैचिंग संभव नहीं है**, तो कम्पेसेंटिंग कंट्रोल, प्रभाव के क्रम में:

1. **रिवर्स-प्रॉक्सी प्रवर्तन** - चूंकि भेद्य फ़िल्टर केवल रॉ पाथ सफ़िक्स पर विफल होता है, Kestra के सामने एक रिवर्स प्रॉक्सी (इस लैब में Caddy) स्वतंत्र रूप से `/api/v1/*/(flows|executions)/.*` से मेल खाने वाले किसी भी पाथ पर auth लागू कर सकता है, चाहे वह किसी भी चीज़ पर समाप्त हो, बायपास को उस लेयर पर बंद करते हुए जहाँ एप्लिकेशन बग पहुँच नहीं सकता।
   
2. **Docker socket माउंट को प्रतिबंधित करें** - यह Kestra पैच से स्वतंत्र रूप से Stages 2–3 को पूरी तरह बंद कर देता है। `/var/run/docker.sock` को Kestra कंटेनर में बाइंड-माउंट न करें। यदि `Docker` टास्क रनर वास्तव में आवश्यक है, तो एक स्कोप्ड socket प्रॉक्सी (जैसे `docker-socket-proxy`) का उपयोग करें जो पूर्ण डेमन एक्सेस देने के बजाय विशिष्ट API कॉल्स को allowlist करता है - socket तक पूर्ण एक्सेस होस्ट रूट के बराबर है, जैसा §5.2 में प्रदर्शित किया गया है।
   
3. **SSH हार्डनिंग** - पर्सिस्टेंस चेन का पहला मेकैनिज़्म इस बात पर निर्भर था कि रूट तक key-based SSH से पहुँचा जा सके। `PermitRootLogin no` (या रूट के लिए bastion/MFA की आवश्यकता) उस विशिष्ट पर्सिस्टेंस पाथ को प्रारंभिक RCE की परवाह किए बिना अवरुद्ध कर देता - इस CVE से स्वतंत्र रूप से करने योग्य।
   
4. **अंतरिम डिटेक्शन कवरेज** - Splunk सहसंबंध सर्च और कस्टम Falco नियम, जो इस अभ्यास के दौरान डिप्लॉय और सत्यापित किए गए, पैचिंग शेड्यूल होने तक इस विशिष्ट चेन के चरणों के लिए अंतरिम कवरेज प्रदान करते हैं।

**पोस्ट-इंसिडेंट हाइजीन**, यदि यह पैटर्न पहले से शोषित पाया जाता है: इसे केवल एप्लिकेशन कॉम्प्रोमाइज़ नहीं, बल्कि पूर्ण होस्ट कॉम्प्रोमाइज़ मानें - Kestra इंस्टेंस की पहुँच वाले प्रत्येक क्रेडेंशियल और सीक्रेट को रोटेट करें (KV store एंट्रीज़, डाउनस्ट्रीम सिस्टम्स के लिए कनेक्शन क्रेडेंशियल), न कि केवल Kestra की अपनी एक्सेस।

**इन-द-वाइल्ड स्थिति।** `CVE-2026-49869`, इसी बग के लिए जुड़वाँ एडवाइज़री, CISA की KEV कैटलॉग में सूचीबद्ध है और देखे गए क्रिप्टो-माइनिंग और क्लाउड-क्रेडेंशियल-थेफ्ट अभियानों से जुड़ी है। `CVE-2026-53576` (यह रिपोर्ट) की अपनी कोई KEV लिस्टिंग नहीं है, लेकिन यह वही भेद्यता है। केवल दो CVE नंबरों में से एक को ट्रैक करने वाले भेद्यता प्रबंधन टूल्स एक्सपोज़र को कम रिपोर्ट कर सकते हैं।


## 9. संदर्भ

- Kestra Security Advisory - [GHSA-2q47-568g-9h4f](https://github.com/kestra-io/kestra/security/advisories/GHSA-2q47-568g-9h4f) (CVE-2026-53576, इस रिपोर्ट का प्राथमिक स्रोत)
- जुड़वाँ एडवाइज़री - [GHSA-5vc5-wxxq-3fjx](https://github.com/kestra-io/kestra/security/advisories/GHSA-5vc5-wxxq-3fjx) (CVE-2026-49869, समान बग, CISA KEV-सूचीबद्ध)
- CVE.org - [CVE-2026-53576](https://www.cve.org/CVERecord?id=CVE-2026-53576), [CVE-2026-49869](https://www.cve.org/CVERecord?id=CVE-2026-49869)
- CISA Known Exploited Vulnerabilities Catalog - https://www.cisa.gov/known-exploited-vulnerabilities-catalog (CVE-2026-49869 प्रविष्टि, 2026-09-02 को जोड़ी गई)
- फिक्स्ड रिलीज़, दोनों के अस्तित्व और टैग की पुष्टि - [v1.3.21](https://github.com/kestra-io/kestra/releases/tag/v1.3.21) (2026-06-02, चेंजलॉग स्पष्ट रूप से "potential authentication bypass in the authentication filter" का संदर्भ देता है), [v1.0.45](https://github.com/kestra-io/kestra/releases/tag/v1.0.45) (2026-06-03)
- Docker socket एस्केलेशन तकनीक (§5.2) - [HackTricks: Docker Breakout / Privilege Escalation](https://hacktricks.wiki/en/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/index.html), [Trail of Bits: Understanding Docker Container Escapes](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/), [MindPatch: Docker Escape](https://www.mindpatch.net/posts/docker-escape/)
- Sigma नियम (§6.2) - अपना लिखने के बजाय जो सार्वजनिक नियम मैंने उपयोग किया: [SigmaHQ "Suspicious Reverse Shell Command Line"](https://github.com/SigmaHQ/sigma/blob/master/rules/linux/builtin/lnx_shell_susp_rev_shells.yml) (id `738d9bcf-6999-4fdb-b4ac-3033037db8ab`, Florian Roth / Nextron Systems), [Detection Rule License 1.1](https://github.com/SigmaHQ/sigma/blob/master/LICENSE.Detection.Rules.md) के अंतर्गत उपयोग किया गया
- Falco नियम (§6.3) - docker-socket अंतराल एक ओपन अपस्ट्रीम रिक्वेस्ट है ([falcosecurity/falco #2940](https://github.com/falcosecurity/falco/issues/2940)); कस्टम नियम [Sysdig के Docker + Falco उदाहरणों](https://www.sysdig.com/blog/docker-falco-security) में दिए पैटर्न का अनुसरण करता है
टूल डाउनलोड करें