{"id":64743,"date":"2026-07-25T19:29:29","date_gmt":"2026-07-25T23:29:29","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=64743"},"modified":"2026-07-25T19:29:29","modified_gmt":"2026-07-25T23:29:29","slug":"sourtrade-malvertising-browser-assembly","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/sourtrade-malvertising-browser-assembly\/","title":{"rendered":"SourTrade Malvertising Uses Browser to Build Executable from Pieces"},"content":{"rendered":"<p>A sophisticated malvertising campaign tracked as SourTrade has been weaponizing the victim&#8217;s own browser to assemble a malicious Windows executable piece by piece, leveraging a legitimate JavaScript runtime to avoid serving a complete binary across the network. Operating since late 2024, the campaign has targeted retail traders and cryptocurrency investors across 12 countries with ads impersonating services like TradingView, Solana, and Luno.<\/p>\n<p>According to a detailed analysis published July 23, 2026, by Confiant&#8217;s threat intelligence team, the delivery mechanism marks a significant evolution in how malvertising chains can evade traditional detection. Instead of a user downloading a single malicious file from a fixed URL \u2014 which would be easily hash-matched and blocked \u2014 the SourTrade chain has the browser construct the final executable itself from components fetched from multiple sources, ensuring no complete malware binary ever exists in transit.<\/p>\n<h2>The SourTrade Malvertising Delivery Chain: Browser-Assembly Explained<\/h2>\n<p>The attack begins with an advertisement that, when clicked, directs the user to a landing page impersonating a legitimate service like TradingView or Solana. These pages are equipped with sophisticated fingerprinting: suspected researchers, bots, or automated scanners receive an empty or benign page, while selected human targets are presented with a highly convincing copy of the impersonated service. The first and most immediate defense for potential victims is straightforward software discipline: install trading and wallet software exclusively from the vendor&#8217;s own official website, never from an advertisement.<\/p>\n<p>Confiant&#8217;s analysis makes clear the documented chain does not rely on exploiting a browser vulnerability. It also does not remove the Mark of the Web (MotW) flag from the resulting download. The analysis focuses on the delivery of the file within the browser environment, not its execution, and does not definitively establish whether the final download is automatic or requires a user click.<\/p>\n<h3>The Role of Service Workers and Shared Workers<\/h3>\n<p>The landing page begins preparing the assembly infrastructure long before any download button is pressed. It registers a page-scoped ServiceWorker at <code>\/sw.js<\/code>codecodecodecode. More cunningly, it builds a SharedWorker from JavaScript code already embedded within the page&#8217;s own source. This means the worker&#8217;s code never appears as a separate network fetch that a security tool could flag, completely blending into the initial page load.<\/p>\n<p>This SharedWorker then issues a request to a <code>\/config<\/code>codecodecodecode endpoint on the same domain. The response contains a template for the final executable, a URL for a secondary runtime file, and session-specific random values. This is the key to the entire operation.<\/p>\n<h2>How the Browser Assembles the Executable: Bun Runtime as a Base<\/h2>\n<p>The browser, guided by the instructions from the SharedWorker, retrieves a clean, legitimate copy of the Bun runtime from a second domain \u2014 <code>purelogicbox[.]org<\/code>codecodecodecode in the sample analyzed by <a href=\"https:\/\/www.confiant.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Confiant<\/a>. Bun is an open-source, legitimate JavaScript runtime built on Apple&#8217;s JavaScriptCore engine. It supports compiling applications and bytecode into standalone executables, a feature the attackers have hijacked for malicious purposes.<\/p>\n<p>This is the core of the evasion strategy. The bulk of the binary is a legitimate, signed, and well-known piece of software. No single download looks malicious.<\/p>\n<p>Alongside the runtime, the <code>\/config<\/code>codecodecodecode response includes Base64-encoded blobs that provide the critical components the Bun runtime does not contain: the Portable Executable (PE) header, the PE section table, and a <code>.bun<\/code>codecodecodecode section containing malicious JavaScriptCore bytecode for a file named <code>app.js<\/code>codecodecodecode. This bytecode is the actual payload.<\/p>\n<p>The worker then performs a crucial obfuscation step. It generates a large, pseudorandom byte stream using AES encryption in counter mode (AES-CTR). It then uses the template from the <code>\/config<\/code>codecodecodecode response as a byte-copy recipe. This recipe directs the worker to combine selected ranges from the clean Bun runtime, the generated pseudorandom stream, and the attacker-controlled PE material and malicious bytecode.<\/p>\n<p>The result is a unique binary for each victim session. Rotating the seed and size value in each <code>\/config<\/code>codecodecodecode response changes the file&#8217;s hash while retaining all the malicious executable payload code. As Michael Steele of Confiant noted, &#8220;No finished malware ever exists on the network.&#8221; While the PE structures and malicious bytecode do cross the network as Base64 in the <code>\/config<\/code>codecodecodecode response, they are combined with a large, per-session random block and a large, legitimate runtime binary to create a new, unique file every time.<\/p>\n<h3>Final Delivery and Mark of the Web<\/h3>\n<p>Once assembled into a complete blob in the browser&#8217;s memory, the page passes the executable as a readable stream to the ServiceWorker. A hidden iframe then navigates to a same-origin URL controlled by the worker, which responds with the generated bytes and a <code>Content-Disposition: attachment<\/code>codecodecodecode header. This triggers the browser&#8217;s standard download process. Because the file is served from the same origin (the landing page), the MotW record on the downloaded file identifies the landing page itself as the source, not the <code>purelogicbox[.]org<\/code>codecodecodecode domain that supplied the base runtime. The MotW flag itself remains intact on the file.<\/p>\n<p>Confiant&#8217;s analysis reveals this is an evolution of a technique observed as recently as April 30, 2026. In those earlier versions, the landing pages loaded an open-source library called StreamSaver.js directly from its author&#8217;s <a href=\"https:\/\/overcentral.com\/en\/github-api-ghost-accounts-recon\/\" title=\"Ghost Accounts Abuse GitHub API in Mass Recon Campaign\" data-iacss-internal=\"1\">GitHub<\/a> Pages address. This meant the recorded initial download path pointed to the library&#8217;s GitHub URL, which was an easily traceable artifact. The current iteration keeps the streaming architecture and even retains the <code>streamsaver:<\/code>codecodecodecode message names internally, but it no longer fetches the library from an external source, making the network trail cleaner for the attackers.<\/p>\n<h2>Historical Context and Payload Attribution<\/h2>\n<p>The SourTrade campaign is not an isolated incident. It appears to be a more advanced iteration of a malvertising cluster targeting TradingView users that was documented by Bitdefender in September 2025. In that earlier campaign, the final payload was identified as a stealer known as JSCEAL (tracked by Check Point) and WeevilProxy (tracked by WithSecure). These earlier campaigns were linked to credential theft, keylogging, traffic interception, cryptocurrency wallet theft, and remote access capabilities.<\/p>\n<p>However, a critical nuance exists. Confiant identifies shared campaign and executable characteristics between the current SourTrade samples and the earlier TradingView ads, but the report does not demonstrate that the three published samples from the current campaign actually carry the JSCEAL payload. Confiant&#8217;s report also references Bitdefender finding a modified Bun executable in that earlier cluster, but The <a href=\"https:\/\/overcentral.com\/en\/microsoft-gdid-scattered-spider-arrest\/\" title=\"Microsoft Device Identifier Ties Scattered Spider Hacker to Arrest\" data-iacss-internal=\"1\">Hacker<\/a> News found no mention of Bun in the specific September 2025 post Confiant links to, which names its loader detection &#8220;Variant.DenoSnoop.Marte.1.&#8221; The specific capabilities of credential theft, keylogging, and wallet theft associated with the earlier campaign therefore cannot yet be definitively assigned to the files being delivered by the SourTrade chain.<\/p>\n<h2>What This Means for Defenders: Practical Implications<\/h2>\n<p>For cybersecurity teams and individuals, the SourTrade campaign underscores a critical point: there is no software patch to apply. The evasion technique is narrower in practical impact than its technical sophistication might suggest. As Confiant&#8217;s own implications section notes, the primary value of the per-session builds is to limit the utility of simple, hash-based file detection. The attacker-controlled PE material and the malicious JavaScriptCore bytecode still cross the network, albeit in an encoded form within the <code>\/config<\/code>codecodecodecode request.<\/p>\n<p><a href=\"https:\/\/overcentral.com\/en\/chinese-llms-attacker-defender-gap\/\" title=\"Chinese LLMs Broaden the Gap Between Attackers and Defenders\" data-iacss-internal=\"1\">Defenders<\/a> should shift their focus from scanning for a known malicious file hash to examining the entire delivery chain. The attack leaves a distinct footprint that can be detected at multiple points:<\/p>\n<ul>\n<li><strong>Malicious Ad Referrals:<\/strong> The initial click on a malvertising ad.<\/li>\n<li><strong>Cloaked Landing Pages:<\/strong> The use of a landing page that serves different content to researchers versus targets.<\/li>\n<li><strong>Specific Network Requests:<\/strong> The distinctive <code>\/config<\/code>codecodecodecode request and the retrieval of a secondary runtime (like Bun) from a separate domain.<\/li>\n<li><strong>ServiceWorker Registration:<\/strong> The use of a page-scoped ServiceWorker specifically designed for streamed downloads.<\/li>\n<\/ul>\n<p>Confiant has published three SHA-256 hashes of sample files and a list of 96 malicious domains. No specific threat actor was named, and the analysis stops at the point the file is saved to the victim&#8217;s disk, leaving the question of execution and final payload open to further investigation. The SourTrade operation demonstrates that attackers are increasingly willing to turn the browser itself into an agent of assembly, forcing the security industry to look beyond the final binary and defend the process by which it is born.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A sophisticated malvertising campaign tracked as SourTrade has been weaponizing the victim&#8217;s own browser to assemble a malicious Windows executable piece by piece, leveraging a legitimate JavaScript runtime to avoid serving a complete binary across the network. Operating since late 2024, the campaign has targeted retail traders and cryptocurrency investors across 12 countries with ads [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":91103,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/64743.png","fifu_image_alt":"SourTrade Malvertising Uses Browser to Build Executable from Pieces","footnotes":""},"categories":[349],"tags":[],"class_list":["post-64743","post","type-post","status-publish","format-standard","has-post-thumbnail","category-articles"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/64743.png","fifu_image_alt":"SourTrade Malvertising Uses Browser to Build Executable from Pieces","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/64743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=64743"}],"version-history":[{"count":0,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/64743\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/91103"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=64743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=64743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=64743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}