Threat actors are notorious for trying to hide their code in various ways, from binary packers to obfuscators. On their own, these tools are not always malicious as they can also be be used by companies or individuals who wish to keep their work safe from piracy, but overall they tend to be largely abused.
In the case of credit card skimmers in client-side attacks, obfuscators are a common occurrence as they can make code identification more difficult. Defenders typically have the choice to either rely on the browser’s debugger and step through the code, or can statically try to reverse it. The latter tends to be quite time consuming, but the former can often problematic if the malware author adds anti-debugging routines.
Initial injection on e-commerce sites
The attack relies on 2 steps: the first one is code injected inside the website’s source that calls out a remote URL. That URL in turn, loads the skimmer within the payment checkout process.
We notice a large blurb of code that contains some static elements and others that are uniquely generated. The ‘eval‘ portion of the code is a clear giveaway that the random looking string is being processed dynamically to return some instructions.
This URL contains code that has been obfuscated with Hunter once again. This time, once we deobfuscate it, we see what appears to be HTML code with forms referring to credit card fields. This is the actual skimmer.
Skimmer at checkout page
When a victim who’s shopping at a compromised online store goes to check out, there will be additional fields injected in the contact form that aren’t normally there. Below is the legitimate checkout page of a store without the skimmer being loaded:
The credit card data to be stolen is encoded, then stored inside a cookie and subsequently exfiltrated via a POST request.
The skimmer domains registered with Porkbun all appear to be hosted on the same server at 188.8.131.52 (ASN49505):
We can get any of the currently still resolving domains to show their own version of the skimmer code by crafting a GET request with the proper referer:
Indicators of Compromise
Host: 184.108.40.206 Skimmer domains: 1537la[.]buzz 1537li[.]buzz 1537lx[.]buzz 1568la[.]buzz 1568li[.]buzz 1568lx[.]buzz 1599la[.]buzz 1599li[.]buzz 1599lx[.]buzz 1599lz[.]buzz appcloud1[.]buzz appcloud19[.]buzz appcloud2[.]buzz appcloud20[.]buzz appcloud3[.]buzz appcloud5[.]buzz araboxtv[.]sbs blindsmax[.]sbs bubapeq[.]quest dev-extension[.]cloud dev-extension[.]one dev-extension[.]us hedeya[.]sbs hedeya[.]sbs inspirefitness[.]sbs motherearthlabs[.]sbs nasaservers[.]sbs newarriwal[.]quest paramountchemicals[.]sbs peqart[.]sbs remediadigital[.]sbs roboshop[.]sbs schmerzfrei-shop[.]sbs swsgswsg[.]sbs thecornerstoreau[.]sbs ultracoolfl[.]sbs