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
mysql-mysqldump-show-tables-overflow — MySQL Community Server 26.7.0 - Alto - mysqldump SHOW TABLES estouro de pilha - despejo de falha UID | Kitploit
Ferramentas/GitHubGitHub/abraxas/mysql-mysqldump-show-tables-overflow
Análise de VulnerabilidadesExploraçãoFuzzingCriptografiaTestes de PenetraçãoAnálise de Binários
GitHubabraxas/mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

MySQL Community Server 26.7.0 - Alto - mysqldump SHOW TABLES estouro de pilha - despejo de falha UID

Ver Repositório
57há 12 diasAinda não revisado

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

Abraxas Labs - mysql-mysqldump-show-tables-overflow

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

Classe: Crash Alcance: Remoto

MySQL Community Server mysqldump 26.7.0 (06a5c1c) - Oracle

O mysqldump padrão copia nomes de SHOW TABLES sem limite de NAME_LEN. getTableName retorna um mysql_fetch_row bruto. dump_all_tables_in_db faz my_stpcpy dessa string em hash_key[2*NAME_LEN+2] e quote_name a escreve em um buffer de pilha de 387 bytes sem limite. Um servidor hostil que responde com um nome de tabela maior que 192 bytes derruba o UID do dump.

Um mysqld real não emitirá identificadores tão longos. O que sobra é o cliente confiando no protocolo.

IDsem CVE ainda
ClasseCrash (SIGSEGV no cliente; RCE não demonstrado)
AlcanceRemoto (vítima executa mysqldump contra um MySQL do atacante; UI:R)
CWECWE-120, CWE-121
CVSSAlto: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
ProdutoMySQL Community Server mysqldump
Afetado26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
Autenticaçãovítima executa o mysqldump padrão contra um MySQL do atacante
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1. Testemunha de crash. Sem payload de RIP.

O que um atacante pode fazer

Suba um servidor de protocolo MySQL. Complete o handshake. Responda aos SETs da sessão. Quando o cliente enviar show tables, retorne uma linha cujo nome tenha dezenas de kilobytes.

O operador que apontou mysqldump testdb para aquele host estoura um buffer de pilha no processo de dump. O lab em mysqldump Ver 26.7.0 é SIGSEGV. Controle confiável do ponteiro de instrução não faz parte deste pacote. O crash faz.

Mesmo modelo de vítima que um cliente de backup apontado para um servidor malicioso. lock_tables é o padrão via --opt. O overflow está naquele primeiro laço de SHOW TABLES.

Como eu encontrei

Executei trinta e uma buscas no código-fonte de https://github.com/mysql/mysql-server tag https://github.com/mysql/mysql-server/tree/mysql-26.7.0. Crit/High não publicados do mysqld padrão voltaram vazios. As linhas de CPU High Server de julho de 2026 estão fechadas neste pin. As ferramentas cliente eram a classe restante, mesma forma do pg_basebackup do PostgreSQL seguindo um caminho hostil.

static char *getTableName(int reset) {
  static MYSQL_RES *res = nullptr;
  MYSQL_ROW row;
  if (!res) {
    if (!(res = mysql_list_tables(mysql, NullS))) return (nullptr);
  }
  if ((row = mysql_fetch_row(res))) return ((char *)row[0]);
static char *quote_name(char *name, char *buff, bool force) {
  char *to = buff;
  const char qtype = ansi_quotes_mode ? '"' : '`';
  if (!force && !opt_quoted && !test_if_special_chars(name)) return name;
  *to++ = qtype;
  while (*name) {
    if (*name == qtype) *to++ = qtype;
    *to++ = *name++;
  }

NAME_LEN é 64 * 3 = 192. hash_key tem 386 bytes. quote_name em dump_table escreve em table_buff[NAME_LEN+3].

Caminhos errados já registrados: tratar um mysqld real como oráculo (ele não emitirá um identificador de 193 bytes); um nome de 4KiB absorvido por real_columns[MAX_FIELDS] no mesmo frame que hash_key; compilar ASan a partir da árvore completa do servidor; chamar o crash de controle do ponteiro de instrução.

Lab

cd lab
./run.sh

Imagem mysql:26.7.0. Stub hostil no compose stub:3306 (controle, tabela t) e stub:3307 (overflow, nome de 64KiB mais testemunha). Publicado em 127.0.0.1:18600 / 18601. Vincule ao loopback.

control-rc=2 control-signal=0
overflow-rc=139 overflow-signal=SIGSEGV
SUCCESS mysql-mysqldump-show-tables-overflow ... MYSQL-DUMP-SHOW-TABLES-OVERFLOW-WITNESS

O controle imprime um cabeçalho de dump 26.7.0 e sai com 2 em SQL 1146. O overflow morre logo após show tables. Sem LOCK TABLES naquela conexão.

A correção

Limite getTableName a NAME_LEN. Dê a quote_name um comprimento de buffer e recuse escrever além dele. O my_stpcpy em hash_key deveria ser uma cópia limitada. Um nome hostil de SHOW TABLES não é uma tabela.

Referências

  • https://github.com/mysql/mysql-server tag https://github.com/mysql/mysql-server/tree/mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/client/mysqldump.cc getTableName, quote_name, dump_all_tables_in_db
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/include/mysql_com.h NAME_LEN
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/libmysql/libmysql.cc mysql_list_tables
Baixar ferramenta