As early as September 2026, Storm-0940, a China-state aligned actor, used the agentic AI penetration testing framework ARTEX to automate attacks targeting hundreds of organizations globally across a broad range of industries. Several of these Storm-0940 ARTEX-driven attacks have resulted in the actor obtaining privileged access to an organization’s cloud infrastructure – including multiple instances where the time from initial targeting to privileged access was less than 3 hours. Microsoft assesses that Storm-0940 was responsible for the recently disclosed ConnectWise supply chain compromise of a multi-tenant application.
This activity demonstrates how threat actors are integrating agentic AI into existing offensive security workflows and allows them to scale their operations exponentially. Agents are not constrained by factors affecting humans – they can work around the clock, on weekends, and on holidays and attempt multiple breach paths simultaneously enabling significantly reduced time from selecting a target to achieving objectives, increasing the speed and impact of complex attacks like supply chain compromises.
Storm-0940’s use of ARTEX accelerated the speed of compromised application abuse to authenticate to Microsoft 365 customer environments through applications that had already been granted access. This allowed the threat actor to operate without requiring an interactive user sign-in. In multiple affected environments, Microsoft observed AI-accelerated follow-on activity through Microsoft Graph, including reconnaissance, application credential changes, and attempts to modify privileges that could enable expanded or persistent access. The activity conducted by the threat actor through the usage of ARTEX framework did not result from a compromise of or a vulnerability in Microsoft corporate systems, products, or services.
Although Microsoft identified Storm-0940-initiated authentication and follow-on activity in multiple customer environments, the presence of an affected application or successful threat actor authentication does not necessarily indicate that customer data was accessed or exfiltrated. Microsoft Defender XDR provides detections and hunting queries for suspicious Microsoft Graph activity and activity associated with known threat infrastructure. Customers should review service principal sign-ins, investigate unexpected application credential or privilege changes, and follow ConnectWise’s published containment guidance while preserving relevant evidence for investigation. For a full list of detections please see the detections section.
What’s happening
Storm-0940 is a China-state aligned actor (with no known industry aliases) that has been active since 2021 and targets organizations across multiple industries for data theft. The actor has historically gained initial access using password spraying and exploitation of internet-facing applications, before using compromised accounts to move through targeted environments. In cloud environments, the actor has also established persistence by adding credentials to existing OAuth applications, allowing continued access to Microsoft 365 resources. The actor has used these applications to access and exfiltrate email and other data through Microsoft Graph.
As early as September 2026, Storm-0940 used the agentic AI penetration testing framework ARTEX to automate attacks targeting hundreds of organizations globally across a broad range of industries. These include aerospace and defense, automotive, chemicals, energy, financial services, government, legal, manufacturing, media, military, semiconductor, software, technology, and think tanks and non-profits. During the ConnectWise supply chain compromise, Storm-0940 used ARTEX to accelerate scanning and reconnaissance, password spraying, and OAuth application abuse at downstream victims.
Several of these Storm-0940 ARTEX-driven attacks have resulted in the actor obtaining privileged access to an organization’s cloud infrastructure – including multiple instances where the time from initial targeting to privileged access was less than 3 hours. When automated with AI, these activities generate a large volume of traffic and log data that may generate alerts. However, the speed of the activity allows very little time for Defenders to respond to those alerts and remediate the actor’s access in a coordinated fashion. Storm-0940’s activity illustrates how a threat actor with a broad target set can use an agentic AI tool and privileged authentication material to quickly attempt to compromise many organizations. While the majority of the targeting wasn’t successful, Storm-0940 achieved privileged cloud persistence at many organizations in a brief time.
What is ARTEX?
ARTEX is an open-source penetration testing framework that can use any AI model to automate a variety of offensive security workflows. The ARTEX framework is a multi-agent LLM system written in GO with a Next.js frontend. While the UI and generated output default to English, the framework can be switched to Korean, Mandarin, Spanish, or Japanese. ARTEX is a system of LLM-driven agents that run an autonomous penetration test from reconnaissance through data exfiltration with little needed human interaction. The agents then accumulate the discovered assets and vulnerabilities into a graph during the penetration test. In October 2026, public reporting noted that the ARTEX framework was being used by threat actors, such as the personal data breaches targeting Korean financial institutions. Microsoft Threat Intelligence has identified threat actors across multiple geographic regions leveraging the ARTEX framework.
On October 16, 2026, ConnectWise publicly reported unauthorized access to its customers’ tenants using multiple OAuth application identities. Following the unauthorized access, Storm-0940 used ARTEX to reach more than 2,250 tenants at 2,900 sign-in attempts per minute, a pace that leaves defenders with little time to detect and respond. While OAuth application abuse is a typical part of Storm-0940’s toolset, in this case the actor used ARTEX to accelerate the activity to machine speed.

Password Spraying
Between October 10 and 14, 2026, Storm-0940 infrastructure at 144.172.64[.]99 conducted an automated cross-tenant password-spray campaign targeting 327 accounts across eight organizations to gain access to Microsoft 365 and Exchange Online. During this large campaign, Microsoft telemetry captured 151,000+ failed logon events, with activity peaking on October 11 at 2,900 failures per minute and concentrating more than 111,000 failures into a single day. The campaign blended broad, low-rate account spraying with sustained, high-volume authentication attempts against selected identities; 48 accounts received more than 1,000 failures, and lockout responses represented nearly 98% of all activity. Despite the scale, no successful authentication, token issuance, Graph call, or directory change was observed.
Downstream customer access
On October 15, immediately after this notable activity, public reports of the compromise of the popular cloud backup application ConnectWise started to surface with direct references to indicators of compromise matching the same network range observed for the earlier password-spray campaign (144.172.64.x). An advisory from the affected cloud backup vendor posted on October 16 shared later additional indicators with one IP address matching exactly the 144.172.64[.]99 infrastructure responsible for the earlier password-spray campaign.
Additionally, after acquiring control of the identities of multiple ConnectWise cloud applications, the AI agents operating on behalf of the threat actor continued to use the same IP range to authenticate to customer environments using the illicit access acquired through these stolen app credentials, effectively taking advantage of the already established trust by these apps within a tenant. In some of these environments, the AI agents (on behalf of the threat actor) progressed beyond authentication to Microsoft Graph and directory operations, including reconnaissance, application credential modifications to establish persistence, and changes involving identities, groups, and privileged roles. Microsoft identified multiple customer environments with evidence of follow-on activity, highlighting how a compromised third-party application with high privileges could provide access beyond its originally intended purpose.
The application credential modification made by Storm-0940’s associated agents in the targeted victims’ environments can lead to persistence through other identities, credentials, and cloud services. These changes can remain active as a backdoor even after the original compromised application is mediated. Organizations should examine service principal sign-ins alongside subsequent Microsoft Graph activity, directory changes, and resource access, correlating suspicious events with authorized administrative activity. The presence of an affected application, or even successful authentication, does not necessarily indicate unauthorized data access or data exfiltration.
Mitigation and protection guidance
Microsoft recommends the following mitigations to reduce the impact of this threat. Check the recommendations card for the deployment status of monitored mitigations.
Immediate actions
- Keep affected ConnectWise application connections disabled until ConnectWise provides formal restoration instructions.
- Do not delete enterprise applications as the first response. Preserve configuration and evidence before making irreversible changes.
- Inventory all four application IDs listed in this profile and record the local service-principal Object ID in each tenant.
- Review every Microsoft 365 tenant where the affected applications are currently or were previously installed or authorized, even if the integration is no longer in use. Search by application ID rather than display name.
- Preserve available Microsoft Entra sign-in and audit records, Microsoft Purview Audit records, SIEM data, and previously configured Microsoft Graph telemetry. Do not delay urgent containment while waiting for exports.
- Review activity starting from at least October 15, 2026. Where records are available, extend service-principal sign-in review to October 1 and investigate earlier related activity, including failed authentications and volume anomalies.
- Review successful and failed service-principal sign-ins separately. Investigate unfamiliar sources and activity outside expected vendor infrastructure; do not limit review to the published IPs.
- Review Microsoft Entra audit records for application or service-principal credential additions; new applications, service principals, or owners; app-role assignments and consent grants; privileged role assignments; and changes to users, groups, authentication methods, or Conditional Access. On confirmed suspicious activity, revoke unnecessary permissions and rotate credentials.
- Review Microsoft 365 audit records to look for reconnaissance activities like listing directories, permissions, and approvals coming from unusual IPs.
- Review Microsoft 365 audit records for unusual mail or file access, downloads, forwarding, inbox or transport rules, delegated mailbox permissions, and related resource activity.
- Preserve evidence, then have an appropriately authorized responder remove confirmed unauthorized credentials, grants, owners, assignments, and identities.
Additional recommendations
- Threat actor misuse of AI accelerates risk across enterprise environments by amplifying existing threats such as exploitation of vulnerabilities, phishing, malware threats, and insider activity. To help organizations stay ahead of AI-enabled threat activity, Microsoft has introduced the Security Dashboard for AI. The dashboard provides users with a unified view of AI security posture by aggregating security, identity, and data risk across Microsoft Defender, Microsoft Entra, and Microsoft Purview. This allows organizations to understand what AI assets exist in their environment, recognize emerging risk patterns, and prioritize governance and security across AI agents, applications, and platforms. To learn more about the Microsoft Security Dashboard for AI see: Assess your organization’s AI risk with Microsoft Security Dashboard for AI (Preview).
- Enable threat protection for AI services in Microsoft Defender for Cloud to identify threats to generative AI applications in real time and for assistance in responding to security issues.
- Apply least privilege to multi-tenant application permissions and consent grants.
- Monitor credential additions, privilege assignments, and anomalous app-only activity, especially to applications with high privileged permissions and scopes.
- Verify that vendor credential rotation and any tenant-level remediation eliminated remaining unauthorized access.
Assess the operational effect on backup and restore workflows and follow current ConnectWise restoration guidance.
Microsoft Defender XDR detections
Microsoft Defender XDR customers can refer to the list of applicable detections below. Microsoft Defender XDR coordinates detection, prevention, investigation, and response across endpoints, identities, email, and apps to provide integrated protection against attacks like the threat discussed in this blog.
Customers with provisioned access can also use Microsoft Security Copilot in Microsoft Defender to investigate and respond to incidents, hunt for threats, and protect their organization with relevant threat intelligence.
| Tactic | Observed activity | Microsoft Defender coverage (Alert title) |
| Discovery | Unusual behavior attributes were observed from Graph API activity originating from associated ConnectWise Application. | Unusual Microsoft Graph activity associated with Compromised ConnectWise Application |
| Privilege Escalation Persistence
Initial Access/Valid Accounts |
ConnectWise Management Application directly granted itself the Global Administrator role through the Add member to role operation, with no prior Global Administrator self-assignment observed for the same application in the preceding 7 days. | Application self-assigned Global Administrator role |
| Discovery | Graph API activity for the user originated from an active, production Microsoft Threat Intelligence Center IP indicator. | Graph API activity from a Microsoft threat intelligence IP address |
| Valid Accounts | A user sign-in from a nation-state threat actor infrastructure has been detected from this account. A threat actor might have compromised the user account to gain unauthorized access and conducted other malicious activities in your system. Investigate promptly to mitigate security risks. | Suspicious sign-in from verified nation-state threat actor infrastructure |
| Steal Application Access Token | A sign-in was observed from a known threat actor IP address. We recommend promptly investigating this alert, as a threat actor might already be using the stolen credentials to move laterally in the network. | Malicious sign-in from known threat actor IP address |
Microsoft Defender for Cloud Apps detections
| Tactic | Observed activity | Microsoft Defender coverage (Alert title) |
| Persistence | An application or service principal was granted a highly privileged app role. | Suspicious addition of app role assignments to service principal |
| Collection | High-volume mailbox access by an OAuth app after a suspicious role grant. | Suspicious mail access activity by OAuth application following role assignment |
| Collection | A suspicious OAuth app that was added recently started accessing the Teams Messages folder using an email client. | Newly added OAuth application accessing Teams Messages folder via email client |
| Credential Access | An OAuth application activity from an uncommonly visited ISP has been observed, indicating potential suspicious behavior. | OAuth application activity from an uncommonly visited ISP |
| Exfiltration | OAuth applications seen performing extensive Microsoft Graph SharePoint enumeration activities shortly after application creation or modification events | Suspicious OAuth application created from a risky user context performing graph SharePoint enumeration |
| Privilege Escalation | Risky permissions that enable user to act as other entities or escalate to Global Admin provided to Service Principal | High-privilege application roles assigned to a service principal |
| Persistence | A service principal added an application role assignment to itself | Suspicious addition of application role assignments by service principal to itself |
Microsoft Security Copilot
Security Copilot customers can use the standalone experience to create their own prompts or run the following prebuilt promptbooks to automate incident response or investigation tasks related to this threat:
- Incident investigation
- Threat actor profile
- Threat Intelligence 360 report based on MDTI article
Note that some promptbooks require access to plugins for Microsoft products such as Microsoft Defender XDR or Microsoft Sentinel.
Threat intelligence reports
Microsoft customers can use the following reports in Microsoft products to get the most up-to-date information about the threat actor, malicious activity, and techniques discussed in this blog. These reports provide intelligence, protection information, and recommended actions to prevent, mitigate, or respond to associated threats found in customer environments.
Microsoft Defender XDR Threat analytics
Activity Profile: ConnectWise Cloud Backup credential abuse: assessment and response guidance
Indicators of compromise (IOC)
| Indicator | Type | Description |
| 144.172.64[.]128 | IP | These IPs were seen performing Sign-ins and Graph API activity in customer environments of ConnectWise apps. |
| 144.172.64[.]99 | IP | |
| 144.172.64[.]60 | IP | |
| 187.15.88[.]186 187.15.90[.]217 187.15.89[.]186 | IP | These IPs were seen accessing the Graph API via the compromised apps. However, since they are VPN IPs, it is transient and relevant for investigation on October 15 and 16 in context with compromised applications. |
| Python-urllib/3.12 | User Agent | These user agents were seen performing Sign-ins and Graph API activity on customer environments using ConnectWise apps. |
| python-requests/2.31.0 | User Agent | |
| python-requests/2.34.2 | User Agent | |
| curl/7.88.1 | User Agent | |
| azure-toolkit/1.0 | User Agent |
NOTE: The following sample queries let you search for a week’s worth of events. To explore up to 30 days’ worth of raw data to inspect events in your network and locate potential indicators related to this campaign for more than a week, go to the Advanced Hunting page > Query tab, select the calendar dropdown menu to update your query to hunt for the Last 30 days.
Microsoft Defender XDR advanced hunting
1- OAuthAppInfo → Is the affected app present, enabled, and what permissions does it hold?
Start with OAuthAppInfo to determine whether any of the affected ConnectWise applications are present in the tenant and understand the access they have been granted. The query identifies the application and its tenant-specific service principal, whether it is enabled, its privilege level, consent information, and the individual permissions assigned to it. This establishes the customer’s potential exposure and gives investigators the ServicePrincipalId needed for further hunting. A match does not mean the application was abused, only that it is present and potentially had access, so the next step is to determine whether the service principal was actually used. Run query
let ConnectWiseApps = dynamic([
"506e08f9-6e9a-4da4-942b-a099a03644ae", // ConnectWise Cloud Backup
"24205314-2b89-4e07-a2a4-579e898a5640", // ConnectWise - MS Teams
"0de14c77-b9b0-4137-9360-34878a929827", // ConnectWise - MS Graph
"c921256f-04a7-44e8-9b2a-69c33929ba19" // SkyKick Partner Portal
]);
OAuthAppInfo
| where OAuthAppId in (ConnectWiseApps)
| mv-expand Permission = Permissions
| extend
PermissionName = tostring(Permission.PermissionName),
TargetApp = tostring(Permission.TargetAppDisplayName),
TargetAppId = tostring(Permission.TargetAppId),
PermissionType = tostring(Permission.PermissionType),
PermissionPrivilegeLevel = tostring(Permission.PrivilegeLevel),
UsageStatus = tostring(Permission.UsageStatus)
| project
AppName,
OAuthAppId,
ServicePrincipalId,
AppStatus,
PrivilegeLevel,
IsAdminConsented,
PermissionName,
PermissionType,
PermissionPrivilegeLevel,
TargetApp,
TargetAppId,
UsageStatus
| order by AppName asc, PermissionPrivilegeLevel desc
2 – EntraIdSpnSignInEvents + GraphAPIAuditEvents → Did the service principal authenticate, and what Microsoft Graph activity followed?
Use this query to investigate service-principal sign-ins and Microsoft Graph API activity associated with the identified ConnectWise applications and suspicious IP addresses, starting October 13, 2026.
The query combines both event types into a chronological view, helping defenders identify suspicious authentication and related Graph operations, including potential credential changes, privilege modifications, and unusual resource access. Remove the IP filter for broader hunting. Results require further correlation, as authentication alone does not establish compromise. Run query
let Apps = dynamic([
"506e08f9-6e9a-4da4-942b-a099a03644ae",
"24205314-2b89-4e07-a2a4-579e898a5640",
"0de14c77-b9b0-4137-9360-34878a929827",
"c921256f-04a7-44e8-9b2a-69c33929ba19"
]);
let IPs = dynamic(["144.172.64.60", "144.172.64.99", "144.172.64.128"]);
union kind=outer
(EntraIdSpnSignInEvents
| extend EventType = "Sign-in"),
(GraphAPIAuditEvents
| extend EventType = "Graph API", IPAddress = IpAddress)
| where Timestamp >= datetime(2026-10-13)
| where ApplicationId in (Apps)
| where IPAddress in (IPs) // Comment out for broader hunting
| project-away IpAddress
| order by Timestamp asc
Sentinel hunting queries
1-SigninLogs → Did a service principal authenticate, from where, and against what resource?
Use SigninLogs to determine whether an affected application identity actually authenticated. This moves the investigation from potential exposure to observed authentication, allowing defenders to examine the application and service principal alongside the source IP address, geographic information, authentication result, and resource being accessed. Investigators should evaluate these sign-ins against the application’s expected activity and look for unusual source infrastructure, resources, or authentication patterns before pivoting into subsequent Graph activity. Run query
let IPIndicators = dynamic([
"144.172.64.60", // IP Indicator
"144.172.64.99", // IP Indicator
"144.172.64.128" // IP Indicator
]);
let ConnectWiseApps = dynamic([
"506e08f9-6e9a-4da4-942b-a099a03644ae", // ConnectWise Cloud Backup
"24205314-2b89-4e07-a2a4-579e898a5640", // ConnectWise - MS Teams
"0de14c77-b9b0-4137-9360-34878a929827", // ConnectWise - MS Graph
"c921256f-04a7-44e8-9b2a-69c33929ba19" // SkyKick Partner Portal
]);
SigninLogs
| where TimeGenerated >= datetime(2026-10-13)
| where AppId in (ConnectWiseApps)
//| where IPAddress in (IPIndicators) // Comment out to review all activity from these applications
| project
TimeGenerated,
AppId,
ServicePrincipalName,
ResourceDisplayName,
ResourceId,
IPAddress,
CorrelationId
| order by TimeGenerated asc
2 – MicrosoftGraphActivityLogs → What observable Graph API activity followed?
Use MicrosoftGraphActivityLogs to investigate observable Microsoft Graph activity following authentication. This query allows defenders to pivot on the affected ApplicationId or tenant-specific ServicePrincipalId and examine details such as the request URI, HTTP method, response status, scopes, source IP address, and target workload. This helps establish what Graph activity occurred after the service principal authenticated and provides additional context around the resources the application attempted to access.
Importantly, the absence of results should not be treated as confirmation that no access occurred; Graph API telemetry should be considered alongside the application permissions and service principal authentication activity identified in the previous hunting steps. Run query
let IPIndicators = dynamic([
"144.172.64.60", // IP Indicator
"144.172.64.99", // IP Indicator
"144.172.64.128" // IP Indicator
]);
let ConnectWiseApps = dynamic([
"506e08f9-6e9a-4da4-942b-a099a03644ae", // ConnectWise Cloud Backup
"24205314-2b89-4e07-a2a4-579e898a5640", // ConnectWise - MS Teams
"0de14c77-b9b0-4137-9360-34878a929827", // ConnectWise - MS Graph
"c921256f-04a7-44e8-9b2a-69c33929ba19" // SkyKick Partner Portal
]);
MicrosoftGraphActivityLogs
| where TimeGenerated >= datetime(2026-10-13)
| where AppId in (ConnectWiseApps)
| where IPAddress in (IPIndicators) // Comment out to review all Graph activity from these applications
| project
TimeGenerated,
AppId,
IPAddress,
RequestMethod,
RequestUri,
ResponseStatusCode,
Scopes,
ClientRequestId,
OperationId,
RequestId
| order by TimeGenerated asc
MITRE ATT&CK Techniques observed
This threat has exhibited use of the following attack techniques. For standard industry documentation about these techniques, refer to the MITRE ATT&CK framework.
Reconnaissance
Initial Access
Privilege Escalation
Credential Access
Discovery