testing-api-for-broken-object-level-authorization
Ensina seu agente de IA a testar o código e achar erros antes dos usuários e construir APIs e sistemas de back-end.
O que ela faz
Esta ferramenta verifica se um sistema online (API) permite que um usuário acesse ou modifique dados de outro usuário sem permissão. Ela faz isso testando diferentes identificadores de objetos.
Quando usar
- ✓Ao testar a segurança de um sistema online.
- ✓Quando você quer garantir que usuários não acessem dados uns dos outros.
- ✓Ao verificar se um sistema protege dados individuais corretamente.
Exemplo do que pedir para a IA
“Verifique se a API permite que um usuário A acesse os pedidos do usuário B.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta tenta usar o identificador de um objeto (como um número de pedido) pertencente a um usuário, mas com as credenciais de outro usuário. Se o acesso for permitido, o sistema tem uma falha de segurança.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill testing-api-for-broken-object-level-authorizationOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/testing-api-for-broken-object-level-authorization/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Testando API para Autorização em Nível de Objeto Quebrado (BOLA)
Quando Usar
- Avaliando APIs REST ou GraphQL que usam identificadores de objeto em caminhos de URL, parâmetros de consulta ou corpos de requisição
- Realizando avaliações do OWASP API Security Top 10 onde API1:2023 (BOLA) precisa ser testado
- Testando aplicações SaaS multi-tenant onde usuários de diferentes tenants não devem acessar os dados uns dos outros
- Validando que endpoints de API aplicam verificações de autorização por objeto além da simples autenticação
- Avaliando APIs após a adição de novos endpoints para garantir que o middleware de autorização seja aplicado consistentemente
Não use sem autorização por escrito do proprietário da API. Testes BOLA envolvem acessar ou tentar acessar dados de outros usuários, o que requer permissão explícita.
Pré-requisitos
- Autorização por escrito especificando os endpoints da API alvo e o escopo do teste
- Pelo menos duas contas de teste com níveis de privilégio diferentes e conjuntos de dados distintos
- Burp Suite Professional ou OWASP ZAP configurado como um proxy de interceptação
- Tokens de autenticação (JWT, cookies de sessão, chaves de API) para cada conta de teste
- Documentação da API (especificação OpenAPI/Swagger) ou acesso para enumerar endpoints
- Python 3.10+ com a biblioteca
requestspara testes scriptados - Extensão Autorize do Burp instalada para detecção automatizada de BOLA
Fluxo de Trabalho
Passo 1: Descoberta de Endpoints da API e Mapeamento de IDs de Objeto
Enumere todos os endpoints da API e identifique parâmetros que referenciam objetos:
Da Especificação OpenAPI/Swagger:
# Download and parse the OpenAPI spec
curl -s https://target-api.example.com/api/docs/swagger.json | python3 -m json.tool
# Extract all endpoints with path parameters
curl -s https://target-api.example.com/api/docs/swagger.json | \
python3 -c "
import json, sys
spec = json.load(sys.stdin)
for path, methods in spec.get('paths', {}).items():
for method, details in methods.items():
if method in ('get','post','put','patch','delete'):
params = [p['name'] for p in details.get('parameters',[]) if p.get('in') in ('path','query')]
if params:
print(f'{method.upper()} {path} -> params: {params}')
"
Do Tráfego do Burp Suite:
- Navegue pela aplicação como Usuário A, utilizando todos os recursos que envolvem criação e recuperação de dados
- No Burp, vá para Target > Site Map e filtre por caminhos de API (por exemplo,
/api/v1/,/graphql) - Procure por padrões:
/api/v1/users/{id},/api/v1/orders/{order_id},/api/v1/documents/{doc_uuid} - Observe o formato do ID do objeto: inteiros sequenciais (previsíveis), UUIDs (menos previsíveis) ou valores codificados
Classifique os Tipos de ID de Objeto:
| Tipo de ID | Exemplo | Previsibilidade | Risco BOLA |
|---|---|---|---|
| Inteiro Sequencial | /orders/1042 |
Alta - incrementar/decrementar | Crítico |
| UUID v4 | /orders/550e8400-e29b-41d4-a716-446655440000 |
Baixa - aleatório | Médio (se vazado) |
| Codificado/Hash | /orders/base64encodedvalue |
Média - decodificar e prever | Alta |
| Composto | /users/42/orders/1042 |
Alta - múltiplos IDs para trocar | Crítico |
| Slug | /profiles/john-doe |
Média - adivinhar nomes de usuário | Alta |
Passo 2: Captura de Requisição de Linha de Base com Usuário Autenticado
Capture requisições legítimas para o Usuário A e o Usuário B:
import requests
BASE_URL = "https://target-api.example.com/api/v1"
# Credenciais do Usuário A
user_a_token = "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
user_a_headers = {"Authorization": user_a_token, "Content-Type": "application/json"}
# Credenciais do Usuário B
user_b_token = "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
user_b_headers = {"Authorization": user_b_token, "Content-Type": "application/json"}
# Passo 1: Identificar objetos do Usuário A
user_a_profile = requests.get(f"{BASE_URL}/users/me", headers=user_a_headers)
user_a_id = user_a_profile.json()["id"] # ex: 1001
user_a_orders = requests.get(f"{BASE_URL}/users/{user_a_id}/orders", headers=user_a_headers)
user_a_order_ids = [o["id"] for o in user_a_orders.json()["orders"]] # ex: [5001, 5002]
# Passo 2: Identificar objetos do Usuário B
user_b_profile = requests.get(f"{BASE_URL}/users/me", headers=user_b_headers)
user_b_id = user_b_profile.json()["id"] # ex: 1002
user_b_orders = requests.get(f"{BASE_URL}/users/{user_b_id}/orders", headers=user_b_headers)
user_b_order_ids = [o["id"] for o in user_b_orders.json()["orders"]] # ex: [5003, 5004]
print(f"Usuário A (ID: {user_a_id}): Pedidos {user_a_order_ids}")
…
Perguntas frequentes
O que é BOLA/IDOR?
São falhas de segurança onde um usuário consegue acessar ou modificar dados que não deveria, geralmente trocando um identificador (ID) por outro.
Preciso de permissão para usar esta ferramenta?
Sim, é essencial ter autorização explícita por escrito do dono do sistema antes de realizar qualquer teste.
Quais ferramentas preciso para usar?
Você precisará de ferramentas como Burp Suite ou OWASP ZAP, contas de teste e conhecimento básico de programação.
Detalhes
Descrição original do autor
Tests REST and GraphQL APIs for Broken Object Level Authorization (BOLA/IDOR, OWASP API1:2023) by intercepting API calls, identifying object ID parameters (numeric IDs, UUIDs, slugs), and systematically substituting IDs belonging to other users to check whether the server enforces per-object authorization. Use when asked to test BOLA or IDOR in an API, verify object-level authorization, or assess
Popularidade
- Estrelas no GitHub
- 35 mil
- Posição no ranking
- #6215
- Licença
- Apache-2.0
- Atualizada em
- 31/08/2026
Comentários
- …
Mais skills deste repositório
abusing-dpapi-for-credential-access
Dá ao seu agente de IA instruções prontas para uma tarefa específica, para ele fazer melhor e mais rápido.
mukul975/Anthropic-Cybersecurity-Skills
abusing-shadow-credentials-for-privesc
Ensina seu agente de IA a escrever textos claros e bem estruturados.
mukul975/Anthropic-Cybersecurity-Skills
achieving-cmmc-level-2-compliance
Ajuda seu agente a preparar um ambiente para conformidade com CMMC Nível 2. Ele implementa requisitos de segurança e gerencia a documentação necessária.
mukul975/Anthropic-Cybersecurity-Skills
acquiring-disk-image-with-dd-and-dcfldd
Ajuda seu agente a criar cópias exatas de discos rígidos. Isso é útil para garantir que nenhuma informação seja perdida ou alterada durante investigações.
mukul975/Anthropic-Cybersecurity-Skills
Skills parecidas
cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
affaan-m/ECC
csharp-testing
Ajuda seu agente a criar testes para código C# e .NET. Ele usa as melhores práticas para garantir que os testes sejam eficientes e confiáveis.
affaan-m/ECC
django-tdd
Faz seu agente aplicar estratégias de teste para Django com pytest-django e TDD. É útil para escrever testes robustos e garantir a qualidade do código, especialmente para APIs DRF.
affaan-m/ECC