Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
raccoon — Auditor de acceso a objetos de Salesforce | Kitploit
Herramientas/GitHubGitHub/nccgroup/raccoon
Seguridad de Infraestructura en la NubeAnálisis de VulnerabilidadesAuditoría de ConfiguraciónSeguridad en la NubeGestión de Identidad y Acceso (IAM)Mala ConfiguraciónSeguridad de Bases de Datos
GitHubnccgroup/raccoon

raccoon

Auditor de acceso a objetos de Salesforce

Ver Repositorio
11875hace 3 añosRevisado por Kitploit
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Raccoon: auditor de acceso a objetos de Salesforce

Publicado como código abierto por NCC Group Plc - https://www.nccgroup.com/

Desarrollado por Jerome Smith @exploresecurity (con agradecimientos a Viktor Gazdag @wucpi)

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

Publicado bajo AGPL - consulte LICENSE para más información.

Descripción

Esta herramienta determina qué Perfiles y Conjuntos de Permisos (con usuarios activos) tienen alguna combinación de permisos de lectura/edición/eliminación sobre TODOS los registros de un conjunto determinado de objetos, basándose en su uso compartido efectivo y en la configuración de los objetos. A partir de esta salida, se pueden investigar configuraciones incorrectas que potencialmente permiten un acceso excesivo a objetos que contienen datos sensibles. Consulte la publicación de blog adjunta para obtener los antecedentes en https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce.

Se recomienda verificar los resultados manualmente con referencia directa a la configuración de Salesforce y/o probando los Perfiles y Conjuntos de Permisos afectados. Si se encuentran discrepancias, por favor notifique un problema con el mayor detalle posible.

Uso

Requisitos:

  • Python 3
  • El módulo requests de Python (cubierto por requirements.txt)
Descargar herramienta
  • Una cuenta con los siguientes permisos mínimos:
    • 'API Enabled'
    • 'View Setup and Configuration'
    • 'Modify Metadata Through Metadata API Functions' (consulte la nota sobre 'Permisos de la cuenta')
    • Permiso de lectura en todos los objetos a auditar (o conceda 'View All Data')
  • Para la autenticación, proporcione O BIEN username + password + (opcional) token O sessionId (más detalles en la sección Autenticación).
  • Cree un archivo de configuración JSON (o use config.json como plantilla) y complételo según sea necesario:

    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 es una lista de objetos de Salesforce de interés (es decir, los datos que más le importan). Usar los nombres formales de la API es el método más fiable pero, si no se encuentra una coincidencia, Raccoon intentará algunas coincidencias simples basadas, por ejemplo, en la etiqueta mostrada. Si Raccoon aún no logra encontrar una coincidencia, el programa continuará pero lo señalará en la salida.

    checkLimits le permite verificar el saldo de llamadas a la API restantes para la instancia bajo investigación dentro del período móvil de 24 horas. Raccoon realiza relativamente pocas llamadas por objeto (además de un número fijo por ejecución) pero, como cortesía, este parámetro le permite verificar sus límites antes de continuar. El valor predeterminado es true. El número total de solicitudes posibles restantes en el punto de control no es seguro porque el número de llamadas dependerá de cuántos objetos tengan un modelo de uso compartido 'Controlled by Parent'. El número indicado asume que todos lo tienen y, por lo tanto, es un máximo.

    Ejecute:

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

    Autenticación

    Cuando se utilizan un nombre de usuario y una contraseña, tenga en cuenta que también puede ser necesario un token de seguridad (si se accede desde una dirección IP fuera de los rangos definidos de Network Access). Consulte este artículo para más información.

    Usar la alternativa del ID de sesión es útil en muchos casos:

    • Inicio de sesión único, es decir, no es posible iniciar sesión directamente en Salesforce
    • Se aplica MFA
    • Problemas para obtener un token de API (cuando sea necesario)
    • Evita que las credenciales queden accidentalmente en un archivo

    Para obtener el ID de sesión:

    • Inicie sesión en Salesforce y cambie al modo Classic si es necesario
    • Use la herramienta Inspeccionar del navegador para mostrar las cookies
    • A veces hay múltiples cookies sid: asegúrese de tomar la que tenga el atributo Domain que incluya my.salesforce.com o cloudforce.com

    Salida

    Salida de ejemplo (resumida y 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
    

    Raccoon sólo examina Perfiles y Conjuntos de Permisos con usuarios activos para reducir la verbosidad de su salida. La información sobre esto se muestra, después de lo cual:

    • Las Invalidaciones de Uso Compartido Global (Global Sharing Overrides) se muestran primero, ya que los Perfiles y Conjuntos de Permisos a los que se les permite 'View All Data' y 'Modify All Data' tienen derechos sobre TODOS los objetos.
    • Luego se audita cada objeto por turno, considerándose primero los privilegios de lectura+edición+eliminación, luego lectura+edición y, por último, sólo lectura. Un Perfil o Conjunto de Permisos se lista sólo una vez dentro de la salida (en la sección que contiene el conjunto más alto de permisos efectivos). Esto es para evitar repeticiones; por ejemplo, es implícito que un Perfil con 'Modify All Data' tiene lectura+edición+eliminación en todos los objetos especificados; por lo tanto, sólo se muestra bajo "Global Sharing Overrides", no se lista también en los resultados de cada objeto. La única excepción es cuando los Perfiles o Conjuntos de Permisos con el privilegio global 'View All Data' tienen permisos adicionales de edición/eliminación habilitados a nivel de objeto.
    • Para cada objeto, se resalta la existencia de Reglas de Uso Compartido (Sharing Rules) pero no se califica más.

    Si la asignación de privilegios se ha concedido a través de un Grupo de Conjuntos de Permisos, en lugar de un único Conjunto de Permisos, aparece un asterisco como marcador de sangría a la izquierda del nombre en lugar del guion habitual (Accounts PS Group en la salida de ejemplo anterior). Además, también se muestra si el Perfil o Conjunto de Permisos es personalizado (para Conjuntos de Permisos, personalizado significa "creado por un administrador"; de lo contrario, "es estándar y está relacionado con una licencia de conjunto de permisos específica" [ref]).

    Tanto para el uso compartido global como para el de objetos, los Perfiles y Conjuntos de Permisos se ordenan para reflejar el interés probable. El primer nivel de ordenación se refiere al tipo de usuario asignado: 'guest' (no autenticado) primero, seguido de 'external' (varios tipos de usuario de portal) y luego 'internal' (cualquier otro). Es importante tener en cuenta que 'external' aquí está relacionado con la definición utilizada en el contexto del 'modelo de uso compartido externo' [ref]. La idea es resaltar el uso compartido potencialmente excesivo para usuarios no autenticados o de portal. Sin embargo, es algo experimental porque la documentación de Salesforce no es exhaustiva en su lista de valores válidos de 'UserType' para el objeto 'User' [ref]. Como resultado, es posible que se produzca una clasificación errónea; en tal caso, por favor notifique un problema. El segundo nivel de ordenación se basa en el número de usuarios activos: el mayor primero (el número total de usuarios asignados también se muestra como información).

    Notas

    El objetivo principal de Raccoon es resaltar casos de acceso generalizado a todos los registros, y cubre:

    • Relaciones Master-Detail donde el uso compartido es 'Controlled by Parent' (pero sólo si hay una única relación Master-Detail y el padre está directamente por encima del hijo, es decir, el modelo de uso compartido del padre tampoco puede ser 'Controlled by Parent').
    • Relaciones especiales 'Controlled by Parent' entre Contact/Order/Asset y el Account padre (que funcionan de forma ligeramente diferente a la relación Master-Detail normal).
    • Para reiterar, sólo se consideran Perfiles y Conjuntos de Permisos con usuarios activos.

    Los siguientes factores, que afectan sólo a un subconjunto de registros, no se evalúan:

    • Reglas de Uso Compartido (aunque su existencia para un objeto se señala)
    • Conjuntos de Uso Compartido (Sharing Sets)
    • Grupos de Uso Compartido (Share Groups)
    • Uso compartido basado en la jerarquía de Roles
    • Uso compartido manual configurado por usuarios en registros individuales
    • Uso compartido 'implícito' (o 'integrado') para ciertos hijos de Account cuando su modelo de uso compartido es Privado
    • El campo 'private' para un registro de Opportunity (y el consiguiente efecto en las Quotes relacionadas)

    Ciertos objetos, como 'User' y 'File', no se ajustan al modelo de uso compartido estándar y/o entran en juego otros permisos del sistema. Los casos conocidos se señalan en la salida si se especifican en la lista objects.

    Las instancias con más de 2.000 Perfiles y Conjuntos de Permisos combinados no son compatibles debido a limitaciones de la plataforma en el uso de 'GROUP BY' en sentencias SOQL. Esta es una asignación generosa y sólo debería ser un obstáculo en los casos más extremos.

    Permisos de la cuenta

    Esta herramienta sólo realiza operaciones de lectura. Por lo tanto, podría ser sorprendente ver 'Modify Metadata Through Metadata API Functions' como requisito para la cuenta utilizada para ejecutar la herramienta. Sin embargo, al momento de escribir esto, no parece posible configurar una cuenta con permisos de sólo lectura para la Metadata API. De la documentación:

    Identify a user that has the API Enabled permission and the Modify Metadata Through Metadata API Functions permission or Modify All Data permission. These permissions are required to access Metadata API calls. If a user requires access to metadata but not to data, enable the Modify Metadata Through Metadata API Functions permission. Otherwise, enable the Modify All Data permission.

    Por lo tanto, se sugiere usar 'Modify Metadata Through Metadata API Functions' en lugar de 'Modify All Data'.

    Notificación de errores

    Si el problema es con el inicio de sesión, primero verifique dos veces el nombre de host, el nombre de usuario, la contraseña y el token de seguridad (si es necesario). También considere si la contraseña necesita restablecerse (pruebe el inicio de sesión web habitual de Salesforce) porque esta condición devuelve un error que es indistinguible de un inicio de sesión no válido. Si utiliza un ID de sesión, asegúrese de que sea válido para el dominio correcto.

    Ejecute la herramienta con debug establecido en 2, ya que la salida detallada puede ayudar a identificar la causa. Este nivel también genera un volcado de pila (stack trace) en un archivo cuyo nombre se indica en la salida. Si notifica un problema, incluya tanto la salida de consola como el volcado de pila (anonimice según sea necesario).

    ¿Por qué 'Raccoon'?

    Conocido por hurgar entre los objetos.