bagisto has CSV Formula Injection in Create New Product
The advisory, in context
Summary
When product data that begins with a spreadsheet formula character (for example =, +, -, or @) is accepted and later exported or saved into a CSV and opened in spreadsheet software, the spreadsheet will interpret that cell as a formula. This allows an attacker to supply a CSV field (e.g., product name) that contains a formula which may be evaluated by a victim’s spreadsheet application — potentially leading to data exfiltration and remote command execution (via older Excel exploits / OLE/cmd constructs or Excel macros).
Details
Spreadsheet applications treat cell text that begins with characters =, +, -, @ as formulas. If unescaped, spreadsheet will interpret and evaluate the content when the file is opened. The application fails to neutralize/escape leading formula characters when generating CSV or when accepting CSV import fields for display/export.
PoC
Insert CSV formula to the product name field, and save the changes. Export it to CSV file, open it and the calc.exe will be executed. Other CSV export functions are affected as well. http://127.0.0.1/admin/catalog/products/edit/1 <img width="408" height="302" alt="image" src="https://github.com/user-attachments/assets/2c6fd1e3-6725-4bf4-9c64-20cd57f4e279" /> <img width="1696" height="854" alt="image" src="https://github.com/user-attachments/assets/911a69ae-65ac-4a8a-ad8e-63571a9610c8" />
Impact
Data exfiltration: Using spreadsheet functions (e.g., WEBSERVICE, HYPERLINK, or concatenation to create requests) on victims' machines that make network calls. Remote command execution: In some historical cases, specially crafted formulas and older Excel behaviors can lead to RCE. Modern Excel hardens many of these, but risk remains depending on environment.
Affected packages
Start with the recorded fix for your release branch. Check your installed version and test compatibility before upgrading. Fixing this advisory does not rule out other vulnerabilities in the release.
Earlier releases before 2.3.8
Fixed in 2.3.8
64 explicitly affected versions
v0.1.0, v0.1.1, v0.1.2, v0.1.3, v0.1.4, v0.1.4-BETA1, v0.1.4-BETA2, v0.1.4-BETA3, v0.1.4-BETA4, v0.1.5, v0.1.6, v0.1.6-ALPHA1, v0.1.7, v0.1.7-BETA1, v0.1.7-BETA2, v0.1.8, v0.1.9, v0.1.9-BETA1, v0.2.0, v0.2.1, v0.2.2, v1.0.0, v1.0.0-BETA1, v1.1.0, v1.1.1, v1.1.2, v1.2.0, v1.2.0-BETA1, v1.3.0, v1.3.1, v1.3.2, v1.3.3, v1.4.0, v1.4.1, v1.4.2, v1.4.3, v1.4.4, v1.4.5, v1.5.0, v1.5.1, v2.0.0, v2.0.0-BETA-1, v2.1.0, v2.1.1, v2.1.2, v2.2.0, v2.2.1, v2.2.10, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.2, v2.3.3, v2.3.4, v2.3.5, v2.3.6, v2.3.7
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.3.8"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v0.1.0",
"v0.1.1",
"v0.1.2",
"v0.1.3",
"v0.1.4",
"v0.1.4-BETA1",
"v0.1.4-BETA2",
"v0.1.4-BETA3",
"v0.1.4-BETA4",
"v0.1.5",
"v0.1.6",
"v0.1.6-ALPHA1",
"v0.1.7",
"v0.1.7-BETA1",
"v0.1.7-BETA2",
"v0.1.8",
"v0.1.9",
"v0.1.9-BETA1",
"v0.2.0",
"v0.2.1",
"v0.2.2",
"v1.0.0",
"v1.0.0-BETA1",
"v1.1.0",
"v1.1.1",
"v1.1.2",
"v1.2.0",
"v1.2.0-BETA1",
"v1.3.0",
"v1.3.1",
"v1.3.2",
"v1.3.3",
"v1.4.0",
"v1.4.1",
"v1.4.2",
"v1.4.3",
"v1.4.4",
"v1.4.5",
"v1.5.0",
"v1.5.1",
"v2.0.0",
"v2.0.0-BETA-1",
"v2.1.0",
"v2.1.1",
"v2.1.2",
"v2.2.0",
"v2.2.1",
"v2.2.10",
"v2.2.2",
"v2.2.3",
"v2.2.4",
"v2.2.5",
"v2.2.6",
"v2.2.7",
"v2.2.8",
"v2.2.9",
"v2.3.0",
"v2.3.1",
"v2.3.2",
"v2.3.3",
"v2.3.4",
"v2.3.5",
"v2.3.6",
"v2.3.7"
]
}