A01:2021 – Quebra de Controle de Acesso
Fatores
CWEs Mapeados | Taxa de Incidência Máxima | Taxa de Incidência Média | Exploração Média Ponderada | Impacto Médio Ponderado | Cobertura Máxima | Cobertura Média | Total de ocorrências | Total de CVEs |
---|---|---|---|---|---|---|---|---|
34 | 55.97% | 3.81% | 6.92 | 5.93 | 94.55% | 47.72% | 318,487 | 19,013 |
Visão Geral
Saindo da quinta posição, 94% dos aplicativos foram testados para alguma forma de controle de acesso quebrado com a taxa de incidência média de 3,81% e tem o maior número de ocorrências no conjunto de dados contribuído com mais de 318 mil. Notável Common Weakness Enumerations (CWEs) incluídas são CWE-200: Exposição de Informações Confidenciais a um Ator Não Autorizado, CWE-201: Exposição de Informações Confidenciais por meio de Dados Enviados e CWE-352: requisições forjadas entre sites.
Descrição
O controle de acesso impõe a política de modo que os usuários não possam agir fora de suas permissões pretendidas. As falhas normalmente levam à divulgação, modificação ou destruição de informações não autorizadas de todos os dados ou ao desempenho de uma função comercial fora dos limites do usuário. Vulnerabilidades comuns de controle de acesso incluem:
-
Violação do princípio de privilégio mínimo ou negação por padrão, onde o acesso deve ser concedido apenas para determinados recursos, funções ou usuários, mas está disponível para qualquer pessoa.
-
Ignorar verificações de controle de acesso modificando a URL (adulteração de parâmetros ou navegação forçada), o estado interno do aplicativo, a página HTML ou usando uma ferramenta de ataque que modifica as requisições de API.
-
Permitir a visualização ou edição da conta de outrem, mediante a disponibilização do seu identificador único (referências diretas não seguras a objetos).
-
Acessando API sem controles de acesso para POST, PUT e DELETE.
-
Elevação de privilégio. Agir como um usuário sem estar logado ou agir como um administrador quando logado como um usuário.
-
Manipulação de metadados, como reproduzir ou adulterar um token de controle de acesso JSON Web Token (JWT), um cookie ou campo oculto manipulado para elevar privilégios ou abusar da invalidação de JWT.
-
A configuração incorreta do CORS permite o acesso à API de origens não autorizadas / não confiáveis.
-
Força a navegação para páginas autenticadas como um usuário não autenticado ou para páginas privilegiadas como um usuário padrão.
Como Prevenir
O controle de acesso só é eficaz em código confiável do lado do servidor ou API sem servidor, em que o invasor não pode modificar a verificação de controle de acesso ou metadados.
-
Exceto para recursos públicos, negar por padrão.
-
Implemente mecanismos de controle de acesso uma vez e reutilize-os em todo o aplicativo, incluindo a minimização do uso de Cross-Origin Resource Sharing (CORS).
-
Os controles de acesso ao modelo devem impor a propriedade do registro em vez de aceitar que o usuário possa criar, ler, atualizar ou excluir qualquer registro.
-
Os requisitos de limite de negócios de aplicativos exclusivos devem ser impostos por modelos de domínio.
-
Desative a lista de diretórios do servidor da web e certifique-se de que os metadados do arquivo (por exemplo, o .git) e os arquivos de backup não estejam presentes nas raízes da web (web roots).
-
Registrar falhas de controle de acesso e alertar os administradores quando apropriado (por exemplo, falhas repetidas).
-
Limite de taxa o acesso da API e do controlador para minimizar os danos do conjunto de ferramentas de ataque automatizado.
-
Os identificadores de sessão com estado devem ser invalidados no servidor após o logout. Os tokens JWT sem estado devem ter vida curta, para que a janela de oportunidade para um invasor seja minimizada. Para JWTs de longa duração, é altamente recomendável seguir os padrões OAuth para revogar o acesso.
Os desenvolvedores e a equipe de QA devem incluir uma unidade de controle de acesso funcional e testes de integração.
Exemplos de Cenários de Ataque
Cenário #1: O aplicativo usa dados não verificados em uma chamada SQL que está acessando informações da conta:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
Um invasor simplesmente modifica o parâmetro 'acct' do navegador para enviar o número de conta que desejar. Se não for verificado corretamente, o invasor pode acessar a conta de qualquer usuário.
https://example.com/app/accountInfo?acct=notmyacct
Cenário #2: Um invasor simplesmente força a navegação para URLs de destino. Direitos de administrador são necessários para acessar a página de administrador.
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
Se um usuário não autenticado pode acessar qualquer página, é uma falha. Se um não administrador pode acessar a página de administração, isso é uma falha.
Referências
Lista dos CWEs Mapeados
CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
CWE-23 Relative Path Traversal
CWE-35 Path Traversal: '.../...//'
CWE-59 Improper Link Resolution Before File Access ('Link Following')
CWE-200 Exposure of Sensitive Information to an Unauthorized Actor
CWE-201 Exposure of Sensitive Information Through Sent Data
CWE-219 Storage of File with Sensitive Data Under Web Root
CWE-264 Permissions, Privileges, and Access Controls (should no longer be used)
CWE-276 Incorrect Default Permissions
CWE-284 Improper Access Control
CWE-285 Improper Authorization
CWE-352 Cross-Site Request Forgery (CSRF)
CWE-359 Exposure of Private Personal Information to an Unauthorized Actor
CWE-377 Insecure Temporary File
CWE-402 Transmission of Private Resources into a New Sphere ('Resource Leak')
CWE-425 Direct Request ('Forced Browsing')
CWE-441 Unintended Proxy or Intermediary ('Confused Deputy')
CWE-497 Exposure of Sensitive System Information to an Unauthorized Control Sphere
CWE-538 Insertion of Sensitive Information into Externally-Accessible File or Directory
CWE-540 Inclusion of Sensitive Information in Source Code
CWE-548 Exposure of Information Through Directory Listing
CWE-552 Files or Directories Accessible to External Parties
CWE-566 Authorization Bypass Through User-Controlled SQL Primary Key
CWE-601 URL Redirection to Untrusted Site ('Open Redirect')
CWE-639 Authorization Bypass Through User-Controlled Key
CWE-651 Exposure of WSDL File Containing Sensitive Information
CWE-668 Exposure of Resource to Wrong Sphere
CWE-706 Use of Incorrectly-Resolved Name or Reference
CWE-863 Incorrect Authorization
CWE-913 Improper Control of Dynamically-Managed Code Resources