{"id":3067,"date":"2026-02-13T13:03:33","date_gmt":"2026-02-13T12:03:33","guid":{"rendered":"https:\/\/lab52.io\/blog\/?p=3067"},"modified":"2026-02-13T13:03:34","modified_gmt":"2026-02-13T12:03:34","slug":"operation-macromaze-new-apt28-campaign-using-basic-tooling-and-legit-infrastructure","status":"publish","type":"post","link":"https:\/\/lab52.io\/blog\/operation-macromaze-new-apt28-campaign-using-basic-tooling-and-legit-infrastructure\/","title":{"rendered":"Operation MacroMaze: new APT28  campaign using basic tooling and legit infrastructure"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Overview<\/h1>\n\n\n\n<p>LAB52 has been monitoring a campaign dubbed &#8220;Operation MacroMaze&#8221;, which, based on its characteristics, can be <strong>attributed to APT28, also known as Fancy Bear, Forest Blizzard or FROZENLAKE.<\/strong> The campaign has been active at least since late September 2025 through January 2026, targeting specific entities in Western and Central Europe. The campaign relies on <strong>basic tooling<\/strong> and in the <strong>exploitation of legitimate services for infrastructure and data exfiltration<\/strong>.<\/p>\n\n\n\n<p>Multiple documents associated with this activity have been detected, featuring macros that differ slightly. <strong>One of these documents specifically<\/strong> <strong>used for spear-phishing was detected employing as a lure an alleged agenda issued on September 18, 2025, by the Ministry of the Presidency, Justice and Relations with the Courts<\/strong> <strong>of Spain<\/strong>. It&#8217;s a deliberately crafted and modified document that reproduces content from the agenda resolutions <a href=\"https:\/\/www.lamoncloa.gob.es\/consejodeministros\/referencias\/paginas\/2025\/20250923-referencia-rueda-de-prensa-ministros.aspx\" data-type=\"link\" data-id=\"https:\/\/www.lamoncloa.gob.es\/consejodeministros\/referencias\/paginas\/2025\/20250923-referencia-rueda-de-prensa-ministros.aspx\">published<\/a> on the official La Moncloa website on September 23, 2025.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"575\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image.png\" alt=\"\" class=\"wp-image-3068\" style=\"width:620px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image.png 620w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-300x278.png 300w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/figure><\/div>\n\n\n<p>All analyzed documents share a common structural element within their XML: an INCLUDEPICTURE field referencing a remote URL hosted on webhook[.]site.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"113\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-1-1024x113.png\" alt=\"\" class=\"wp-image-3070\" style=\"width:1096px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-1-1024x113.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-1-300x33.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-1-768x85.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-1.png 1122w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>This field is embedded in the document\u2019s XML (w:instrText) and instructs Microsoft Word to retrieve an external image resource when the field is evaluated. The referenced file (docopened.jpg) is fetched from the remote server when the document is opened and fields are updated. This behavior functions as a tracking mechanism: when the document is opened and Word processes the INCLUDEPICTURE field, an outbound HTTP request is generated to the remote server. The server operator can then log metadata associated with the request, effectively confirming that the document has been opened.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Initial Foothold<\/h1>\n\n\n\n<p>Multiple documents with four sightly different macro variants have been identified. All macros are designed to work as &#8220;droppers&#8221;. Their objective is to establish a foothold on the victim&#8217;s machine by dropping six files, including the scripting (VBS, BAT and CMD) and HTML wrapped ones used for exfiltration (HTM and XHTML) into the %USERPROFILE% folder with filenames containing GUID-like names.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"470\" height=\"181\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-3.png\" alt=\"\" class=\"wp-image-3072\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-3.png 470w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-3-300x116.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure><\/div>\n\n\n<p>The GUID used for the names will match the extension of the webhook[.]site path used as Command and Control (C2) server. All the variants use heavy string concatenation (e.g., breaking &#8220;WScript.Shell&#8221; into multiple substrings like &#8220;WScri&#8221; and &#8220;pt.shell&#8221;) to assemble the files.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"221\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-2-1024x221.png\" alt=\"\" class=\"wp-image-3071\" style=\"width:927px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-2-1024x221.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-2-300x65.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-2-768x166.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-2.png 1134w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>Once the files are created, the macro runs one of the VBScript files to initiate the next stage.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"47\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-4-1024x47.png\" alt=\"\" class=\"wp-image-3073\" style=\"width:1089px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-4-1024x47.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-4-300x14.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-4-768x35.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-4.png 1139w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>While the core logic  of all the macros detected remains consistent, the scripts show an evolution in evasion techniques, ranging from &#8220;headless&#8221; browser execution in the older version to the use of keyboard simulation (SendKeys) in the newer versions to potentially bypass security prompts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>First variant<\/strong><\/h2>\n\n\n\n<p>The earliest variant of the macro used, identified in late September 2025, is <strong>associated with the government-themed decoy document<\/strong> and is characterized by its final behavior: it iterates through the document to remove all ContentControls and changes the text color to black.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"338\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-5.png\" alt=\"\" class=\"wp-image-3074\" style=\"width:533px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-5.png 484w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-5-300x210.png 300w\" sizes=\"(max-width: 484px) 100vw, 484px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Second variant<\/strong><\/h2>\n\n\n\n<p>This newer variant, detected in October, 2025,<strong> adds a fake Microsoft Word error message<\/strong> designed to lure the victim into believing that the document is corrupted or has opening issues.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"285\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-12-1024x285.png\" alt=\"\" class=\"wp-image-3081\" style=\"width:841px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-12-1024x285.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-12-300x84.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-12-768x214.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-12.png 1400w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Third variant<\/strong><\/h2>\n\n\n\n<p>This variant, detected in December 2025, <strong>removes the specific document cleanup routines <\/strong>present in the earlier versions, but keeps displaying the fake Microsoft Word error message.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"67\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-6-1024x67.png\" alt=\"\" class=\"wp-image-3075\" style=\"width:1162px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-6-1024x67.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-6-300x20.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-6-768x50.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-6.png 1381w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Fourth variant<\/strong><\/h2>\n\n\n\n<p>The newest variant, detected in January, 2026, appears to be a slightly more evolved, as <strong>it incorporates user interface manipulation<\/strong>. Before triggering a fake error message and file dropping routine, it executes SendKeys &#8220;{DOWN}&#8221;, and later SendKeys &#8220;{Enter}&#8221; and SendKeys &#8220;{UP}&#8221; at the end of the script. <strong>These commands simulate physical keyboard presses, a technique often used to dismiss &#8220;Enable Content&#8221; security warnings automatically.<\/strong> The structural similarities suggest that it is a direct iteration of the previous version, simply adding the keystroke obfuscation to increase the success rate of infection.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"124\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-7-1024x124.png\" alt=\"\" class=\"wp-image-3076\" style=\"width:966px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-7-1024x124.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-7-300x36.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-7-768x93.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-7.png 1379w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"212\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-8-1024x212.png\" alt=\"\" class=\"wp-image-3077\" style=\"width:976px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-8-1024x212.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-8-300x62.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-8-768x159.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-8.png 1378w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h1 class=\"wp-block-heading\">Execution<\/h1>\n\n\n\n<p>When the VBScript is launched, it activates the CMD file that ultimately trigger the execution of the remaining scripts in sequence.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"59\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-9-1024x59.png\" alt=\"\" class=\"wp-image-3078\" style=\"width:1096px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-9-1024x59.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-9-300x17.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-9-768x44.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-9.png 1119w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>The script establishes persistence by dynamically generating a Windows Scheduled Task using a task definition written to disk at runtime. The CMD component constructs the task\u2019s XML definition via output redirection, configuring the task to execute a VBScript located in the user\u2019s profile directory while passing a batch file as its execution argument. The scheduled task is configured with a repeating time-based trigger, causing the payload to execute periodically. In the first observed variant, the task is set to run every 30 minutes, while the second variant reduces the execution interval to 20 minutes. In the third and fourth variants, the repetition interval is increased to 61 minutes.<\/p>\n\n\n\n<p>Once the XML file is complete, it is imported using &#8220;schtasks&#8221; to register the task with non-interactive execution settings. Immediately after task creation, the script deletes the XML file, the first VBScript used and itself from disk.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"237\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-10-1024x237.png\" alt=\"\" class=\"wp-image-3079\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-10-1024x237.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-10-300x69.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-10-768x178.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-10.png 1133w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>The VBScript used during the XML creation process consists of a wrapper that executes the file passed as an argument in a hidden window. It leverages &#8220;WScript.Shell.Run&#8221; with error suppression enabled to silently launch the supplied command without displaying any user interface.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"56\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-11.png\" alt=\"\" class=\"wp-image-3080\" style=\"width:929px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-11.png 613w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-11-300x27.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-11-600x56.png 600w\" sizes=\"(max-width: 613px) 100vw, 613px\" \/><\/figure><\/div>\n\n\n<p>As observed in the first stage, where multiple macro variants were identified, this artifact also presents more than one implementation. Specifically, two distinct batch file variants have been detected. The first batch script is associated with the first and second variants, while the second batch script is linked to the third and fourth ones. Despite sharing a common multi-stage execution pattern, both batches exhibit operational differences.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Bath files similarities<\/strong><\/h2>\n\n\n\n<p>Both batch files follow the same high-level, multi-stage execution pattern. They begin by cleaning temporary download artifacts and then render a small Base64-encoded HTML payload in Microsoft Edge, which redirects the browser to a webhook[.]site endpoint used to download the fragments that will later be reconstructed into an intermediate CMD file. The scripts then assemble a randomly named CMD from the downloaded fragments in the user\u2019s Downloads directory, execute the reconstructed CMD while capturing its output, and merge that output with a the HTM and XHTML templates to generate a final HTML file containing the information intended for exfiltration to an another webhook[.]site instance. Finally, all generated artifacts are explicitly removed. In both cases, 20 seconds timeout delays are used to ensure browser-based rendering completes before execution continues.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Batch files differences<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Batch 1<\/h3>\n\n\n\n<p><strong>This variant of the batch archive is primarily focused on stealth and low user impact<\/strong>. By relying on Microsoft Edge\u2019s headless mode and avoiding aggressive process termination, it minimizes visible artifacts and reduces the likelihood of user suspicion or disruption of legitimate browser activity.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<ul class=\"wp-block-list\">\n<li>Uses &#8216;start &#8220;&#8221; msedge &#8211;headless=new \u2026&#8217; for both the initial Base64 payload and for rendering the final HTML so the execution is fully headless.<\/li>\n\n\n\n<li>Sets a console title at the start and later uses &#8216;taskkill \/fi &#8220;WindowTitle eq cf25f91c-\u2026*&#8221; \/t&#8217; to terminate related windows by title. This is a targeted, less aggressive termination method that avoids killing unrelated Edge processes. The &#8216;\/t&#8217; option attempts to terminate child processes of matched windows.<\/li>\n\n\n\n<li>Does not forcibly kill existing &#8216;msedge.exe&#8217; instances before starting; it relies on headless mode and targeted window-title termination for stealth.<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"366\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-13-1024x366.png\" alt=\"\" class=\"wp-image-3082\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-13-1024x366.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-13-300x107.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-13-768x275.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-13.png 1423w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Batch 2<\/h3>\n\n\n\n<p><strong>This second variant is primarily focused on execution reliability and environmental control. <\/strong>Instead of true headless execution, it hides browser activity by moving the window off-screen and aggressively terminates all Edge processes before and after execution to ensure predictable behavior. The inclusion of certificate error suppression further indicates a focus on robustness and tolerance to network or configuration issues, even at the cost of being more intrusive and potentially noticeable to the user.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<ul class=\"wp-block-list\">\n<li>Does not use headless mode. Instead it launches Edge with &#8216;&#8211;window-size=1,1 &#8211;window-position=10000,10000&#8217; to create a visible window that is effectively moved off-screen (hidden from user view by position\/size). This achieves concealment by placement rather than true headless execution.<\/li>\n\n\n\n<li>Explicitly calls &#8216;taskkill \/f \/im msedge.exe&#8217; before the initial render and again after processing, forcefully terminating all Edge processes to ensure a controlled environment.<\/li>\n\n\n\n<li>Adds &#8216;&#8211;ignore-certificate-errors&#8217; to the Edge command line, allowing navigation to endpoints with invalid or self-signed certificates without failure.<\/li>\n\n\n\n<li>Does not set a custom window title for targeted termination, instead it relies on process-level kills to clear and reclaim the environment.<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-14-1024x379.png\" alt=\"\" class=\"wp-image-3083\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-14-1024x379.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-14-300x111.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-14-768x284.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-14.png 1423w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h1 class=\"wp-block-heading\">Exfiltration<\/h1>\n\n\n\n<p>The final HTML file is constructed by concatenating a static HTM file, the captured output of the reconstructed CMD payload, and a closing XHTML template.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"893\" height=\"49\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-15.png\" alt=\"\" class=\"wp-image-3085\" style=\"width:732px;height:auto\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-15.png 893w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-15-300x16.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-15-768x42.png 768w\" sizes=\"(max-width: 893px) 100vw, 893px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"285\" height=\"36\" src=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/image-16.png\" alt=\"\" class=\"wp-image-3086\"\/><\/figure><\/div>\n\n\n<p>The initial HTM file defines an auto-submitting form that sends a POST request to a webhook[.]site endpoint, while the payload output is embedded directly within a element. The closing XHTML fragment completes the document structure. When the resulting HTML file is rendered by Microsoft Edge, the form is submitted, causing the collected command output to be exfiltrated to the remote webhook endpoint without user interaction. This browser-based exfiltration technique leverages standard HTML functionality to transmit data while minimizing detectable artifacts on disk.<\/p>\n\n\n\n<p>The command file generated to collect system information during the analysis couldn&#8217;t be recovered. <strong>However, based on a previous campaign analyzed by <a href=\"https:\/\/cert.pl\/en\/posts\/2024\/05\/apt28-campaign\/\" data-type=\"link\" data-id=\"https:\/\/cert.pl\/en\/posts\/2024\/05\/apt28-campaign\/\">CERT Polska<\/a> and the <a href=\"https:\/\/cert.gov.ua\/article\/5702579\" data-type=\"link\" data-id=\"https:\/\/cert.gov.ua\/article\/5702579\">Computer Emergency Response Team of Ukraine<\/a> attributed APT28 and exhibiting a highly similar kill chain and overlapping TTPs<\/strong>, it is likely that this stage deploys a relatively simple information-gathering payload. In those related campaigns, the actor has been observed using lightweight scripts to collect basic host information, such as the system\u2019s IP address, selected directory listings, and other environment details, prior to exfiltration.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>This campaign proves that simplicity can be powerful. The attacker uses very basic tools (batch files, tiny VBS launchers and simple HTML) but arranges them with care to maximise stealth: Moving operations into hidden or off-screen browser sessions, cleaning up artifacts, and outsourcing both payload delivery and data exfiltration to widely used webhook services. Because those webhook instances are typically ephemeral (they\u2019re created for short-lived tasks and are often discarded quickly), the operator appears to favour in this campaign brief and low-visibility intrusions over maintaining long-term implants. <\/p>\n\n\n\n<p>The tooling may be unsophisticated, but the operational tradeoffs are effective. It\u2019s low-tech executed with high craft, which makes detection and attribution harder than the artifacts alone would suggest.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Intelligence Availability Notice<\/h1>\n\n\n\n<p>This article presents selected insights derived from our broader threat intelligence operations and coverage. Additional details related to this campaign, as well as other investigations and ongoing intelligence activities, are enriched and available through our <strong><a href=\"https:\/\/s2grupo.es\/soluciones\/threat-intelligence\/\" data-type=\"link\" data-id=\"https:\/\/s2grupo.es\/soluciones\/threat-intelligence\/\">private intelligence feed.<\/a><\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">IOC<\/h1>\n\n\n\n<p>Files<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Name<\/strong><\/td><td><strong>Hash sha256<\/strong><\/td><\/tr><tr><td>C:\\Windows\\4zjwj81sp.exe<\/td><td>b0f9f0a34ccab1337fbcca24b4f894de8d6d3a6f5db2e0463e2320215e4262e4<\/td><\/tr><tr><td>C:\\Users\\user\\Desktop\\Informatii.doc (copy)<\/td><td>c3b617e0c6b8f01cf628a2b3db40e8d06ef20a3c71365ccc1799787119246010<\/td><\/tr><tr><td>Informatii.doc<\/td><td>df60fa6008b1a0b79c394b42d3ada6bab18b798f3c2ca1530a3e0cb4fbbbe9f6<\/td><\/tr><tr><td>C:\\Users\\user\\Desktop\\attachment.docm (copy)<\/td><td>58cfb8b9fee1caa94813c259901dc1baa96bae7d30d79b79a7d441d0ee4e577e<\/td><\/tr><tr><td>C:\\Windows\\6p8wwn4ja.exe<\/td><td>58cfb8b9fee1caa94813c259901dc1baa96bae7d30d79b79a7d441d0ee4e577e<\/td><\/tr><tr><td>Program.doc<\/td><td>9097d9cf5e6659e869bf2edf766741b687e3d8570036d853c0ca59ae72f9e9fc<\/td><\/tr><tr><td>localfile~<\/td><td>5486107244ecaa3a0824895fa432827cc12df69620ca94aaa4ad75f39ac79588<\/td><\/tr><tr><td>INDICE NEGRO.docm<\/td><td>ed8f20bbab18b39a67e4db9a03090e5af8dc8ec24fe1ddf3521b3f340a8318c1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>URL<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>http:\/\/webhook[.]site\/c29905ab-e5fa-446c-8958-4eab15d8fb80\/docopened.jpg<\/td><\/tr><tr><td>https:\/\/webhook[.]site\/a3f4e990-0b2a-4f6a-a02e-c573005de3ee<\/td><\/tr><tr><td>http:\/\/webhook[.]site\/d63049e3-1cbe-474b-9005-237517af53a7\/docopened.jpg<\/td><\/tr><tr><td>https:\/\/webhook[.]site\/5dbed3be-f1c9-41e5-b5d5-e961d08b5fba<\/td><\/tr><tr><td>http:\/\/webhook[.]site\/68d68fc7-aa94-4f2d-a727-d18fb40b0d69\/docopened.jpg<\/td><\/tr><tr><td>https:\/\/webhook[.]site\/a72d8905-b15f-4e95-9a8f-5e4bb7dc9b3d<\/td><\/tr><tr><td>http:\/\/webhook[.]site\/c2e1be16-401b-4f60-8a0f-276b30417fda\/docopened.jpg<\/td><\/tr><tr><td>https:\/\/webhook[.]site\/4e6cf717-e4d6-4f40-9f2d-134196fa5e7d<\/td><\/tr><tr><td>http:\/\/webhook[.]site\/62114596-33f5-47fb-9012-0223529e5a13\/docopened.jpg<\/td><\/tr><tr><td>https:\/\/webhook[.]site\/5744c020-a8d9-4755-abfb-cde6ccd450af<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview LAB52 has been monitoring a campaign dubbed &#8220;Operation MacroMaze&#8221;, which, based on its characteristics, can be attributed to APT28, also known as Fancy Bear, Forest Blizzard or FROZENLAKE. The campaign has been active at least since late September 2025 through January 2026, targeting specific entities in Western and Central Europe. The campaign relies on [&hellip;]<\/p>\n","protected":false},"author":30,"featured_media":3096,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[21],"tags":[4,84,79,6,8],"class_list":{"0":"post-3067","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-apt","8":"tag-apt","9":"tag-apt28","10":"tag-backdoor","11":"tag-cyberthreat","12":"tag-russia","13":"entry"},"featured_image_src":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/apt28_lazyhook-600x400.png","featured_image_src_square":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2026\/02\/apt28_lazyhook-600x600.png","author_info":{"display_name":"Dio","author_link":"https:\/\/lab52.io\/blog\/author\/dio\/"},"_links":{"self":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/3067"}],"collection":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/comments?post=3067"}],"version-history":[{"count":38,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/3067\/revisions"}],"predecessor-version":[{"id":3127,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/3067\/revisions\/3127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media\/3096"}],"wp:attachment":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media?parent=3067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/categories?post=3067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/tags?post=3067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}