Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
raccoon — Salesforce object access auditor | Kitploit
Ferramentas/GitHubGitHub/nccgroup/raccoon
Cloud Infrastructure SecurityVulnerability AnalysisConfiguration AuditingCloud SecurityIdentity & Access Management (IAM)MisconfigurationDatabase Security
GitHubnccgroup/raccoon

raccoon

Salesforce object access auditor

Ver Repositório
1187há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Site

Raccoon: auditor de acesso a objetos do Salesforce

Lançado como código aberto pela NCC Group Plc - https://www.nccgroup.com/

Desenvolvido por Jerome Smith @exploresecurity (com agradecimentos a Viktor Gazdag @wucpi)

https://www.github.com/nccgroup/raccoon

Lançado sob AGPL - consulte LICENSE para mais informações.

Descrição

Esta ferramenta determina quais Perfis e Conjuntos de Permissões (com utilizadores ativos) têm alguma combinação de permissões de leitura/edição/eliminação em TODOS os registos para um determinado conjunto de objetos, com base nas suas definições eficazes de partilha e de objetos. A partir desta saída, podem ser investigadas más configurações que potencialmente permitem acesso excessivo a objetos que contêm dados sensíveis. Consulte a publicação do blogue que acompanha esta ferramenta para contexto em https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce.

Recomenda-se que os resultados sejam verificados manualmente com referência direta à configuração do Salesforce e/ou testando os Perfis e Conjuntos de Permissões afetados. Caso sejam encontradas discrepâncias, comunique um problema com o máximo de detalhe possível.

Utilização

Requisitos:

  • Python 3
  • O módulo requests do Python (abrangido por requirements.txt)
  • Uma conta com as seguintes permissões mínimas:
    • 'API Enabled'
    • 'View Setup and Configuration'
    • 'Modify Metadata Through Metadata API Functions' (ver nota sobre 'Permissões da conta')
    • Permissão de leitura em todos os objetos a auditar (ou conceda 'View All Data')
  • Para autenticação, forneça OU username + password + (opcional) token OU sessionId (mais detalhes na secção Autenticação).

Crie um ficheiro de configuração JSON (ou utilize config.json como modelo) e preencha conforme necessário:

root@kitploit:~
{
	"hostname": "somewhere.my.salesforce.com",
	"username": "",
	"password": "",
	"token": "<optional token>",
	"sessionId": "",
	"objects": ["Account", "Contact"],
	"checkLimits": true,
	"debug": <optional debug level (0, 1 or 2)>
}

objects é uma lista de objetos do Salesforce de interesse (ou seja, os dados que mais lhe interessam). Utilizar os nomes formais da API é o método mais fiável, mas, caso não seja encontrada uma correspondência, o Raccoon tentará algumas correspondências simples baseadas, por exemplo, no rótulo de exibição. Se o Raccoon ainda assim não encontrar uma correspondência, o programa continuará, mas assinalará isso na saída.

checkLimits permite-lhe verificar a quantidade de chamadas de API restantes para a instância em investigação no período contínuo de 24 horas. O Raccoon faz relativamente poucas chamadas por objeto (além de um número fixo por execução), mas, como cortesia, este parâmetro permite-lhe verificar os seus limites antes de prosseguir. O valor predefinido é true. O número total de pedidos possíveis restantes no ponto de verificação não é certo porque o número de chamadas dependerá de quantos objetos têm um modelo de partilha 'Controlled by Parent'. O número indicado assume que todos o têm e, portanto, é um máximo.

Execute:

root@kitploit:~
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>

Autenticação

Ao utilizar um nome de utilizador e palavra-passe, note que um token de segurança também pode ser necessário (se estiver a aceder a partir de um endereço IP fora de quaisquer intervalos de Acesso à Rede definidos). Consulte este artigo para mais informações.

Utilizar a alternativa do ID de sessão é útil em muitos casos:

  • Single sign-on, ou seja, não é possível iniciar sessão diretamente no Salesforce
  • MFA é obrigatório
  • Dificuldade em obter um token de API (quando necessário)
  • Evita que as credenciais fiquem acidentalmente num ficheiro

Para obter o ID de sessão:

  • Inicie sessão no Salesforce e mude para o modo Clássico, se necessário
  • Utilize a ferramenta Inspecionar do navegador para exibir os cookies
  • Às vezes existem vários cookies sid: certifique-se de que obtém aquele cujo atributo Domain inclui my.salesforce.com ou cloudforce.com

Saída

Exemplo de saída (resumida e anonimizada):

root@kitploit:~
Raccoon - Salesforce object access auditor
- version 1.0
- https://www.github.com/nccgroup/raccoon
* Refer to README for usage notes including important limitations *

Target instance: somewhere.my.salesforce.com
- Login successful

4,969,529 API requests can be sent to this instance from a 24-hour limit of 5,000,000
- Up to 33 further requests are required to complete (3 requests sent so far)
- Do you want to continue? Enter 'y' to proceed: y

Validating objects
- Found object 'Accounts' with API name 'Account'
- Found object 'Contact' with API name 'Contact'
- Found object 'Quotes' with API name 'Quote__c'
- Found object 'Quote Lines' with API name 'QuoteLine__c'

Evaluating 28 Profiles and 104 Permission Sets
- Profiles with active users: 15
- Permission Sets with active users: 67
- Ignoring 50 unused Profiles and Permission Sets

Global Sharing Overrides (ALL records for ALL objects)
------------------------------------------------------

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - System Administrator                              61/91                    [I]

  READ
  Profiles
  - Integration User                         [C]      1/1                      [I]
  - Analytics Cloud Integration User                  1/1                      [I]

Object Sharing (ALL records for EACH object)
--------------------------------------------

Account:
  Organization-wide default sharing
  - Internal: Public Read Only
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Integration User                         [C]      1/1                      [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

  READ
  Profiles
  - Read Only                                [C]      192/199                  [I]
  - Sales User                               [C]      192/248                  [I]
  - Finance User                             [C]      16/20                    [I]
  - Standard User                                     6/3075                   [I]
  Permission Sets (* Groups)
  * Accounts PS Group                        [C]      36/39                    [I]
  - Sales Operations                         [C]      24/26                    [I]
  - SharePoint User                          [C]      3/4                      [I]

  Sharing Rules (manual check required):
  - Criteria-based rules configured
  - Ownership-based rules configured

Contact:
  Organization-wide default sharing
  - Internal: Controlled by Parent
  - External: <Undefined>
  Parent object: 'Account'
  - Internal: Public Read Only
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Integration User                                  1/1                      [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

  READ
  Profiles
  - Read Only                                [C]      192/199                  [I]
  - Sales User                               [C]      192/248                  [I]
  - Finance User                             [C]      16/20                    [I]
  - Standard User                                     6/3075                   [I]
  Permission Sets (* Groups)
  - Sales Operations                         [C]      24/26                    [I]

Quote__c:
  Organization-wide default sharing
  - Internal: Public Read/Write
  - External: <Undefined>

  READ/EDIT                                  [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Sales User                               [C]      192/248                  [I]

  READ
  Profiles
  - Finance User                             [C]      16/20                    [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

QuoteLine__c:
  Organization-wide default sharing
  - Internal: Controlled by Parent
  - External: <Undefined>
  Parent object: 'Quote__c'
  - Internal: Public Read/Write
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Sales User                               [C]      192/248                  [I]

  READ
  Profiles
  - Finance User                             [C]      16/20                    [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

Total API requests sent: 31

O Raccoon apenas examina Perfis e Conjuntos de Permissões com utilizadores ativos para reduzir a verbosidade da sua saída. As informações sobre isso são apresentadas, após o que:

  • As Subposições Globais de Partilha são apresentadas primeiro porque os Perfis e Conjuntos de Permissões que têm permissão para 'View All Data' e 'Modify All Data' têm direitos sobre TODOS os objetos.
  • Cada objeto é então auditado, considerando primeiro os privilégios de leitura+edição+eliminação, depois leitura+edição e, por último, apenas leitura. Um Perfil ou Conjunto de Permissões é listado apenas uma vez na saída (na secção que contém o conjunto mais alto de permissões eficazes). Isto evita repetição - por exemplo, é implícito que um Perfil com 'Modify All Data' tem leitura+edição+eliminação em todos os objetos especificados; portanto, é mostrado apenas em "Global Sharing Overrides" e não é também listado nos resultados de cada objeto. A única exceção é quando Perfis ou Conjuntos de Permissões com o privilégio global 'View All Data' têm permissões adicionais de edição/eliminação ativadas ao nível do objeto.
  • Para cada objeto, a existência de Regras de Partilha é destacada, mas não é caracterizada mais detalhadamente.

Se a atribuição de privilégios tiver sido concedida através de um Grupo de Conjuntos de Permissões, em vez de um único Conjunto de Permissões, um asterisco aparece como marcador de indentação à esquerda do nome, em vez do hífen habitual (Accounts PS Group no exemplo de saída acima). Além disso, também é indicado se o Perfil ou Conjunto de Permissões é personalizado (para Conjuntos de Permissões, personalizado significa "criado por um administrador"; caso contrário, "é padrão e está relacionado a uma licença específica de conjunto de permissões" [ref]).

Tanto para a partilha global como para a partilha de objetos, os Perfis e Conjuntos de Permissões são ordenados para refletir o provável interesse. O primeiro nível de ordenação diz respeito ao tipo de utilizador atribuído - 'convidado' (não autenticado) primeiro, seguido de 'externo' (vários tipos de utilizador de portal) e depois 'interno' (qualquer outro). É importante notar que 'externo' aqui está relacionado com a definição utilizada no contexto do 'modelo de partilha externo' [ref]. A ideia é destacar partilha potencialmente excessiva para utilizadores não autenticados ou de portal. No entanto, é algo experimental porque a documentação do Salesforce não é exaustiva na sua lista de valores 'UserType' válidos para o objeto 'User' [ref]. Como resultado, é possível que ocorra uma classificação incorreta - nesse caso, comunique um problema. O segundo nível de ordenação é baseado no número de utilizadores ativos - primeiro os mais elevados (o número total de utilizadores atribuídos também é apresentado para informação).

Notas

O principal objetivo do Raccoon é destacar casos de acesso generalizado a todos os registos, e abrange:

  • Relações Master-Detail em que a partilha é 'Controlled by Parent' (mas apenas se existir uma única relação Master-Detail e o pai estiver diretamente acima do filho, ou seja, o modelo de partilha do pai também não pode ser 'Controlled by Parent').
  • Relações especiais 'Controlled by Parent' entre Contact/Order/Asset e a Conta (Account) pai (que funcionam de forma ligeiramente diferente da relação Master-Detail normal).
  • Para reiterar, apenas Perfis e Conjuntos de Permissões com utilizadores ativos são considerados.

Os seguintes fatores, que afetam apenas um subconjunto de registos, não são avaliados:

  • Regras de Partilha (embora a sua existência para um objeto seja assinalada)
  • Conjuntos de Partilha
  • Grupos de Partilha
  • Partilha baseada na hierarquia de cargos
  • Partilha manual configurada por utilizadores em registos individuais
  • Partilha 'implícita' (ou 'incorporada') para determinados filhos da Account quando o seu modelo de partilha é Private
  • O campo 'private' para um registo de Opportunity (e o efeito consequente em Quotes relacionadas)

Certos objetos, como 'User' e 'File', não se enquadram no modelo de partilha padrão e/ou outras permissões do sistema entram em jogo. Os casos conhecidos são assinalados na saída se forem especificados na lista objects.

Instâncias com mais de 2.000 Perfis e Conjuntos de Permissões combinados não são suportadas devido a limitações da plataforma no uso de 'GROUP BY' em declarações SOQL. Esta é uma margem generosa e só deve ser um bloqueio nos casos mais extremos.

Permissões da conta

Esta ferramenta apenas realiza operações de leitura. Portanto, pode ser surpreendente ver 'Modify Metadata Through Metadata API Functions' como requisito para a conta utilizada para executar a ferramenta. No entanto, no momento em que isto é escrito, não parece ser possível configurar uma conta com permissões apenas de leitura para a Metadata API. A partir da documentação:

Identifique um utilizador que tenha a permissão API Enabled e a permissão Modify Metadata Through Metadata API Functions ou a permissão Modify All Data. Estas permissões são necessárias para aceder a chamadas da Metadata API. Se um utilizador precisar de acesso aos metadados, mas não aos dados, ative a permissão Modify Metadata Through Metadata API Functions. Caso contrário, ative a permissão Modify All Data.

É portanto sugerido que 'Modify Metadata Through Metadata API Functions' seja utilizado em vez de 'Modify All Data'.

Comunicar problemas

Se o problema for com o início de sessão, verifique primeiro novamente o hostname, o nome de utilizador, a palavra-passe e o token de segurança (se necessário). Considere também se a palavra-passe precisa de ser reposta (tente o início de sessão habitual na web do Salesforce), porque esta condição devolve um erro indistinguível de um início de sessão inválido. Se estiver a utilizar um ID de sessão, certifique-se de que é válido para o domínio correto.

Execute a ferramenta com debug definido como 2, pois a saída verbosa pode ajudar a identificar a causa. Este nível também envia um stack trace para um ficheiro cujo nome é indicado na saída. Se comunicar um problema, inclua tanto a saída da consola como o stack trace (anonimize conforme necessário).

Porquê 'Raccoon'?

Conhecido por vasculhar objetos.

Baixar ferramenta