← Back to CVEs
Bagisto Ecommerce

CVE-2026-60120 - Bagisto < 2.4.4 Stored XSS via CSTI in create.blade.php

July 2026 — Common Vulnerabilities and Exposures (CVE)

A GitHub repository version of this disclosure can be read here: CVE-2026-60120.


DetailInformation
CVE RecordCVE-2026-60120
Severity5.1 Medium (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N)
5.4 Medium (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:N/I:L/A:L)
Date Published2026-07-09
Software NameBagisto
Affected Version(s)Before 2.4.4
Software Linkhttps://github.com/bagisto/bagisto
VendorWebkul
Researcher CreditsAaron Amran Bin Amiruddin (@aaronamran)

Description

Bagisto before 2.4.4 contains a stored cross-site scripting vulnerability via client-side template injection that allows unauthenticated attackers to execute arbitrary JavaScript in administrator browsers by registering a customer account with malicious payload in the first or last name field. The create.blade.php template renders customer name fields without the Vue.js v-pre directive, causing Vue.js to evaluate stored template expressions as live JavaScript when an administrator opens the Create Order page for the affected customer.


Proof-of-Concept

1. On a Bagisto instance running a version prior to 2.4.4, navigate to the customer registration page and sign up. Populate the fields with the following input values:

CVE-2026-60120 Image 1

2. Log into the administration panel. Navigate to Customers via the left sidebar menu to confirm that the newly registered account appears in the list.

CVE-2026-60120 Image 2

3. View the details of the newly created customer and click the Create Order button.

CVE-2026-60120 Image 3

4. Upon page load, the Stored Cross-Site Scripting (XSS) via Client-Side Template Injection (CSTI) executes successfully. Because the payload was inserted into both the first and last name fields, the JavaScript executes twice in succession.

CVE-2026-60120 Image 4

5. After dismissing both alert pop-ups, the customer's name fields appear blank in the UI. This occurs because the payload expression evaluates to undefined upon execution, causing the Vue.js template engine to render an empty string.

CVE-2026-60120 Image 5


Timeline



See you in the next hack.

@aaronamran

July 2026