Executive brief
EspoCRM is an open-source customer relationship management platform used by businesses to manage leads, contacts, and events. The application uses PHP's non-cryptographic rand() function to generate tokens for email opt-ins, event invitations, and campaign links. An unauthenticated attacker can guess these roughly 31-bit tokens to confirm opt-ins, accept/decline invitations on behalf of other contacts, and access event details, potentially disrupting business processes and customer relationships.
Technical details
The vulnerability stems from the use of PHP's rand() function (CWE-330, CWE-338) to generate security tokens in application/Espo/Core/Utils/Util.php:585-590 instead of a cryptographically secure random generator. The tokens provide only ~31 bits of entropy (~2 billion possibilities), making them feasible to brute force. Token verification endpoints return different HTTP responses (500 vs 404) for valid vs invalid tokens, creating an oracle that enables efficient brute-force attacks. No rate limiting is implemented on token verification. An unauthenticated remote attacker can exploit this to guess tokens and perform unauthorized actions including confirming opt-ins, accepting/declining event invitations on behalf of other contacts, and accessing event details. EspoCRM versions through 10.0.8 are affected.
Affected products
- EspoCRM EspoCRM through 10.0.8
Timeline
- 2026-09-16: disclosed