Salesforce
Salesforce representa una plataforma de Customer Relationship Management (CRM) basada en la nube que utiliza arquitecturas multi-tenant y tecnologías web modernas como Aura Framework y Lightning Web Components (LWC).
La plataforma implementa un modelo de seguridad basado en perfiles, conjuntos de permisos y configuraciones de sharing, creando múltiples vectores de enumeración y potencial elevación de privilegios. Los componentes Aura, en particular, exponen endpoints específicos que pueden ser explotados para reconocimiento avanzado y extracción de información, mientras que las clases Apex y consultas SOQL presentan oportunidades de explotación del lado servidor.
Reconocimiento
Identificación de componentes Aura
Los componentes Aura constituyen el framework JavaScript de Salesforce para desarrollo de aplicaciones dinámicas. La identificación de objetivos comienza con enumeración DNS para dominios que terminan en *.force.com, *.secure.force.com y *.live.siteforce.com.
Los componentes Aura constituyen el framework JavaScript de Salesforce para desarrollo de aplicaciones dinámicas.
Rutas comunes
/s/sfsites/aura
/aura
/sfsites/aura
/sales/auraIdentificadores de contenido Aura
"actions":[
aura:clientOutOfSync
aura:invalidSession
aura.context
aura.token
aura.fwuid
markup://Descriptores de enumeración interesantes
Los controladores Aura exponen funcionalidades específicas para extracción de metadatos y enumeración de objetos:
HostConfigController
Devuelve datos de app con lista de objetos accesibles y a menudo objetos personalizados bajo apiNamesToKeyPrefixes, sin parámetros.
OneController
Devuelve información de la app y a veces un listado extendido de objetos, sin parámetros.
RecordUiController
Definición completa de objeto, campos, relaciones y permisos por perfil
Dado objectApiName, devuelve definición del objeto, campos y relaciones, útil para validar acceso por perfil/usuario.
SelectableListDataProviderController
Enumeración de registros con paginación.
Parámetros: entityNameOrId, pageSize (máximo 1000), layoutType (FULL para máxima información)
DetailController
Recupera un registro por recordId cuando existen permisos.
ScopedResultsDataProviderController
Búsqueda para términos de al menos 4 caracteres.
ProfileMenuController
Detalles menores del usuario actual, ayuda a confirmar contexto de permisos.
ListUiController
Enumera listas definidas para un objeto, útil para comprender vistas disponibles.
Enumeración de objetos
El payload mostrado para HostConfigController retorna apiNamesToKeyPrefixes, donde __c indica objetos personalizados; este paso funciona tanto para invitado como autenticado según configuración de la comunidad.
Los objetos pueden ser enumerados modificando el parámetro message por el siguiente payload:
En este caso, no es necesario usar codificación URL (URL encoding) en el payload del parámetro message para enviarlo en la petición.
Se pueden extraer los objetos personalizados debido a que la cadena termina con __c, por lo que, usando el siguiente comando, se puede obtener la lista de objetos:
La lista completa de objetos en Salesforce se puede consultar en:
https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm
Si se quiere obtener la lista actualizada de objetos de Salesforce, puedes usar tu IA de confianza para extraer la información con el siguiente prompt:
Esto dará una lista como la siguiente:
Uniendo la lista de objetos por defecto y la lista de objetos personalizados, se podrá crear una lista que luego se podrá usar con intruder para obtener los registros de dichos objetos.
Enumeración de registros de objetos
Con intruder (Burp Suite) es posible automatizar la obtención de información de cada uno de los objetos:
Se copia la lista en la sección de "Payloads" de intruder, seleccionando la opción de "Simple list".
Se modifica el parámetro
messagede la petición con el siguiente payload.Se cambia itera sobre el valor de
entityNameOrId.Se modifica
pageSizecon un valor en el rango 100–1000 ycurrentPagepara paginar.
Ejemplo de json de la respuesta:
Si se copia el json de la respuesta, es posible filtrar con jd el resultado obtenido. Por ejemplo:
Obtención de identificadores de registros:
Patrones de IDs y prefijos
Los identificadores de Salesforce implementan un esquema de prefijos de 3 caracteres seguidos de 15 dígitos alfanuméricos (case-sensitive):
Prefijos estándar críticos:
005: User500: Case001: Account003: Contact00Q: Leada00: Custom Objects (variable)
En los siguientes enlaces se encuentran los identificadores por defecto:
Generación de patrones para brute force:
Si se quiere identificar cuáles son los caracteres que varían en los identificadores para posteriormente realizar un ataque de fuerza bruta para obtener identificadores no conocidos, se puede usar el siguiente comando:
Ejemplo de salida:
Vulnerabilidades
Acceso como usuario invitado
El contexto de usuario invitado representa el vector de ataque más crítico, ya que el acceso no autenticado ocurre cuando aura.token=null o aura.token=undefined. Esta configuración permite a los atacantes explotar permisos de objeto mal configurados, ejecutar métodos Apex privilegiados y extraer datos sensibles sin autenticación.
Referencia directa segura a objetos
Los ataques de Insecure Direct Object Reference (IDOR) en Salesforce trascienden la simple modificación de parámetros. La plataforma implementa múltiples capas de control de acceso que incluyen permisos a nivel de objeto, campo y registro.
Acceso a información de objetos no autorizados, por ejemplo, habiendo iniciado sesión con el usuario A, modificar el recordId por el del usuario B.
recordId: "0015g00000A7T3AAK"→ Usuario ArecordId: "0015g00000B5T7BBL"→ Usuario B
Aunque se pueda acceder, hay que verificar que realmente sea información que no deba estar accesible para el usuario.
Exposición de información sensible vía token y contexto
Los parámetros aura.context (base64) y aura.token (jwt) están codificados en urlencode y base64, por lo que, se puede decodificar el contenido de los mismos y buscar información sensible que pueda estar expuesta.
XSS
Inyección SOQL
SOQL (Salesforce Object Query Language) difiere significativamente del SQL tradicional pero sigue siendo vulnerable a ataques de inyección cuando la entrada del usuario se concatena directamente en las consultas.
Técnicas de inyección basadas en errores explotan parámetros contentDocumentId a través de análisis de mensajes de respuesta:
Documento válido: "Cannot invoke 'common.udd.EntityInfo.getEntityId()'"
Documento inválido: "Error in retrieving content document"
Referencias
Última actualización
¿Te fue útil?