
Nextcloud 35.0.0 — प्रतिनिधिक Webhooks एडमिन webhook update tokenNeeded के माध्यम से 1h एडमिन ऐप पासवर्ड बना सकता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-webhook-tokenneeded
Nextcloud Server 35.0.0 - Nextcloud GmbH
WebhooksController::create() tokenNeeded को null कर देता है, जब तक कि कॉलर पूर्ण इंस्टेंस एडमिन न हो। update() ऐसा नहीं करता। एक प्रतिनिधित्व प्राप्त Webhooks सेटिंग्स एडमिन (admin में नहीं) किसी मौजूदा webhook पर tokenNeeded.user_ids: ["admin"] संग्रहीत कर सकता है, और फिर जब इवेंट ट्रिगर होता है, तो उस uid के लिए एक घंटे का बिना स्कोप वाला PERMANENT_TOKEN ऐप पासवर्ड प्राप्त कर सकता है।
एक दुर्भावनापूर्ण अभिनेता, जिसे केवल webhooks प्रबंधित करने का भरोसा दिया गया था, एक घंटे के लिए admin (या अपने द्वारा नामित किसी भी उपयोगकर्ता) के रूप में लॉग इन कर सकता है, 2FA को छोड़ सकता है, और उस व्यक्ति की फ़ाइलों को पढ़ या अधिलेखित कर सकता है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-863, CWE-269 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Product | Nextcloud Server |
| Affected | 35.0.0 (da02f41) आधिकारिक nextcloud:35.0.0-apache |
| Auth | प्रतिनिधित्व प्राप्त Webhooks सेटिंग्स एडमिन (IDelegatedSettings) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
आपने किसी को Webhooks सेटिंग्स का काम सौंपा। वे admin समूह में नहीं हैं। Nextcloud फिर भी उन्हें एक मौजूदा webhook को इस तरह संपादित करने देता है कि अगले मेल खाते इवेंट पर, सर्वर उन्हें उनके द्वारा सूचीबद्ध किसी भी uid के लिए एक घंटे का लॉगिन मेल कर देता है, जिसमें admin भी शामिल है।
उस लॉगिन के साथ वे यह कर सकते हैं:
उन्हें होस्ट पर PHP शेल की आवश्यकता नहीं है। उन्हें पूर्ण इंस्टेंस एडमिन होने की आवश्यकता नहीं है। बिना खाते वाला इंटरनेट पर कोई अजनबी यह नहीं कर सकता। छेद वह स्टाफर है जिसे आपने पहले ही webhooks का भरोसा दिया था, जो उन लोगों का रूप धारण कर रहा है जिन्हें आपने नहीं दिया।
WebhooksController #[AuthorizedAdminSetting(settings: Admin::class)] है। Admin IDelegatedSettings को लागू करता है। इसी तरह Nextcloud एक सेटिंग्स पैनल को उस समूह को सौंपता है जो admin नहीं है।
tokenNeeded सर्वर से कहता है कि जब webhook ट्रिगर हो, तो नामित uids के लिए auth tokens संलग्न करे। TokenService::createEphemeralToken password = null के साथ IToken::PERMANENT_TOKEN बनाता है। ऐप पासवर्ड। 2FA पहले ही पीछे रह गया।
PR #60543 ने create को गेट किया: जब तक आप पूर्ण इंस्टेंस एडमिन न हों, tokenNeeded null कर दिया जाता है। मैंने प्रतिनिधित्व प्राप्त उपयोगकर्ता hooker के रूप में tokenNeeded.user_ids: ["admin"] के साथ एक webhook बनाया। संग्रहीत tokenNeeded [] था। Create गेटेड है। एक मिनट के लिए यह एक पूर्ण पैच जैसा लगता है।
फिर मैंने वही body /webhooks/{id} पर POST किया। संग्रहीत user_ids ['admin'] था। update() ने कभी if कॉपी नहीं किया।
hooker के रूप में एक फ़ाइल PUT करें ताकि NodeCreatedEvent ट्रिगर हो। Cron WebhookCall चलाता है। Catcher JSON में authentication.user_ids.admin.token है। admin की निजी witness फ़ाइल का Bearer GET 200 लौटाता है, X-User-Id: admin।
इसके मरने के तरीके जो आपको कुछ नहीं सिखाते: update 403 (controller पहले से create से मेल खाता है); create पहले से tokens बना रहा है (#60543 बिल्ड पर नहीं); catcher में खाली authentication (cron ने नहीं बनाया); ExApp header पथ (lab उपयोगकर्ता प्रतिनिधित्व प्राप्त hooker है)।
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:18320 (Nextcloud) और :18321 (catcher)।
SUCCESS NEXTCLOUD-WEBHOOK-TOKENNEEDED who=delegated-webhook-admin uid=admin NEXTCLOUD-WEBHOOK-TOKENNEEDED-WITNESS
create के isAdmin null-out को update() में कॉपी करें। जब तक यह शिप न हो, Webhooks सेटिंग्स को गैर-admin समूहों को प्रतिनिधित्व न दें।
da02f41)GNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक lab। कोई वारंटी नहीं।