Skip to content
Heist/ feed
Back to feed
Low

snipe-it before 8.7.0 Race Condition in Asset Checkout

Type: advisorySources: OSV

Snipe-IT 8.6.3 and earlier (and develop pre-release commits prior to the fix) contain a race condition in the asset checkout paths. Api\AssetsController::checkout() and Assets\AssetCheckoutController::store() call Asset::availableForCheckout() outside the mutation path and then invoke Asset::checkOut() without taking a row lock or re-checking availability, so two concurrent checkout requests for the same available asset can both observe it as available and both commit. This produces duplicate checkout-history rows, a doubled checkout_counter, and two CheckoutableCheckedOut events for a single-assignment asset, corrupting the audit trail and utilization/reconciliation reporting; the asset's final assigned_to remains singular, so the visible assignment stays intact. Exploitation requires an authenticated session holding the assets.checkout permission (or superuser) and precise concurrent timing. Fixed in 8.7.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-86744
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 07:10 UTC · Revision 1

Source evidence

snipe-it before 8.7.0 Race Condition in Asset Checkout

core-osv · Original source

Published 9 Sept 2026, 13:32 UTC

Snipe-IT 8.6.3 and earlier (and develop pre-release commits prior to the fix) contain a race condition in the asset checkout paths. Api\AssetsController::checkout() and Assets\AssetCheckoutController::store() call Asset::availableForCheckout() outside the mutation path and then invoke Asset::checkOut() without taking a row lock or re-checking availability, so two concurrent checkout requests for the same available asset can both observe it as available and both commit. This produces duplicate checkout-history rows, a doubled checkout_counter, and two CheckoutableCheckedOut events for a single-assignment asset, corrupting the audit trail and utilization/reconciliation reporting; the asset's final assigned_to remains singular, so the visible assignment stays intact. Exploitation requires an authenticated session holding the assets.checkout permission (or superuser) and precise concurrent timing. Fixed in 8.7.0.

osv:CVE-2026-86744
Complete source record
{
  "id": "3b6a806531400479bf1ae0bda4b66c1c3514279a07714637d5dbf58309dd375d",
  "url": "https://osv.dev/vulnerability/CVE-2026-86744",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "snipe-it before 8.7.0 Race Condition in Asset Checkout",
    "summary": "Snipe-IT 8.6.3 and earlier (and develop pre-release commits prior to the fix) contain a race condition in the asset checkout paths. Api\\AssetsController::checkout() and Assets\\AssetCheckoutController::store() call Asset::availableForCheckout() outside the mutation path and then invoke Asset::checkOut() without taking a row lock or re-checking availability, so two concurrent checkout requests for the same available asset can both observe it as available and both commit. This produces duplicate checkout-history rows, a doubled checkout_counter, and two CheckoutableCheckedOut events for a single-assignment asset, corrupting the audit trail and utilization/reconciliation reporting; the asset's final assigned_to remains singular, so the visible assignment stays intact. Exploitation requires an authenticated session holding the assets.checkout permission (or superuser) and precise concurrent timing. Fixed in 8.7.0.",
    "evidence": "osv:CVE-2026-86744",
    "products": [],
    "severity": "low",
    "structured": {
      "id": "CVE-2026-86744",
      "aliases": [
        "CVE-2026-86744",
        "GHSA-h992-9438-26v8"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:H/AT:P/PR:H/UI:N/VC:N/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"
                },
                {
                  "fixed": "f71806b1e0efbd3bc2b6be61994ad2a5d5d6c206"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:snipeitapp:snipe-it:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "8.7.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "f71806b1e0efbd3bc2b6be61994ad2a5d5d6c206"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "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-86744.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:26.886016400Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86744.json",
        "https://github.com/grokability/snipe-it/security/advisories/GHSA-h992-9438-26v8",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-86744",
        "https://www.vulncheck.com/advisories/snipe-it-before-8.7.0-race-condition-in-asset-checkout",
        "https://github.com/grokability/snipe-it/commit/f71806b1e0efbd3bc2b6be61994ad2a5d5d6c206"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-362"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86744.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-86744",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 493273,
  "published_at": "2026-09-09T13:32:09.284+00:00"
}