Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Snipe-IT API
-
DeliveryPOST asset with encrypted-flagged custom field
-
ExploitGate denies encryption but write proceeds
-
ExecutionPlaintext persisted in encrypted column
-
ImpactSensitive data exposed via backups/replicas/DBA access
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V14 - Data Protection Encryption of sensitive data
|
| Exploitation Conditions | Requires a valid authenticated Snipe-IT API token for a user who has permission to create assets but does NOT hold assets.view.encrypted_custom_fields, plus at least one custom field configured with the encrypted flag; the attacker must submit a value for that field via the asset-creation API call. Exploitation is limited to the Api\AssetsController::store path only - the API update path, non-API web paths, and BulkAssetsController correctly skip the write on gate denial - and only to versions <= 8.6.3. The resulting plaintext is not readable back through the API (the transformer redacts it to "ENCRYPTED"), so realized exposure additionally depends on an actor having database-layer access through backups, replicas, or direct DB/DBA access. |
| Impact | Signals point to a genuine but modest-priority issue. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N) scores 5.3 (medium) and is internally consistent with the mechanism: network-reachable API, low attack complexity, but PR:L meaning an authenticated caller is required, and the only impact set is VI:L (integrity) with VC:N confidentiality - the advisory confirms this is not a read bypass because the API transformer redacts the field back to the literal string "ENCRYPTED" for anyone lacking the permission. No EPSS score, no CISA KEV entry, and no proof-of-concept exploit reference are present in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation. The vuln.today decision label is this_month, not act_now or emergency, consistent with the medium severity and absence of exploitation signals. The real-world risk is that of a latent encryption-at-rest failure: sensitive custom-field values that operators believed were encrypted are stored as plaintext and are exposed to DB backups, read replicas, and direct/DBA database access - the harm materializes only for actors with database-layer access, not through the API itself, which is why this is a lower practical priority than the 'network/unauthenticated' surface of the vector might first suggest. No key signals conflict; the main gap is the absence of EPSS/KEV data, which is expected rather than an error for a freshly disclosed medium-severity flaw. |
| Exploit ScenarioDerived | An authenticated Snipe-IT API user who can create assets but was not granted assets.view.encrypted_custom_fields submits a POST to the asset-creation endpoint including a value for a custom field flagged as encrypted. The faulty gate in Api\AssetsController::store skips the Crypt::encrypt() call but still writes the value, so the sensitive data lands in the database as plaintext in a column documented as encrypted, where it is later exposed via backups, replicas, or DBA access. No public exploit identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 25, 2026
Snipe-IT through 8.6.3 can persist sensitive custom-field values as plaintext in columns the application and UI present as encrypted when an asset is created through the API by a caller who does not hold assets.view.encrypted_custom_fields. The defect is confined to Api\AssetsController::store; the sibling API update path, the non-API web paths and BulkAssetsController all skip the field on gate denial, so an authenticated API user with asset-creation rights (PR:L in the assessed vector) can silently break the encryption-at-rest guarantee for that record, with the plaintext then visible to anyone reading backups, replicas or the database directly. No public exploit code or active exploitation has been reported, and the API transformer still redacts the value to the literal string "ENCRYPTED" for readers lacking the permission, so realized exposure depends on a separate database-layer compromise.
RemediationAI
Vendor-released patch: upgrade to Snipe-IT 8.7.0 or later; the fix is commit 34dafe9eed, which makes store() mirror the update() pattern by skipping the field with continue; when the encryption gate denies, so no plaintext is written. Upgrading is the vendor's stated complete fix. Because patching does not rewrite rows already created while vulnerable, audit encrypted-flagged custom-field columns for values that fail Crypt::decrypt() and re-save or re-encrypt those records under an account that holds assets.view.encrypted_custom_fields; otherwise the plaintext persists in existing backups, replicas and database dumps. As an interim measure on unpatched instances, restrict asset-creation over the API to API tokens belonging to users who hold assets.view.encrypted_custom_fields, which caps the exposure but removes asset-creation capability from lower-privileged automation and integrations. Reference: https://github.com/grokability/snipe-it/security/advisories/GHSA-jh4g-98fm-jcqc.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Snipe-IT is a Laravel-based IT asset management application whose custom fields can be flagged with field_encrypted, in which case values are meant to be stored via Laravel's Crypt facade (AES encryption at rest) and read back through Crypt::decrypt(). In Api\AssetsController::store the encryption gate was written as a nested conditional: if the field is flagged encrypted and Gate::allows('assets.view.encrypted_custom_fields') returns true the value is passed through Crypt::encrypt(), but there was no else/continue branch, so on denial the original plaintext value fell through to the unconditional assignment $asset->{$field->db_column} = $field_val. That is a control-flow defect (CWE-670, always-incorrect control flow implementation) that produces the missing-encryption outcome (CWE-311). The sibling update() method in the same controller used the same block with a continue; under the deny branch, and the web paths and BulkAssetsController behaved correctly, which is why the store path was the outlier. Because the column is still flagged encrypted, privileged readers hitting the plaintext row get "Error Decrypting: The payload is invalid.", and the API transformer redacts the value to "ENCRYPTED" for unprivileged readers - the flaw is therefore a data-integrity and encryption-at-rest violation rather than a direct confidentiality bypass for the caller who wrote the value.
Know when Snipe It gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Authenticated API user needed (PR:L) over the network with low complexity; impact is a low integrity violation (plaintext in an encrypted column), with no API-readable confidentiality loss (C:N) and no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
Snipe-IT before 8.7.0 contains a missing encryption vulnerability in Api\AssetsController::store that writes plaintext into encrypted-flagged custom-field columns when callers lack assets.view.encrypted_custom_fields. Authenticated API users without that permission can create assets whose sensitive custom-field values persist unencrypted in the database, exposing them through backups, replicas, or direct database access.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Cross-Site Request Forgery (CSRF) in GitHub repository snipe/snipe-it prior to v.6.2.3. Rated high severity (CVSS 8.8),
In Snipe-IT, versions v3.0-alpha to v5.3.7 are vulnerable to Host Header Injection. Rated high severity (CVSS 8.8), this
snipe-it is vulnerable to Cross-Site Request Forgery (CSRF). Rated high severity (CVSS 8.8), this vulnerability is remot
snipe-it is vulnerable to Cross-Site Request Forgery (CSRF). Rated high severity (CVSS 8.8), this vulnerability is remot
Two-factor authentication bypass in Snipe-IT (all releases before 8.7.0) allows an attacker who already knows a victim's
Session Fixation in GitHub repository snipe/snipe-it prior to 6.0.10. Rated high severity (CVSS 8.0), this vulnerability
Old sessions are not blocked by the login enable function. Rated high severity (CVSS 7.4), this vulnerability is remotel
snipe-it is vulnerable to Server-Side Request Forgery (SSRF). Rated high severity (CVSS 7.2), this vulnerability is remo
Broken authorization in Snipe-IT before 8.6.2 lets an authenticated non-admin user who holds users.view and users.edit -
Privilege escalation via authorization bypass in Snipe-IT versions prior to 8.6.0 allows any authenticated user holding
Improper permission handling in Snipe-IT before 8.6.0 lets a privileged user strip another user's administrative or gran
Snipe-IT before 7.0.10 allows remote code execution (associated with cookie serialization) when an attacker knows the AP
EUVD-2026-109456
GHSA-q5q6-6qfw-xp7h
NVD
CVE.org
EPSS
Exploit-DB