On this page:
Attack Spotlight
June 12, 2025
Credential phishing with a once-legitimate domain, layered detection evasion techniques, and Russian infrastructure
Sublime’s Attack Spotlight series is designed to keep you informed of the email threat landscape by showing you real, in-the-wild attack samples, describing adversary tactics and techniques, and explaining how they’re detected. These attacks can be prevented with a free Sublime account.
EMAIL PROVIDER: Microsoft 365
ATTACK TYPE: Credential Phishing
The Sublime Threat Research team recently discovered a unique phishing campaign leveraging an impersonated Microsoft Teams meeting invitation. What started as a simple “Q1 Financial Review Meeting” invitation turned into a multi-layered phishing attack designed to avoid detection. Through our analysis we found the use of a legitimate law firm’s assets, Russian-based hosting infrastructure, and many forms of unique and custom obfuscation.
The attack began with what appeared to be a legitimate Microsoft Teams meeting invitation. This email would seem authentic to many users as it used the correct verbiage and formatting style. However, instead of joining a Teams meeting, the link sends the reader to an unknown page hosted at sa[.]com, a domain seen in many previous phishing campaigns.
Before following the attack sequence, one aspect of this attack that drew our attention was the apparent use of a known good and pre-existing website as part of the campaign. Before creating a very specific and intricate campaign for this victim they targeted the website of a law office based in Colorado, US: dilloncriminallaw[.]com.
Analysis of dilloncriminallaw[.]com suggests that the domain was left to expire by the legitimate owner and then purchased by a third-party. We've seen this same trait with other domains used in similar campaigns, where the domain had expired and was recently repurposed for attacks. Some of these domains had even originally expired over a decade ago.
Additionally, we saw that dilloncriminallaw[.]com had changed registrars multiple times since its initial registration in 2019, including just before this campaign launched. The site was registered with Go Canada Domains, LLC. and then began using a cPanel, Inc SSL certificate in 2021. The domain remained that way until late 2023 when it was re-registered to GNAME, Inc.
GNAME is notable as a Chinese registrar that is involved with re-hosting expired domain names. The domain remained parked and dormant for nearly a near until a Let’s Encrypt SSL certificate was created in September of 2024 for the domain with a unique subject of “917t1.mf8rsbahu[.]top”.
Four months later, in January of 2025, the domain was transferred to sav[.]com, LLC and another Let’s Encrypt SSL certificate was created with the expected subject of the legitimate domain name, dilloncriminallaw[.]com. At this time, it appears that the original site contents were restored as if the site was recovered by its original owner.
In reviewing attacks originating from this domain, we found that a basic email infrastructure was created, including valid SPF records and DKIM signatures. DNS MX records were created that directed email to 193.169.228.13, an IP at the hosting provider SmartApe OU.
The end result is a phishing campaign that originates from the email address meeting@dilloncriminallaw[.]com
, a domain with a legitimate history from an email that passed basic authentication checks. This domain is not used further in the campaign, as the phishing moves to a different infrastructure.
The messages related to this campaign contain a single link labeled "Join the meeting now" that leads victims through a sophisticated multi-stage credential harvesting process. When clicked, the link first takes users to a gate page that performs extensive bot detection and browser fingerprinting to evade security tools. If the checks pass, the gate extracts and encodes the victim's email address, then redirects to a second stage that collects detailed browser information before finally routing users to a credential harvesting page designed to steal Microsoft login credentials.
When the malicious link is clicked they are often not sent directly to a phishing login page. Instead, they first access a “gate” page. Like a CAPTCHA, gates exist to determine if the link was accessed by a real person.
The initial link within the email (hxxps://meeting.sa[.]com/AB0QR5CD1gyQR5OP4AB0hQR5EF2mQR5MN3bJK4YZ9ST6vWX8yQR5CD1tOP4cWX8m
) serves as a gate and uses various techniques to evade detection. We reviewed the malicious JavaScript to view its capabilities. Beyond evading detection, it also extracts and encodes victim email addresses for redirection to the further stages of the credential harvesting.
This gate page performs four notable checks:
To go more in depth for each of these checks below, we noted each is segmented into unique functions within the JavaScript code. If any of these return True
the page is directed to the actual Microsoft login page.
When reviewing a connection we would expect a gate page to check the web referrer to determine what led the victim to access the gate. However, what was unique in their domain reviewing code was that it checked the domain that the gate was hosted from. This code ensures that the victim is not accessing the gate while the gate is hosted at a domain that contains belfius
or baringa
as the domain, or even a subdomain. If found, the viewer will be redirected to the known Microsoft login page.
For instance, this check will also block connections when the gate is hosted at any host within baringa[.]com as well as any domain with a custom subdomain like 01_baringa_10.github[.]io
. This has many uses, but obvious ones are that it allows the threat actor to quickly end ongoing attack campaigns. If they create a dedicated host for a particular victim, and wish to prevent any future connections from that organization, they can deploy a quick update to the gate code to block the domain.
belfius
presumably refers to Belfius Bank, one of the larger banks in Belgium, while baringa
could refer to Baringa, a global consulting firm that offers cybersecurity services. It is unclear why these two keywords are explicitly used within this sample.
Our research team discovered other variants of this gate code that uses the referer location instead of the current window hostname, as would be expected. In some of those instances we found domains such as chase[.]com
and credit-suisse[.]com
are used.
This script function contains two separate checks to determine if the page was accessed by a actual human. The first is a simple check against user-agent matching of known search engines and unexpected browser tools like wget
. This ensures that the gate only allows connections from a user who directly clicked the infection link and was not referred to it.
The code then specifically targets automated security analysis tools by checking for signs of headless browsers, an automated browser without a user interface such as Selenium. This is done by checking various read-only attributes of the browser stored as navigator
values. If navigator.webdriver
contains any value, where normally it should be blank. It will also check to make sure the browser has at least one plugin installed and that the browser has a pre-defined language preference, like “en-us” or “fr-fr”.
The last step is to check that the IP address of the page requester doesn’t exist within a block list. This is completed by making a call to api.ipify[.]org
, a known service which provides the IP address of the requester in a variety of formats. Threat actors can predefine ranges of IP addresses based upon who they are assigned to, allowing them to prevent connections from specific companies, hosting sites, and even countries.
In this particular phishing campaign, the IP list was not configured, thus did not provide any useful function.
If all of the automated analysis checks are checked, the next step is to call a handleRedirect()
function which extracts several elements from the URL path, checks the victim email against a list of domains, generates random values, and finally redirects the browser to the next stage of the chain.
If no automated analysis is detected, the gate script then decodes the user email address from the path of the URL. A custom substitution cipher is used as the initial attempt to decode the data from the URL path. This is seen within the encodingMap
array in the JavaScript code below:
If the resulting value does not contain an “@” then additional decoding methods are checked until the result appears to be an email address. These methods include decoding the URL path as hexadecimal, Base32, and finally Base64 encoding.
For example, the table below shows the various forms in which an email could exist when appended to the URL.
As a last evasion technique, if the decoded email contains selected keywords, the browser is redirected to the legitimate Microsoft login page. The same belfius
and baringa
keywords are observed in this section, ensuring that the provided email does not contain these two values.
Assuming the email address can be decoded and does not start with any blocked domains, elements of the email address are extracted out for further use. These parts are used to construct the URL of the next stage and finally redirect the browser to that URL.
This URL notably contains the domain prefix of the email address and the email address encoded as both Base64 and in hexadecimal. The URL structure to a specific $subDomain
at team.ru[.]com
allows the threat actor to build complex infrastructure to allow for specific actions per victim domain.
Having passed the gate, the next stage is a heavily obfuscated JavaScript file hosted from the campaign-tailored ru[.]com domain. This script is nearly 450KB in size, with over 6000 lines of code, and contains multiple layers of obfuscation. The end result is an in-memory module with multiple calls, each hidden behind character substitution and string decryption.
These function exports, signified here by the text }, hex_address: (argument list) => {
, each provide varying data types such as decoded strings or the results from further calls.
This stage also has the capability to create and maintain WebSockets for further activity, as well as load and run embedded Rust code that was compiled as WebAssembly, seen here with the references to WebAssembly[’instantiateStreaming’]
.
Overall, in our analysis, this stage creates a WebSocket and begins collecting browser information. This information includes basic data about the browser, its plugins, any ad or domain blockers, using open source fingerprintjs code, and a unique ID for the victim based upon their ru[.]com link. This information is packaged, Base64 encoded, and sent back to the actor’s server via an HTTP POST connection.
This data appears to be continued browser fingerprinting and allows for server-side validation of the collected fingerprint data. When testing, the following system/browser details were provided, along with three strings of unknown purpose. An example of the data contained within the fingerprint is available in Appendix B.
If the server-side fingerprint check is passed, the response of the POST is a 302 to the next stage, seen hosted at a randomly named subdomain of <random_value>.team.za[.].com, to a folder name hardcoded as “6802a801d7f11fb0bef7f792
".
This next stage contains an equally large and obfuscated block of JavaScript with additional functionality. Notably, the WebSocket endpoint is contained in the body as a Base64 encoded string, which decodes to wss://52e42e6675254286a4273c62f3b19bfb.team.za[.]com/6802a801d7f11fb0bef7f792/
.
The WebSocket appears to be used for control of the user experience upon certain conditions. For example, this section listens for a success
message and then extracts the redirect_url
variable and redirects the user. Likely to redirect the user to the legitimate Microsoft after the credential theft process has been completed.
This second request then redirects the user to the fake login page to attempt to steal their credentials.
This final page is a simple Office 365 login page that is branded to the victim with their graphical logo and a background image specific to their company. This is finally the actual AITM phishing page that collects entered credentials, which are legitimately forwarded to Microsoft to login while also being captured.
Sublime's AI-powered detection engine prevented this attack. Some of the top signals for this attack were:
ASA, Sublime’s Autonomous Security Analyst, flagged this email as malicious. Here is ASA’s analysis summary:
See the full Message Query Language (MQL) that detects this attack in our publicly available Detection Rules in our Core Feed: Brand Impersonation: Microsoft Teams Invitation
This attack chain is effective at phishing users by leveraging a known domain with a legitimate reputation to send the emails, a very realistic meeting invite, and an intricate infrastructure that is specifically tailored to the targeted organization. Our analysis calls out unique indicators within the code, as well as patterns in the hosting infrastructure, to identify future campaigns.
If you’re interested in checking out Sublime and how we detect and prevent phishing attempts, you can create a free account today or request a demo. If you enjoyed this deep dive, check out TROX Stealer: A deep dive into a new Malware as a Service (MaaS) attack campaign.
Sublime releases, detections, blogs, events, and more directly to your inbox.
The latest research, attack spotlights, and product updates.
Experience Sublime’s adaptable email security platform and take control of your email environment today.