Skip to content

Latest commit

 

History

History
40 lines (32 loc) · 2.6 KB

File metadata and controls

40 lines (32 loc) · 2.6 KB

Relatóio de Qualidade de Código e Segurança - 176source

Resumo Executivo

A análise do código-fonte 1.7.6 revelou um código geralmente robusto, mas com práticas legadas (estilo C) que introduzem riscos de segurança e estabilidade. Identificamos vulnerabilidades específicas de estouro de buffer (buffer overflow) e inconsistências lógicas em novos sistemas.

Vulnerabilidades Identificadas

1. Estouro de Buffer em playercmd.cpp

Gravidade: ALTA Na linha 8664 (Case 10852), um buffer de 128 bytes é usado para armazenar uma string formatada que pode teoricamente atingir ~130 bytes.

char buf[128] = {0};
sprintf(buf,"RoleId: %d FactionId %d Team_uid_0:%d,Team_uid_1:%d,WorldTag:%d,UFid:%lld", ...);

Se os IDs forem grandes (especialmente UFid que é long long), isso causará corrupção de memória na stack, podendo levar a crashes ou exploração. Recomendação: Aumentar buf para 256 bytes e usar snprintf.

2. Cópia de String Insegura em arenaofaurora_ctrl.cpp

Gravidade: MÉDIA O código copia nomes de times usando memcpy sem garantir terminação nula explícita se o nome ocupar todo o tamanho do array.

char red_team_name[MAX_TEAM_NAME_LENGTH]; 
memcpy(red_team_name, _red_team_data.team_name, MAX_TEAM_NAME_LENGTH);

Se _red_team_data.team_name tiver 36 caracteres, red_team_name não terá o caractere \0 final, causando leitura fora dos limites quando passado para funções que esperam C-strings.

3. Lógica de Placement na Arena (arenaofaurora_ctrl.cpp)

Gravidade: BAIXA (Lógica) A função CalculateQualScore define pontuações para 0-10 vitórias. Se um jogador tiver >10 vitórias (teoricamente impossível no placement, mas não garantido por código), a função retorna o valor padrão (1000), "punindo" o desempenho excessivo. Recomendação: Adicionar if (win_count > 10) return 1700; para cobrir casos extremos.

4. Uso Generalizado de sprintf

Gravidade: MÉDIA Existem dezenas de usos de sprintf em todo o código (threadusage.cpp, playercmd.cpp, etc.). Esta função não verifica limites de buffer. Recomendamos substituir gradualmente por snprintf.

5. Falsos Positivos Investigados

  • Double Free em player.cpp: Uma suspeita inicial de liberação dupla de memória (double free) na função GBKSay foi investigada e provou ser segura; o fluxo lógico impede que os dois comandos free() sejam executados na mesma chamada.

Conclusão

O servidor 1.7.6 é funcional, mas requer correções pontuais em playercmd.cpp e arenaofaurora_ctrl.cpp para garantir estabilidade sob carga ou casos de borda.