← Back to CVE Explorer

CVE-2026-53595

Full vulnerability record from the local CVENow database.

Description

FreeScout is a free help desk and shared inbox built with PHP's Laravel framework. Prior to version 1.8.224, the public endpoint `POST /user-setup/{hash}/{invite_sent_at}` (`OpenController@userSetupSave`) selects the target account solely by its `invite_hash` column, then overwrites that account's email and password and logs in as it. No authentication, cookie, or prior session is required. After a user activates, FreeScout sets `invite_hash` to the empty string. On MySQL and MariaDB, `VARCHAR` equality ignores trailing spaces, so a single URL-encoded space (`%20`) matches the stored empty string and selects the lowest-id activated user. The expiry guard decrypts `invite_sent_at` with the target's password hash, but `Helper::decrypt` returns its raw input unchanged when decryption fails. A plaintext numeric value such as `9999999999` therefore passes the time-to-live check without any secret. The result is that an anonymous attacker sets the email and password of the lowest-id activated FreeScout account (a support agent, or an administrator if one was added by invitation) and authenticates as that account. Version 1.8.224 contains a fix.

Severity
CRITICAL
CVSS score
9.4 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-07-20 21:16:48.417000
Last modified
2026-10-24 20:10:00.137000
View original CVE JSON
{
  "id": "CVE-2026-53595",
  "sourceIdentifier": "[email protected]",
  "published": "2026-07-20T21:16:48.417",
  "lastModified": "2026-10-24T20:10:00.137",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "FreeScout is a free help desk and shared inbox built with PHP's Laravel framework. Prior to version 1.8.224, the public endpoint `POST /user-setup/{hash}/{invite_sent_at}` (`OpenController@userSetupSave`) selects the target account solely by its `invite_hash` column, then overwrites that account's email and password and logs in as it. No authentication, cookie, or prior session is required. After a user activates, FreeScout sets `invite_hash` to the empty string. On MySQL and MariaDB, `VARCHAR` equality ignores trailing spaces, so a single URL-encoded space (`%20`) matches the stored empty string and selects the lowest-id activated user. The expiry guard decrypts `invite_sent_at` with the target's password hash, but `Helper::decrypt` returns its raw input unchanged when decryption fails. A plaintext numeric value such as `9999999999` therefore passes the time-to-live check without any secret. The result is that an anonymous attacker sets the email and password of the lowest-id activated FreeScout account (a support agent, or an administrator if one was added by invitation) and authenticates as that account. Version 1.8.224 contains a fix."
    },
    {
      "lang": "es",
      "value": "FreeScout es un help desk gratuito y una bandeja de entrada compartida construido con el framework Laravel de PHP. Antes de la versión 1.8.224, el endpoint público ’POST /user-setup/{hash}/{invite_sent_at}’ (’OpenController@userSetupSave’) selecciona la cuenta objetivo únicamente por su columna ’invite_hash’, luego sobrescribe el correo electrónico y la contraseña de esa cuenta e inicia sesión como ella. No se requiere autenticación, cookie ni sesión previa. Después de que un usuario se activa, FreeScout establece ’invite_hash’ a la cadena vacía. En MySQL y MariaDB, la igualdad de ’VARCHAR’ ignora los espacios finales, por lo que un solo espacio codificado en URL (’%20’) coincide con la cadena vacía almacenada y selecciona al usuario activado con el ID más bajo. El guardián de caducidad descifra ’invite_sent_at’ con el hash de la contraseña del objetivo, pero ’Helper::decrypt’ devuelve su entrada bruta sin cambios cuando el descifrado falla. Un valor numérico en texto plano como ’9999999999’ por lo tanto, pasa la verificación de tiempo de vida sin ningún secreto. El resultado es que un atacante anónimo establece el correo electrónico y la contraseña de la cuenta FreeScout activada con el ID más bajo (un agente de soporte, o un administrador si se añadió uno por invitación) y se autentica como esa cuenta. La versión 1.8.224 contiene una corrección."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "freescout-help-desk",
          "product": "freescout",
          "versions": [
            {
              "version": "< 1.8.224",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L",
          "baseScore": 9.4,
          "baseSeverity": "CRITICAL",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "HIGH",
          "availabilityImpact": "LOW"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 5.5
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-07-21T13:20:35.944303Z",
          "id": "CVE-2026-53595",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-178"
        },
        {
          "lang": "en",
          "value": "CWE-287"
        },
        {
          "lang": "en",
          "value": "CWE-640"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/freescout-help-desk/freescout/security/advisories/GHSA-jqj5-r72v-v29g",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/freescout-help-desk/freescout/security/advisories/GHSA-jqj5-r72v-v29g",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}