Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/nccgroup/raccoon
Cloud Infrastructure SecurityVulnerability AnalysisConfiguration AuditingCloud SecurityIdentity & Access Management (IAM)MisconfigurationDatabase Security
GitHubnccgroup/raccoon

raccoon

Salesforce object access auditor

Vedi Repository
11873 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

Raccoon: revisore dell'accesso agli oggetti Salesforce

Rilasciato come open source da NCC Group Plc - https://www.nccgroup.com/

Sviluppato da Jerome Smith @exploresecurity (con ringraziamenti a Viktor Gazdag @wucpi)

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

Rilasciato sotto AGPL - fare riferimento a LICENSE per maggiori informazioni.

Descrizione

Questo strumento determina quali Profili e Set di Autorizzazioni (con utenti attivi) hanno una qualche combinazione di permessi di lettura/modifica/eliminazione su TUTTI i record per un dato insieme di oggetti, in base alla loro condivisione effettiva e alle impostazioni degli oggetti. Da questo output è possibile analizzare le configurazioni errate che potenzialmente consentono un accesso eccessivo a oggetti che contengono dati sensibili. Fare riferimento al post del blog di accompagnamento per il contesto su https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce.

Si consiglia di verificare manualmente i risultati con riferimento diretto alla configurazione di Salesforce e/o testando i Profili e i Set di Autorizzazioni interessati. Qualora vengano riscontrate discrepanze, si prega di segnalare un problema con quanti più dettagli possibile.

Utilizzo

Requisiti:

  • Python 3
  • Il modulo Python requests (coperto da requirements.txt)
  • Un account con almeno i seguenti permessi:
    • 'API Enabled'
    • 'View Setup and Configuration'
    • 'Modify Metadata Through Metadata API Functions' (vedere la nota sui 'Permessi dell'account')
    • Permesso di lettura su tutti gli oggetti da sottoporre a revisione (oppure concedere 'View All Data')
  • Per l'autenticazione, fornire O username + password + (opzionale) token OPPURE sessionId (maggiori dettagli nella sezione Autenticazione).

Creare un file di configurazione JSON (o usare config.json come modello) e compilarlo come richiesto:

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

objects è un elenco di oggetti Salesforce di interesse (cioè i dati a cui si tiene di più). Usare i nomi API formali è il metodo più affidabile ma, se non viene trovata una corrispondenza, Raccoon proverà alcune semplici corrispondenze basate, ad esempio, sull'etichetta visualizzata. Se Raccoon non riesce comunque a trovare una corrispondenza, il programma continuerà ma lo segnalerà nell'output.

checkLimits consente di verificare la disponibilità di chiamate API rimanenti per l'istanza in esame nel periodo mobile di 24 ore. Raccoon effettua relativamente poche chiamate per oggetto (oltre a un numero fisso per esecuzione) ma, per cortesia, questo parametro consente di controllare i propri limiti prima di procedere. Il valore predefinito è true. Il numero totale di possibili richieste rimanenti al punto di controllo non è certo perché il numero di chiamate dipenderà da quanti oggetti hanno un modello di condivisione 'Controlled by Parent'. Il numero indicato presuppone che tutti lo abbiano ed è quindi un massimo.

Eseguire:

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

Autenticazione

Quando si usano nome utente e password, notare che potrebbe essere necessario anche un token di sicurezza (se si proviene da un indirizzo IP esterno agli intervalli di Network Access definiti). Fare riferimento a questo articolo per maggiori informazioni.

L'uso dell'alternativa con ID di sessione è utile in molti casi:

  • Single sign-on, cioè nessun accesso diretto a Salesforce possibile
  • MFA è obbligatoria
  • Difficoltà nell'ottenere un token API (quando necessario)
  • Evita che le credenziali vengano accidentalmente lasciate in un file

Per ottenere l'ID di sessione:

  • Accedere a Salesforce e passare alla modalità Classic se necessario
  • Usare lo strumento Ispeziona del browser per visualizzare i cookie
  • A volte ci sono più cookie sid: assicurarsi di prendere quello il cui attributo Domain include my.salesforce.com o cloudforce.com

Output

Output di esempio (abbreviato e anonimizzato):

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

Raccoon esamina solo i Profili e i Set di Autorizzazioni con utenti attivi per ridurre la verbosità dell'output. Le informazioni relative a questo vengono visualizzate, dopodiché:

  • Le Global Sharing Overrides vengono visualizzate per prime poiché i Profili e i Set di Autorizzazioni a cui è consentito 'View All Data' e 'Modify All Data' hanno diritti su TUTTI gli oggetti.
  • Ogni oggetto viene quindi sottoposto a revisione a turno, considerando prima i privilegi di lettura+modifica+eliminazione, poi lettura+modifica e infine solo lettura. Un Profilo o un Set di Autorizzazioni viene elencato una sola volta nell'output (nella sezione contenente il livello più alto di permessi effettivi). Questo per evitare ripetizioni - ad esempio, è implicito che un Profilo con 'Modify All Data' abbia lettura+modifica+eliminazione su tutti gli oggetti specificati; pertanto, viene mostrato solo sotto "Global Sharing Overrides" e non viene anche elencato nei risultati di ogni oggetto. L'unica eccezione è quando Profili o Set di Autorizzazioni con il privilegio globale 'View All Data' hanno ulteriori permessi di modifica/eliminazione abilitati a livello di oggetto.
  • Per ogni oggetto, viene evidenziata l'esistenza di Sharing Rules ma non viene qualificata ulteriormente.

Se l'assegnazione dei privilegi è stata concessa tramite un Permission Set Group, anziché un singolo Permission Set, un asterisco appare come indicatore di indentazione a sinistra del nome al posto del solito trattino (Accounts PS Group nell'output di esempio precedente). Inoltre, viene mostrato anche se il Profilo o il Set di Autorizzazioni è personalizzato (per i Permission Set, personalizzato significa "creato da un amministratore", altrimenti "è standard e correlato a una specifica licenza di permission set" [ref]).

Sia per la condivisione globale che per quella degli oggetti, i Profili e i Set di Autorizzazioni sono ordinati per riflettere il probabile interesse. Il primo livello di ordinamento riguarda il tipo di utente assegnato - 'guest' (non autenticato) per primo, seguito da 'external' (vari tipi di utente portal) e poi 'internal' (qualsiasi altra cosa). È importante notare che 'external' qui è correlato alla definizione usata nel contesto del 'external sharing model' [ref]. L'idea è di evidenziare una condivisione potenzialmente eccessiva per utenti non autenticati o portal. Tuttavia, è alquanto sperimentale perché la documentazione Salesforce non è esaustiva nel suo elenco di valori validi 'UserType' per l'oggetto 'User' [ref]. Di conseguenza, è possibile che si verifichi una classificazione errata - si prega di segnalare un problema in tal caso. Il secondo livello di ordinamento si basa sul numero di utenti attivi - prima quelli più alti (viene visualizzato anche il numero totale di utenti assegnati per informazione).

Note

L'obiettivo principale di Raccoon è evidenziare i casi di accesso diffuso a tutti i record, e copre:

  • Relazioni Master-Detail in cui la condivisione è 'Controlled by Parent' (ma solo se esiste un'unica relazione Master-Detail e il padre è direttamente sopra il figlio, cioè il modello di condivisione del padre non può essere anch'esso 'Controlled by Parent').
  • Relazioni speciali 'Controlled by Parent' tra Contact/Order/Asset e l'Account padre (che funzionano in modo leggermente diverso dalla normale relazione Master-Detail).
  • Per ribadire, vengono considerati solo i Profili e i Set di Autorizzazioni con utenti attivi.

I seguenti fattori, che influenzano solo un sottoinsieme di record, non vengono valutati:

  • Sharing Rules (anche se la loro esistenza per un oggetto viene segnalata)
  • Sharing Sets
  • Share Groups
  • Condivisione basata sulla gerarchia dei Ruoli
  • Condivisione manuale configurata dagli utenti su singoli record
  • Condivisione 'implicita' (o 'integrata') per alcuni figli di Account quando il suo modello di condivisione è Private
  • Il campo 'private' per un record Opportunity (e il conseguente effetto sulle Quotes correlate)

Alcuni oggetti, come 'User' e 'File', non si adattano al modello di condivisione standard e/o entrano in gioco altri permessi di sistema. I casi noti vengono segnalati nell'output se sono specificati nell'elenco objects.

Le istanze con oltre 2.000 Profili e Set di Autorizzazioni combinati non sono supportate a causa delle limitazioni della piattaforma sull'uso di 'GROUP BY' nelle istruzioni SOQL. Questa è una concessione generosa e dovrebbe rappresentare un blocco solo nei casi più estremi.

Permessi dell'account

Questo strumento esegue solo operazioni di lettura. Potrebbe quindi sorprendere vedere 'Modify Metadata Through Metadata API Functions' come requisito per l'account usato per eseguire lo strumento. Tuttavia, al momento della stesura, non sembra possibile configurare un account con permessi di sola lettura per la Metadata API. Dalla documentazione:

Identificare un utente che dispone del permesso API Enabled e del permesso Modify Metadata Through Metadata API Functions o del permesso Modify All Data. Questi permessi sono necessari per accedere alle chiamate Metadata API. Se un utente richiede l'accesso ai metadati ma non ai dati, abilitare il permesso Modify Metadata Through Metadata API Functions. In caso contrario, abilitare il permesso Modify All Data.

Si suggerisce pertanto di usare 'Modify Metadata Through Metadata API Functions' invece di 'Modify All Data'.

Segnalazione di bug

Se il problema riguarda l'accesso, controllare prima di tutto il nome host, il nome utente, la password e il token di sicurezza (se richiesto). Considerare anche se la password necessita di essere reimpostata (provare il normale accesso web a Salesforce) perché questa condizione restituisce un errore che è indistinguibile da un accesso non valido. Se si usa un ID di sessione, assicurarsi che sia valido per il dominio corretto.

Eseguire lo strumento con debug impostato su 2, poiché l'output dettagliato può aiutare a identificare la causa. Questo livello genera anche uno stack trace in un file indicato nell'output. Quando si segnala un problema, includere sia l'output della console che lo stack trace (anonimizzare come necessario).

Perché 'Raccoon'?

Noto per frugare tra gli oggetti.

Scarica lo strumento