Pular para o conteúdo
Skillpedia
Testes35 mil · #6215

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

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/testing-api-for-broken-object-level-authorization/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/testing-api-for-broken-object-level-authorization/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-authorization

Ou 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.md
Conteú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 requests para 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:

  1. Navegue pela aplicação como Usuário A, utilizando todos os recursos que envolvem criação e recuperação de dados
  2. No Burp, vá para Target > Site Map e filtre por caminhos de API (por exemplo, /api/v1/, /graphql)
  3. Procure por padrões: /api/v1/users/{id}, /api/v1/orders/{order_id}, /api/v1/documents/{doc_uuid}
  4. 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

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#6215
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas