Ticket #773 (closed defeito: fixed)
Condição acl->check('group_access',1,'admin')) não bloqueia acesso indevido
Reported by: | niltonneto | Owned by: | niltonneto |
---|---|---|---|
Priority: | grave | Milestone: | Expresso 2.0.3 |
Component: | Admin | Version: | branch 2.0 |
Severity: | Keywords: | group_access falha acesso expressoadmin | |
Cc: | WorkGroup: |
Description
Problema: O argumento 'group_access' não é, nem nunca foi usado no Expresso. Era uma permissão usada somente em classes de administração de usuários e de grupos do EgroupWare?, funções essas, que ficavam dentro do módulo Administrador e foram desabilitadas no Expresso.
Portanto, em todos os lugares onde existe a condição if(!$GLOBALSphpgw?->acl->check('group_access',1,'admin')), não adianta nada. No ExpressoAdmin, além disso, todas suas condições existentes estão implementadas de forma errada.
Riscos: Na implementação atual, vários links dentro do módulo Administrador (admin) que não passam por "menuaction=admin.*" ou não são "admin/*" poderão ser facilmente acessados por usuários que não tenham acesso ao módulo Administrador e conheçam essas URLS.
Ex.: Se um usuário tiver acesso apenas ao módulo ExpressoAdmin, poderá carregar o link de "Gerentes" se souber sua URL, e consequentemente, poderá adicionar, liberar, editar e listar gerentes livremente mesmo não tendo acesso ao módulo Administrador.
Solução: Onde tiver essa condição, o correto é usar 'run' ao invés de 'group_access', já que não usamos tal permissão no Expresso. Além disso, deve-se revisar também todos links disponibilizados dentro do módulo Administrador, inserindo a seguinte condição onde não existir:
if (!$GLOBALS['phpgw']->acl->check('run',1,'admin')) { $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/admin/index.php')); }
Corrigido em [1684] e replicado no Branch [1685].