2026-07-27 21:37CVE-2026-59240Secur0
PUBLISHED5.2CWE-639x_open-source

IDOR in Prospero Flow CRM allows deletion of other users' notifications

The vulnerability involves an Insecure Direct Object Reference (IDOR) in the `DeleteNotificationController::delete()` method at endpoint `GET /notification/delete/{id}`. The flaw allows any authenticated user, regardless of company or permissions, to delete notifications belonging to any other user in the system. The controller retrieves the target record with `Notification::findOrFail($id)` and deletes it without validating `user_id` or `company_id` ownership, unlike the sibling `SetNotificationReadAjaxController`, which correctly scopes lookups by `Auth::id()`. Because notification identifiers are sequential, an attacker can iterate over IDs to systematically delete notifications belonging to any user, denying them visibility of ticket alerts, task assignments, and other system events.

Problem type

Affected products

Roskus

Prospero Flow CRM

< 5.5.1 - AFFECTED

References

GitHub Security Advisories

GHSA-m6x4-f6j4-9qq6

The vulnerability involves an Insecure Direct Object Reference (IDOR) in the ...

https://github.com/advisories/GHSA-m6x4-f6j4-9qq6

The vulnerability involves an Insecure Direct Object Reference (IDOR) in the DeleteNotificationController::delete() method at endpoint GET /notification/delete/{id}. The flaw allows any authenticated user, regardless of company or permissions, to delete notifications belonging to any other user in the system. The controller retrieves the target record with Notification::findOrFail($id) and deletes it without validating user_id or company_id ownership, unlike the sibling SetNotificationReadAjaxController, which correctly scopes lookups by Auth::id(). Because notification identifiers are sequential, an attacker can iterate over IDs to systematically delete notifications belonging to any user, denying them visibility of ticket alerts, task assignments, and other system events.

JSON source

https://cveawg.mitre.org/api/cve/CVE-2026-59240
Click to expand
{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "cveMetadata": {
    "cveId": "CVE-2026-59240",
    "assignerOrgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
    "assignerShortName": "Secur0",
    "dateUpdated": "2026-07-28T14:19:25.325Z",
    "dateReserved": "2026-07-03T11:24:39.242Z",
    "datePublished": "2026-07-27T21:37:33.747Z",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "providerMetadata": {
        "orgId": "4daa8cea-433a-44bd-9456-53b127fc289a",
        "shortName": "Secur0",
        "dateUpdated": "2026-07-27T21:37:33.747Z"
      },
      "datePublic": "2026-07-27T15:11:00.000Z",
      "title": "IDOR in Prospero Flow CRM allows deletion of other users' notifications",
      "descriptions": [
        {
          "lang": "en",
          "value": "The vulnerability involves an Insecure Direct Object Reference (IDOR) in the `DeleteNotificationController::delete()` method at endpoint `GET /notification/delete/{id}`. The flaw allows any authenticated user, regardless of company or permissions, to delete notifications belonging to any other user in the system. The controller retrieves the target record with `Notification::findOrFail($id)` and deletes it without validating `user_id` or `company_id` ownership, unlike the sibling `SetNotificationReadAjaxController`, which correctly scopes lookups by `Auth::id()`. Because notification identifiers are sequential, an attacker can iterate over IDs to systematically delete notifications belonging to any user, denying them visibility of ticket alerts, task assignments, and other system events.",
          "supportingMedia": [
            {
              "type": "text/html",
              "base64": false,
              "value": "The vulnerability involves an Insecure Direct Object Reference (IDOR) in the `DeleteNotificationController::delete()` method at endpoint `GET /notification/delete/{id}`. The flaw allows any authenticated user, regardless of company or permissions, to delete notifications belonging to any other user in the system. The controller retrieves the target record with `Notification::findOrFail($id)` and deletes it without validating `user_id` or `company_id` ownership, unlike the sibling `SetNotificationReadAjaxController`, which correctly scopes lookups by `Auth::id()`. Because notification identifiers are sequential, an attacker can iterate over IDs to systematically delete notifications belonging to any user, denying them visibility of ticket alerts, task assignments, and other system events."
            }
          ]
        }
      ],
      "affected": [
        {
          "vendor": "Roskus",
          "product": "Prospero Flow CRM",
          "collectionURL": "https://github.com/Roskus/prospero-flow-crm",
          "programFiles": [
            "app/Http/Controllers/Notification/DeleteNotificationController.php"
          ],
          "repo": "https://github.com/Roskus/prospero-flow-crm",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "1.0.0",
              "status": "affected",
              "versionType": "semver",
              "lessThan": "5.5.1"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "lang": "en",
              "description": "CWE-639 Authorization bypass through User-Controlled key",
              "cweId": "CWE-639",
              "type": "CWE"
            }
          ]
        }
      ],
      "references": [
        {
          "url": "https://github.com/Roskus/prospero-flow-crm/commit/eaee2ae018701d116164976cbfa37fa9294ab4cc",
          "tags": [
            "patch"
          ]
        },
        {
          "url": "https://github.com/Roskus/prospero-flow-crm/releases/tag/v5.5.3",
          "tags": [
            "release-notes"
          ]
        },
        {
          "url": "https://secur0.com/en/cna/cve-list/cve-2026-59240-idor-in-prospero-flow-crm-allows-deletion-of-other-users-notifications",
          "tags": [
            "technical-description"
          ]
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-122",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-122 Privilege Abuse"
            }
          ]
        }
      ],
      "metrics": [
        {
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "solutions": [
        {
          "lang": "en",
          "value": "Upgrade to version 5.5.1 or higher.",
          "supportingMedia": [
            {
              "type": "text/html",
              "base64": false,
              "value": "Upgrade to version 5.5.1 or higher."
            }
          ]
        }
      ],
      "credits": [
        {
          "lang": "en",
          "value": "Dario Rivas Quero",
          "type": "finder"
        },
        {
          "lang": "en",
          "value": "Cristian Fernandez Cornejo",
          "type": "analyst"
        },
        {
          "lang": "en",
          "value": "Xoan M. Otero Jorge",
          "type": "analyst"
        },
        {
          "lang": "en",
          "value": "Gustavo Novaro",
          "type": "remediation developer"
        },
        {
          "lang": "en",
          "value": "Secur0 CNA",
          "type": "coordinator"
        }
      ],
      "tags": [
        "x_open-source"
      ]
    },
    "adp": [
      {
        "providerMetadata": {
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP",
          "dateUpdated": "2026-07-28T14:19:25.325Z"
        },
        "title": "CISA ADP Vulnrichment",
        "metrics": [
          {}
        ]
      }
    ]
  }
}