Contexto
Auditoria de bugs (ver BUGS_AUDIT.md). Vários handlers de servidor derivam a permissão exigida do dataKey que o cliente envia, em vez de fixá-la. CheckDataFromKey(key) (server/utils.lua:151) faz lookup do action no Config e devolve seu .perms; o handler roda CheckPerms(source, actionData.perms).
Impacto
Um admin de baixo escalão envia o dataKey de qualquer ação cuja permissão ele possua (ex.: remove_stress) e o handler executa a operação privilegiada. A permissão de fato exigida vira a mais baixa que o atacante escolher.
Locais
server/inventory.lua:81 — OpenTrunk usa actionData.perms cru do payload (client/inventory.lua:31 passa data). Envia {perms='qadmin.open'} e abre porta-malas de qualquer placa.
server/players.lua:471 — SetPerms (concede rank QBCore via AddPermission)
server/players.lua:507 — RemoveStress
server/inventory.lua:127 — GiveItemAll
server/misc.lua:156 — UnbanPlayer
server/misc.lua:249 — verifyPlayer
server/vehicle.lua:355 — UpdateVehicleStock
Referência do padrão correto: server/misc.lua:74 (BanPlayer) já usa nó fixo qadmin.action.ban_player.
Correção sugerida
Fixar o nó exigido em cada handler (como em BanPlayer), ou validar que o dataKey corresponde à ação correta antes de aceitar seu .perms.
Severidade: 🔴 Alto — IDs: S-02, S-03, S-04
Contexto
Auditoria de bugs (ver
BUGS_AUDIT.md). Vários handlers de servidor derivam a permissão exigida dodataKeyque o cliente envia, em vez de fixá-la.CheckDataFromKey(key)(server/utils.lua:151) faz lookup do action no Config e devolve seu.perms; o handler rodaCheckPerms(source, actionData.perms).Impacto
Um admin de baixo escalão envia o
dataKeyde qualquer ação cuja permissão ele possua (ex.:remove_stress) e o handler executa a operação privilegiada. A permissão de fato exigida vira a mais baixa que o atacante escolher.Locais
server/inventory.lua:81— OpenTrunk usaactionData.permscru do payload (client/inventory.lua:31passadata). Envia{perms='qadmin.open'}e abre porta-malas de qualquer placa.server/players.lua:471— SetPerms (concede rank QBCore viaAddPermission)server/players.lua:507— RemoveStressserver/inventory.lua:127— GiveItemAllserver/misc.lua:156— UnbanPlayerserver/misc.lua:249— verifyPlayerserver/vehicle.lua:355— UpdateVehicleStockReferência do padrão correto:
server/misc.lua:74(BanPlayer) já usa nó fixoqadmin.action.ban_player.Correção sugerida
Fixar o nó exigido em cada handler (como em
BanPlayer), ou validar que odataKeycorresponde à ação correta antes de aceitar seu.perms.Severidade: 🔴 Alto — IDs: S-02, S-03, S-04