Skip to content
Heist/ feed
Back to feed
Medium

snipe-it before 8.7.0 Authorization Bypass via Pivot-Only User

Type: advisorySources: OSV

Snipe-IT is an open source IT asset management system. In versions up to and including 8.6.3, the report acceptance endpoints POST /reports/unaccepted_assets/sent_reminder (ReportsController::sentAssetAcceptanceReminder) and DELETE /reports/unaccepted_assets/{acceptanceId}/delete (ReportsController::deleteAssetAcceptance) are not correctly scoped when Full Multiple Company Support (FMCS) is enabled. In 8.6.3 the guard ReportsController::currentUserCanAccessAcceptance() early-exits with 'return true' when '! $user->company_id' is truthy, which is the case for every pivot-only user (a user associated with companies through the company_user pivot table whose scalar users.company_id column is NULL); versions prior to 8.6.3 lacked the guard altogether. As a result, an authenticated user holding the reports.view permission can send acceptance-reminder emails for, and permanently delete, any pending acceptance record in the install regardless of which company owns the underlying checkoutable. Deletion is destructive and forfeits the acceptance audit trail for the affected item, and the reminder email exposes limited cross-company acceptance context (item name and assignment metadata) to the recipient. Acceptance IDs are sequential integers and can be enumerated. This issue is fixed in version 8.7.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-86747
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 19:29 UTC · Revision 1

Source evidence

snipe-it before 8.7.0 Authorization Bypass via Pivot-Only User

core-osv · Original source

Published 9 Sept 2026, 13:32 UTC

Snipe-IT is an open source IT asset management system. In versions up to and including 8.6.3, the report acceptance endpoints POST /reports/unaccepted_assets/sent_reminder (ReportsController::sentAssetAcceptanceReminder) and DELETE /reports/unaccepted_assets/{acceptanceId}/delete (ReportsController::deleteAssetAcceptance) are not correctly scoped when Full Multiple Company Support (FMCS) is enabled. In 8.6.3 the guard ReportsController::currentUserCanAccessAcceptance() early-exits with 'return true' when '! $user->company_id' is truthy, which is the case for every pivot-only user (a user associated with companies through the company_user pivot table whose scalar users.company_id column is NULL); versions prior to 8.6.3 lacked the guard altogether. As a result, an authenticated user holding the reports.view permission can send acceptance-reminder emails for, and permanently delete, any pending acceptance record in the install regardless of which company owns the underlying checkoutable. Deletion is destructive and forfeits the acceptance audit trail for the affected item, and the reminder email exposes limited cross-company acceptance context (item name and assignment metadata) to the recipient. Acceptance IDs are sequential integers and can be enumerated. This issue is fixed in version 8.7.0.

osv:CVE-2026-86747
Complete source record
{
  "id": "3efd7485a93abcdf705d3fe8495edc0610e5fb69b2f252c196bd15df5cb919ad",
  "url": "https://osv.dev/vulnerability/CVE-2026-86747",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "snipe-it before 8.7.0 Authorization Bypass via Pivot-Only User",
    "summary": "Snipe-IT is an open source IT asset management system. In versions up to and including 8.6.3, the report acceptance endpoints POST /reports/unaccepted_assets/sent_reminder (ReportsController::sentAssetAcceptanceReminder) and DELETE /reports/unaccepted_assets/{acceptanceId}/delete (ReportsController::deleteAssetAcceptance) are not correctly scoped when Full Multiple Company Support (FMCS) is enabled. In 8.6.3 the guard ReportsController::currentUserCanAccessAcceptance() early-exits with 'return true' when '! $user->company_id' is truthy, which is the case for every pivot-only user (a user associated with companies through the company_user pivot table whose scalar users.company_id column is NULL); versions prior to 8.6.3 lacked the guard altogether. As a result, an authenticated user holding the reports.view permission can send acceptance-reminder emails for, and permanently delete, any pending acceptance record in the install regardless of which company owns the underlying checkoutable. Deletion is destructive and forfeits the acceptance audit trail for the affected item, and the reminder email exposes limited cross-company acceptance context (item name and assignment metadata) to the recipient. Acceptance IDs are sequential integers and can be enumerated. This issue is fixed in version 8.7.0.",
    "evidence": "osv:CVE-2026-86747",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-86747",
      "aliases": [
        "CVE-2026-86747",
        "GHSA-p5wx-p3vv-g6p2"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/grokability/snipe-it",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "1d05a7ce11e6bf9448c067ac3ffbe5e63882888e"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "8.7.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "cpe": "cpe:2.3:a:snipeitapp:snipe-it:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "8.7.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v8.4.0",
            "v8.3.3",
            "v8.3.2",
            "v8.3.1",
            "v8.3.0",
            "v8.2.1",
            "v8.2.0",
            "v8.1.18",
            "v8.1.17",
            "v8.1.16",
            "v8.1.15",
            "v8.1.4",
            "v8.1.3",
            "v8.1.2",
            "v8.1.1",
            "v8.1.0",
            "v8.0.4",
            "v8.0.3",
            "v8.0.2",
            "v8.0.1",
            "v7.1.15",
            "v7.1.14",
            "v7.0.13",
            "v7.0.10",
            "v7.0.9",
            "v7.0.8",
            "v7.0.7",
            "v7.0.6",
            "v7.0.5",
            "v7.0.0-pre",
            "v6.3.1",
            "v6.3.0",
            "v6.0.10",
            "v6.0.6",
            "v6.0.5",
            "v6.0.4",
            "v6.0.3",
            "v6.0.1",
            "v6.0.0",
            "v6.0.0-RC-8",
            "v6.0.0-GM",
            "v6.0.0-RC-5",
            "v6.0.0-RC-7",
            "v6.0.0-RC-6",
            "v6.0.0-RC-4",
            "v6.0.0-RC-3",
            "v6.0.0-RC-2",
            "v6.0.0-RC-1",
            "v5.1.8",
            "v5.1.7",
            "5.1.7",
            "v5.1.6",
            "v5.1.4",
            "v5.1.3",
            "v5.1.2",
            "v5.1.1",
            "v5.1.0",
            "v5.0.12",
            "v5.0.11",
            "v5.0.10",
            "v5.0.9",
            "v5.0.8",
            "v5.0.7",
            "v5.0.6",
            "v5.0.5",
            "v5.0.0-beta-7-GM",
            "v5.0.0-beta-6-GM",
            "v5.0.0-beta-5",
            "v5.0.0-beta-4",
            "v5.0.0-beta-3.0",
            "v4.9.4",
            "v4.9.3",
            "v4.9.2",
            "v4.9.1",
            "v4.9.0",
            "v4.8.0",
            "v4.7.8",
            "v4.7.7",
            "v4.7.5",
            "v4.7.4",
            "v4.7.3",
            "v4.7.2",
            "v4.7.0",
            "v4.6.18",
            "v4.6.17",
            "v4.6.16",
            "v4.6.15",
            "v4.6.14",
            "v4.6.13",
            "v4.6.12",
            "v4.6.11",
            "v4.6.10",
            "v4.6.9",
            "v4.6.8",
            "v4.6.7",
            "v4.6.6",
            "v4.6.5",
            "v4.6.4",
            "v4.6.3",
            "v4.6.2",
            "v4.6.1",
            "v4.6.0",
            "v4.5.0",
            "v4.4.1",
            "v4.4.0",
            "v4.3.0",
            "v4.2.0",
            "v4.1.14",
            "v4.1.13",
            "v4.1.12",
            "v4.1.11",
            "v4.1.10",
            "v4.1.9",
            "v4.1.8",
            "v4.1.7",
            "v4.1.6",
            "v4.1.5",
            "v4.1.4",
            "v4.1.3",
            "v4.1.2",
            "v4.1.1",
            "v4.1.0",
            "v4.0.15",
            "v4.0.14",
            "v4.0.13",
            "v4.0.12",
            "v4.0.11",
            "v4.0.10",
            "v4.0.9",
            "v4.0.8",
            "v4.0.7",
            "v4.0.6",
            "v4.0.5",
            "v4.0.4",
            "v4.0.3",
            "v4.0.2",
            "v4.0.1",
            "v4.0",
            "v3.6.6",
            "v3.6.5",
            "v4.0-alpha-2",
            "v3.6.4",
            "v3.6.3",
            "v3.6.2",
            "v3.6.1",
            "v3.6.0",
            "v3.5.2",
            "v3.5.1",
            "v3.5.0",
            "v3.5.0-beta2",
            "v3.5.0-beta",
            "v3.4.0-beta",
            "v3.4.0-alpha",
            "v3.3.0-beta",
            "3.2.0",
            "v3.1.0",
            "v3.0",
            "v3.0-beta.3",
            "v3.0-beta.1",
            "v3.0.0-beta",
            "v3.0-alpha2",
            "v3.0-alpha"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-86747.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:22.803000723Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86747.json",
        "https://github.com/grokability/snipe-it/security/advisories/GHSA-p5wx-p3vv-g6p2",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-86747",
        "https://www.vulncheck.com/advisories/snipe-it-before-8.7.0-authorization-bypass-via-pivot-only-user"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-863"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86747.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-86747",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 489174,
  "published_at": "2026-09-09T13:32:11.382+00:00"
}