White Papers
A collection of works I have written about how Cloud + and CySA + concepts apply to the real world.
A collection of works I have written about how Cloud + and CySA + concepts apply to the real world.
White Paper — Cloud+ for the Rest of Us: Applied Case Study Series
On June 12, 2025, Google Cloud experienced a major global service disruption originating in Service Control, the regional system responsible for authorizing API requests and enforcing quota policy across Google Cloud Platform and Google Workspace. This white paper examines the incident from a technical and conceptual standpoint, tracing the failure from a quota-checking feature deployed on May 29, 2025 without adequate error handling or feature flag protection, through an unrelated policy update on June 12 that inserted unintended blank fields into that feature's underlying data, causing a null pointer exception and a global crash loop across Service Control binaries. Rather than treating the outage as an isolated coding mistake, this paper relates the event back to foundational cloud computing concepts covered under CompTIA Cloud+ (CV0-004), including deployment strategy and feature flagging, infrastructure and configuration testing, observability, identity and access management as a single point of dependency, and the retry and backoff behavior that determines whether a recovering system heals or re-crashes itself. The analysis concludes that the outage is best understood not as a hardware failure or a regional disaster, but as a demonstration of how a change made two weeks earlier, sitting dormant and untested in production, can combine with an unrelated data update to take down services that had nothing to do with either change individually.
Two of the outages examined elsewhere in this series, AWS's October 2025 DynamoDB DNS incident and Cloudflare's November 2025 Bot Management incident, both trace back to a single change that went wrong on the day of the outage itself. The Google Cloud outage of June 12, 2025 is a useful variation on that theme, because the change that ultimately caused the failure was deployed more than two weeks earlier, on May 29, and sat dormant in production without incident until it was triggered by a completely separate, seemingly unrelated update. This paper walks through what happened, then connects each stage of the failure back to specific concepts taught under Cloud+, treating the incident as a case study in how latency between a risky change and its consequences can make a root cause considerably harder to see coming.
Service Control is a regional system within Google Cloud's infrastructure responsible for authorizing API requests and enforcing quota policies across the company's services (CyberSecurityNews, 2025). In practical terms, nearly every request made to a Google Cloud API, and by extension a large share of requests made to Google Workspace products built on that same infrastructure, passes through Service Control to confirm the caller is authenticated, authorized, and within its usage limits before the request is allowed to proceed (ThousandEyes, 2025). Because this authorization step sits in the critical path for so many services, a failure inside Service Control does not stay contained to one product. It can prevent authentication and authorization from completing across dozens of otherwise unrelated services simultaneously, regardless of whether those services are healthy in every other respect (ThousandEyes, 2025).
According to Google's own incident report, the underlying change was introduced on May 29, 2025, when engineers deployed a new Service Control feature intended to support additional quota policy checks (CyberSecurityNews, 2025). That code shipped without proper error handling and without feature flag protection, meaning there was no mechanism to disable the new logic quickly or roll it out gradually once it reached production (Tib3rius, 2025). The feature sat inactive without causing problems for roughly two weeks.
The triggering event occurred on June 12, 2025, at approximately 10:45 to 10:51 AM PDT, when a policy update containing unintended blank fields was inserted into the regional Spanner database tables that Service Control relies on for policy data (CyberSecurityNews, 2025; Google Cloud Status Dashboard, 2025). That malformed data was replicated globally within seconds and activated the dormant quota-checking code path from the May 29 deployment. Because the code assumed certain policy metadata fields would always be populated, the blank fields triggered a null pointer exception, and Service Control binaries entered a crash loop across regions worldwide almost simultaneously (Kasera, 2025).
Google's site reliability engineering team identified the root cause within approximately ten minutes and deployed what the company internally referred to as a red-button kill switch within about forty minutes to disable the problematic serving path (CyberSecurityNews, 2025). Most regions recovered within roughly two hours, but the us-central1 region experienced a considerably longer recovery. As Service Control tasks restarted in that region, they created what Google described as a herd effect against the underlying Spanner infrastructure, with a large number of simultaneous reconnection attempts overwhelming the database rather than allowing it to recover smoothly (CyberSecurityNews, 2025). The incident officially began at 10:51 AM PDT and ended at 18:18 PM PDT, a duration of approximately seven hours and twenty-seven minutes, though the most severe global impact was concentrated in the first two to three hours, with us-central1 remaining significantly degraded for around two hours and thirty-five minutes (Hasty Briefs, 2025; Parametrix, 2025).
The technical root cause has two distinct components that had to combine for the outage to occur. The first was the underlying code defect itself, a quota policy check that did not account for the possibility of incomplete or blank metadata, and that lacked defensive error handling to fail safely if it encountered exactly that condition (CyberSecurityNews, 2025). The second was the absence of feature flag protection around that code, which meant there was no way to quickly disable just the new quota-checking logic once the problem was identified. Google's own commentary on the incident noted directly that if the feature had been flag protected, the issue would likely have been caught in staging before it ever reached a global production environment (Tib3rius, 2025).
The second half of the failure came from how the system behaved once it began recovering. Because Service Control tasks in the affected regions all attempted to reconnect and rebuild their state against Spanner at roughly the same time, the underlying database was hit with a surge of simultaneous requests rather than a gradual, staggered recovery. Google's engineers identified that Service Control lacked proper randomized exponential backoff mechanisms, meaning restarting tasks were not staggering their retries in a way that would have prevented this kind of self-inflicted overload (CyberSecurityNews, 2025). This is why us-central1, despite receiving the same fix as every other region, took considerably longer to stabilize.
Cloud+ covers deployment strategies such as canary and rolling releases specifically to limit the blast radius of a new change, but a feature flag serves a related and equally important purpose. It allows new logic to be shipped into production while remaining inert until deliberately activated, and just as importantly, allows that logic to be switched off again quickly without a full rollback if something goes wrong. The May 29 Service Control change had neither a staged rollout nor a flag, which meant that once the triggering data appeared on June 12, there was no quick, targeted way to disable only the new code. The response instead required identifying and disabling an entire serving path across the company's infrastructure.
Infrastructure and configuration as code, as covered under Cloud+, emphasizes testing changes before they reach production, but this incident illustrates a harder version of that discipline. The May 29 deployment likely passed whatever tests were run against its own intended behavior. What it did not account for was a completely different kind of input, malformed metadata from an unrelated policy update, arriving weeks later. Testing a change for its intended function is not the same as testing that change against the full range of unexpected data it might eventually encounter, and this incident is a clear illustration of why defensive coding assumptions, not just functional tests, belong in a release process.
Cloud+ frames observability as logging, tracing, monitoring, and alerting working together so that problems are caught early rather than discovered in production. The genuinely difficult part of this incident from an observability standpoint is that the risky change and its consequence were separated by roughly two weeks, with nothing in between to flag that a landmine had been quietly deployed. This is a useful reminder that observability needs to account not only for what is happening right now, but for what was silently introduced earlier and is still sitting untested in the live environment, waiting for the right unrelated event to trigger it.
Cloud+ treats identity and access management as its own subdomain precisely because authentication and authorization sit in the critical path of nearly everything else a system does. This incident demonstrates that dependency at enormous scale. Because Service Control's authorization function is required before most Google Cloud and Workspace requests can proceed at all, a defect confined to one policy-checking code path was able to disrupt dozens of otherwise healthy, unrelated services simultaneously (ThousandEyes, 2025). The lesson is not that centralized authorization is a design mistake, since decentralizing it would introduce its own consistency and security problems, but that any single system sitting in that position needs defensive engineering proportional to how much depends on it.
Cloud+ discusses scaling and resiliency largely in terms of handling growth or failure gracefully, but recovery itself is a design problem that deserves the same attention. The us-central1 herd effect shows that a fix can be correctly applied and still take far longer to stabilize a system than expected, if the recovering components are not staggered in how aggressively they reconnect to a shared dependency like a database. Randomized exponential backoff exists specifically to prevent a fleet of recovering processes from overwhelming the very system they are trying to reconnect to, and its absence here turned an otherwise routine regional recovery into the longest-running part of the incident.
The outage disrupted access to widely used Google products including Gmail, Google Drive, Google Calendar, Google Meet, and Google Docs, alongside a broad range of Google Cloud services such as BigQuery, Compute Engine, Cloud SQL, and API Gateway (Gbhackers, 2025; Hasty Briefs, 2025). The disruption extended well beyond Google's own products, affecting prominent third-party platforms that rely on Google Cloud infrastructure, including Spotify, Discord, Cloudflare, Shopify, and Twitch, with crowdsourced outage tracker Downdetector recording over 1.4 million user reports globally (Gbhackers, 2025). Independent monitoring firm Parametrix estimated that roughly 16 percent of the SaaS, PaaS, and IaaS providers it tracks in real time experienced some level of disruption during the event, underscoring how a failure inside one company's authorization layer can ripple across a large share of the broader internet ecosystem within minutes (Parametrix, 2025).
Require feature flag protection for any change touching a shared, critical-path system, not just for changes considered risky at deployment time, since a change's real risk may not be visible until it interacts with unrelated data weeks later.
Treat a successfully deployed, currently inactive code path as an ongoing risk requiring monitoring and review, rather than a closed chapter once its initial deployment passes without incident.
Build defensive error handling for incomplete or malformed metadata into any system that consumes dynamically updated policy or configuration data, rather than assuming upstream data will always be well formed.
Implement randomized exponential backoff for any fleet of services that reconnects to a shared dependency like a database after a restart, so that recovery does not become a self-inflicted second outage.
Map which services depend on a centralized authorization or policy system like Service Control, since the business impact of a defect there scales with how much of the platform quietly assumes it will always be available.
The June 12, 2025 Google Cloud outage did not begin with the change that triggered it. It began two weeks earlier, with a quota-checking feature deployed without error handling or feature flag protection, and it waited quietly until an unrelated policy update supplied the exact malformed input needed to expose it. Cloud+ concepts around deployment strategy, testing discipline, observability, identity and access management, and recovery behavior all speak directly to different pieces of this incident, and together they explain both why the failure happened and why it took considerably longer to resolve in one region than in the rest of the world. The clearest lesson is that a change does not need to fail on the day it ships to eventually cause an outage. It only needs to be shipped without the safety nets that would have caught the problem before a completely unrelated event pulled the trigger.
CyberSecurityNews. (2025, June 16). Google massive cloud outage linked to API management system. https://cybersecuritynews.com/google-massive-cloud-outage-linked/
Gbhackers. (2025, June 16). Google Cloud suffers major disruption after API management error. https://gbhackers.com/google-cloud-suffers-major-disruption/
Google Cloud Status Dashboard. (2025, June 12). Incident affecting multiple Google Cloud services. https://status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW
Hasty Briefs. (2025, June 14). Google Cloud incident report – 2025-06-13. https://hb.int2inf.com/en/s/item/Y6KV6GKEt1BJyBbxRqsWMP-google-cloud-service-outage-june-2025
Kasera, J. (2025, June 20). Inside the June 2025 Google Cloud outage — From the lens of a backend engineer. Medium. https://medium.com/@kaserajatin456/inside-the-june-2025-google-cloud-outage-from-the-lenses-of-a-backend-engineer-822db5fd7a32
Parametrix. (2025, June). GCP outage June 2025 — Parametrix incident report. https://www.parametrixinsurance.com/blog/google-cloud-outage-june2025-heres-what-you-should-know
Tib3rius. (2025, June 12). Looks like the Google Cloud incident report is out [Post]. X. https://x.com/0xTib3rius/status/1933702904734429560
ThousandEyes. (2025, June 12). Google Cloud outage analysis: June 12, 2025. https://www.thousandeyes.com/blog/google-cloud-outage-analysis-june-12-2025
VC Solutions. (2025, June 19). What triggered the Google Cloud outage in June 2025? https://www.vcsolutions.com/blog/google-cloud-outage-causes-behind-the-june-2025-incident/
White Paper — Cloud+ for the Rest of Us: Applied Case Study Series
On November 18, 2025, Cloudflare, a provider whose network sits in front of a substantial share of the modern internet, experienced a significant global service disruption that produced widespread HTTP 5xx errors across thousands of dependent websites and applications, including high-profile platforms such as ChatGPT, X, Shopify, and Indeed. This white paper examines the incident from a technical and conceptual standpoint, tracing the failure from its origin, a routine database permissions change that caused a query to return duplicate data, through the oversized configuration file that resulted and the hard-coded software limit that the file then exceeded. Rather than treating the outage as an isolated engineering mistake, this paper relates the event back to foundational cloud computing concepts covered under CompTIA Cloud+ (CV0-004), including change management and configuration as code, deployment strategy and staged rollouts, observability, vulnerability and defect identification, and the risks of architectural concentration around a small number of internet infrastructure providers. The analysis concludes that the outage illustrates a distinctly different failure mode than a hardware or regional disaster. It was a software defect, propagated globally in minutes by the very automation designed to keep the system current, and it demonstrates why defensive coding, staged deployment, and vendor diversification remain relevant even to organizations that never touch a server themselves.
Most conversations about cloud resilience focus on data centers losing power, regions going dark, or a provider's compute fleet running out of capacity. The November 18, 2025 Cloudflare incident is a useful counterexample, because nothing physical failed at all. No data center lost power, no hardware broke, and no region went offline. Instead, a single configuration file grew larger than a piece of software expected it to be, and that software did not know how to fail gracefully when it did. Because Cloudflare's network operates as connective tissue between the internet and an enormous number of independently owned sites and services, that narrow software defect surfaced worldwide within minutes, taking down or degrading services many of its own customers had never even heard of Cloudflare touching. This paper walks through what happened, then connects each stage of the failure back to specific concepts taught under Cloud+, treating the incident as a working case study rather than a headline.
Cloudflare operates a large content delivery and security network that sits between end users and a significant share of the world's websites and applications, providing services such as DDoS mitigation, content caching, and bot traffic filtering (Cloudflare, 2025). One of those services, Bot Management, uses a machine learning model to generate a bot score for every request that traverses Cloudflare's network, helping customers decide which traffic is likely automated and which is not (Cloudflare, 2025). That model depends on a feature configuration file describing the individual traits it uses to make predictions. The file is regenerated and republished across Cloudflare's entire global network every few minutes so the system can react quickly to changing traffic patterns (Cloudflare, 2025). This same design that makes Bot Management responsive to real-world threats is also what allowed a single bad file to reach the entire network almost immediately once something went wrong.
According to Cloudflare's own published account of the incident, a change to database permissions was deployed at 11:05 UTC intended to improve the security and reliability of a distributed ClickHouse database cluster underlying parts of its systems (Cloudflare, 2025; Leanware, 2025). The change made table access more explicit, which had the unintended side effect of causing a query used to build the Bot Management feature file to return duplicate rows, more than doubling the file's normal size from roughly sixty features to over two hundred (Tahir, 2025; Cloudflare, 2025).
By 11:20 UTC, Cloudflare's network began experiencing significant failures delivering core traffic, and customers started seeing Cloudflare-branded HTTP 5xx error pages (Cloudflare, 2025). Because the underlying ClickHouse cluster was being updated in phases, some nodes continued producing a valid, correctly sized feature file while others produced the oversized one, which caused the network to intermittently recover and fail again as good and bad files alternated in propagation (GEC Newswire, 2025). Cloudflare engineers identified the oversized Bot Management file as the underlying cause by 13:37 UTC, halted automatic generation of the feature file by 14:24 UTC, and distributed a previous known-good file globally by 14:30 UTC, after which services began to stabilize (DEV Community, 2025). Cloudflare confirmed full restoration of services by 17:06 UTC, making the practical end-to-end disruption roughly six hours from the initial permissions change, with the most acute period of widespread failure concentrated in the first two to three hours (Cloudflare, 2025; DEV Community, 2025).
The technical root cause traces back to a query against a system table that, prior to the permissions change, implicitly returned only a subset of columns the querying user had explicit access to. After the change, the same query began returning metadata for every table the user could technically see, including columns from an additional underlying schema, effectively doubling the number of rows in the result (Leanware, 2025; Panto, 2025). Because that query result fed directly into the automated process that builds the Bot Management feature file, the file itself doubled in size, growing well past its typical footprint (Cloudflare, 2025).
The proxy software running across Cloudflare's global network preallocates a fixed amount of memory for feature file entries, enforcing a hard-coded limit of two hundred features for performance reasons (Tahir, 2025; Rescana, 2025). When the oversized file exceeded that limit, the software encountered a condition its error handling was not written to accommodate, and it failed outright rather than degrading gracefully, an outcome consistent with reporting that an unwrap-style assumption in the affected proxy code expected the file to always be valid (DEV Community, 2025). The result was not a slow degradation but a hard failure, propagated to every machine that pulled down the new file during its usual five-minute refresh cycle (Cloudflare, 2025).
Cloud+ treats infrastructure and configuration as code as a practice built around describing systems in text so changes are repeatable, reviewable, and testable, rather than something built by hand. The November 18 incident began as exactly this kind of change, a permissions update intended to improve database security, and it passed through Cloudflare's normal deployment process without immediately revealing the downstream effect it would have on an entirely different system's data pipeline (Leanware, 2025). This is a useful, uncomfortable reminder that testing configuration changes for their intended effect is not the same as testing for every downstream system that quietly consumes the data those changes touch. A permissions change and a machine learning feature file might not appear related on an architecture diagram, yet one broke the other completely.
Cloud+ covers deployment strategies such as canary and rolling releases specifically because pushing a change everywhere at once removes the safety net that a smaller blast radius provides. The Bot Management feature file's five-minute global refresh cycle is efficient for keeping bot detection current, but it is also the mechanism that turned one bad query result into a worldwide outage within roughly fifteen minutes of the original permissions change (Cloudflare, 2025). A more staged approach to propagating configuration changes, even ones categorized as routine data refreshes rather than code deployments, would have limited how much of the network could be affected before the problem was caught.
The intermittent recovery and failure pattern documented during the incident, caused by some ClickHouse nodes producing valid files while others produced the oversized one, made the problem considerably harder to diagnose in real time (GEC Newswire, 2025). This lines up with the Cloud+ emphasis on observability as a layered practice. Monitoring told Cloudflare's teams something was wrong quickly, but distinguishing a genuine external attack from an internal configuration defect took real investigative work, since the initial symptoms, widespread 5xx errors appearing suddenly across a security-focused network, could plausibly have looked like an attack in progress (TechInformed, 2025). Cloudflare's own account explicitly notes that the issue was not caused by malicious activity, a distinction that mattered enormously for how quickly the response could focus on the actual cause rather than an incident response plan built around intrusion (Cloudflare, 2025).
Cloud+ frames vulnerability and defect management as an ongoing cycle of identification, assessment, and remediation, and this incident is a reminder that not every defect needing that cycle is a traditional security vulnerability. A hard-coded limit combined with error handling that could not tolerate exceeding it is a latent software defect, sitting quietly until the right unusual input exposed it (DEV Community, 2025). The broader operational lesson is that software processing dynamically generated input, especially input that gets regenerated and republished automatically without a human reviewing it each time, needs to fail in a controlled and limited way rather than crashing the process handling it entirely.
Cloud+ discusses multicloud and multi-provider strategies primarily in the context of resilience against a single provider's outage. This incident highlights a related but distinct concentration risk that applies specifically to internet infrastructure and edge providers rather than compute or storage providers. Cloudflare's position in front of a very large share of global web traffic means that many of the affected organizations, including well known platforms such as ChatGPT, X, Shopify, and Indeed, had no direct relationship to the defect at all beyond routing traffic through the same provider (ControlD, 2025). For customers where uninterrupted availability is critical, this incident is a concrete argument for evaluating fallback paths at the CDN and edge security layer, not only at the compute and storage layer most resilience conversations default to.
Independent monitoring during the incident suggested roughly one in five web pages relying on Cloudflare experienced some disruption at the height of the outage, with the impact touching an estimated one-third of the world's ten thousand most popular websites, apps, and services (ControlD, 2025). Reported disruptions extended across AI platforms, social media, e-commerce, job search services, design tools, and even outage-tracking services themselves, illustrating how thoroughly interconnected supposedly unrelated platforms had become through a shared upstream provider (ControlD, 2025; TechInformed, 2025). Preliminary industry estimates placed the aggregate financial impact across affected businesses in the hundreds of millions of dollars, though such figures should be treated as early approximations pending more complete analysis (DEV Community, 2025).
Treat any system that automatically consumes and republishes generated data, not just human-authored code, as a deployment pipeline requiring staged rollout and validation before global propagation.
Audit downstream consumers before making seemingly unrelated changes, such as a database permissions update, since a change scoped to one system can silently alter the output of another system that depends on its data.
Build defensive handling for oversized, malformed, or otherwise unexpected input into any process that automatically ingests dynamically generated configuration, rather than assuming that input will always be valid.
Maintain incident response procedures that quickly distinguish an internal software defect from an external attack, since responding to a network wide 5xx event as a security incident versus a configuration defect calls for different next steps.
Evaluate fallback options at the CDN and edge security layer specifically, not only at the compute and storage layer, given how much of the modern internet now routes through a small number of providers at that layer.
The November 18, 2025 Cloudflare outage did not involve a data center losing power, a region going dark, or malicious activity of any kind. It involved a permissions change, a query that returned more data than intended, a configuration file that grew past a hard-coded limit, and error handling that was not built to survive that scenario. The incident is a useful complement to disaster-driven outages like AWS's October 2025 event, because it demonstrates a different category of fragility, one rooted in software assumptions and automated propagation rather than physical infrastructure. Cloud+ concepts around configuration as code, staged deployment, observability, and defect management apply just as directly to this kind of failure as they do to a regional disaster, and the fact that a five-minute refresh cycle turned one bad query into a worldwide event within fifteen minutes is itself the clearest argument for why those concepts exist in the first place.
Cloudflare. (2025, November 18). Cloudflare outage on November 18, 2025. The Cloudflare Blog. https://blog.cloudflare.com/18-november-2025-outage/
ControlD. (2026, January 8). Cloudflare outage history (2019-2026). https://controld.com/blog/biggest-cloudflare-outages/
DEV Community. (2025, November). How the Cloudflare outage of November 18, 2025 exposed the fragility of the modern internet. https://dev.to/lightningdev123/how-the-cloudflare-outage-of-november-18-2025-exposed-the-fragility-of-the-modern-interne-10c2
DEV Community. (2025, November). What engineers can learn from the Cloudflare outage (November 2025). https://dev.to/billy_de_cartel/what-engineers-can-learn-from-the-cloudflare-outage-november-2025-3m0e
GEC Newswire. (2025, November 20). Cloudflare suffers major global outage after Bot Management file error. https://gecnewswire.com/cloudflare-suffers-major-global-outage-after-bot-management-file-error/
Leanware. (2025, November 24). Cloudflare outage November 2025: What happened & prevention. https://www.leanware.co/insights/cloudflare-outage
Panto. (2025, November 26). Cloudflare outage: How one feature file took down the network. https://www.getpanto.ai/blog/cloudflare-outage
Rescana. (2025, November 19). Cloudflare Bot Management outage: Technical root cause analysis and impact of the November 18, 2025 service disruption. https://www.rescana.com/post/cloudflare-bot-management-outage-technical-root-cause-analysis-and-impact-of-the-november-18-2025
Tahir. (2025, November 19). A detailed analysis of the Cloudflare outage on 18 November 2025. Medium. https://medium.com/@tahirbalarabe2/a-detailed-analysis-of-the-cloudflare-outage-on-18-november-2025-eebe14d21f83
TechInformed. (2025, November 19). Cloudflare explains outage that disrupted customer traffic; cause traced to oversized bot feature file. https://techinformed.com/cloudflare-explains-outage-that-disrupted-customer-traffic-cause-traced-to-oversized-bot-feature-file/
Cloud+ for the Rest of Us: Applied Case Study Series (Published May 7, 2026)
On October 19 and 20, 2025, Amazon Web Services (AWS) experienced a significant service disruption originating in its Northern Virginia (US-EAST-1) Region that rippled outward to affect thousands of dependent applications and services worldwide, including major consumer platforms, financial systems, and government portals. This white paper examines the incident from a technical and conceptual standpoint, tracing the failure from its root cause, a latent race condition in the automated DNS management system supporting Amazon DynamoDB, through its cascading effects on Amazon EC2 and Network Load Balancer (NLB) infrastructure. Rather than treating the outage as an isolated engineering failure, this paper relates the event back to foundational cloud computing concepts covered under CompTIA Cloud+ (CV0-004), including regional and availability zone design, recovery time and recovery point objectives, the shared responsibility model, loosely coupled architecture, and multi-region and multicloud resilience strategies. The analysis concludes that the outage was less a story of a single broken component and more a demonstration of how concentrated dependency on one region, even one operated by a highly mature provider, can turn a narrow internal defect into a global disruption. Recommendations for both cloud providers and cloud customers are offered in light of established Cloud+ principles.
Cloud computing is often marketed on the promise of near limitless availability, and for the most part, that promise holds up remarkably well. Providers such as AWS operate infrastructure at a scale and with a level of engineering discipline that most individual organizations could never replicate on their own. Yet the events of October 19 and 20, 2025 offered a sobering reminder that scale does not eliminate risk, it simply changes its shape. A single, narrow defect deep inside the automation supporting one database service was enough to disrupt operations for airlines, banks, gaming platforms, government tax systems, and household smart home devices simultaneously (Akamai, 2025; CIO, 2025). This paper walks through what actually happened, then connects each stage of the failure back to specific concepts taught under Cloud+, so that the incident becomes something more useful than a headline. It becomes a working example of why these concepts exist in the first place.
AWS organizes its global infrastructure into geographic regions, and within each region, physically separate availability zones designed to isolate failures from one another. US-EAST-1, located in Northern Virginia, is AWS's oldest and largest region, and it functions as a control plane hub for a disproportionate share of global AWS activity, even for customers and services technically hosted elsewhere (Akamai, 2025). This concentration exists for historical and practical reasons, but it also means that a severe fault inside US-EAST-1 carries a wider blast radius than an equivalent fault in a smaller, more isolated region. This regional concentration is directly relevant to the Cloud+ subdomain covering service availability and disaster recovery, which emphasizes designing across multiple availability zones and, where justified, multiple regions specifically to avoid this kind of single point of failure.
According to AWS's own published summary of the event, the disruption unfolded in three overlapping phases within the US-EAST-1 Region (Amazon Web Services, 2025). The first and root phase began at 11:48 PM PDT on October 19, when customers started experiencing increased API error rates for Amazon DynamoDB. During this window, both external customers and internal AWS services that depend on DynamoDB were unable to establish new connections to it. The second phase, beginning around 5:30 AM PDT on October 20, involved Network Load Balancer connection errors caused by health check failures across part of the NLB fleet. The third phase, overlapping with the second, involved new Amazon EC2 instance launches failing between roughly 2:25 AM and 10:36 AM PDT, with some newly launched instances continuing to experience connectivity issues into the early afternoon (Amazon Web Services, 2025).
AWS engineers identified the DynamoDB DNS state as the source of the problem by 12:38 AM PDT, less than an hour after the first customer reports, and applied temporary mitigations by roughly 1:15 AM that allowed some internal services to reconnect (Amazon Web Services, 2025; Chiang, 2025). Full DNS record restoration for DynamoDB was completed by 2:25 AM, but the secondary EC2 and NLB effects continued cascading for several more hours, meaning the practical end-to-end disruption for many downstream customers lasted approximately fourteen to fifteen hours before full recovery around 2:20 PM PDT on October 20 (Amazon Web Services, 2025; TechUpkeep, 2026).
The technical root cause was a latent race condition inside DynamoDB's automated DNS management system, a system responsible for keeping hundreds of thousands of DNS records accurate as load balancer capacity is added, removed, and rebalanced continuously across the fleet (The Register, 2025; TechUpkeep, 2026). That management system is split into two independent components for redundancy, informally referred to in post-incident analysis as a DNS Planner and a DNS Enactor. Under a narrow and rare timing condition, two Enactor processes ran concurrently, an outdated execution plan overwrote a newer one, and automated cleanup logic subsequently deleted DNS records that were still needed, leaving an empty DNS record for DynamoDB's regional endpoint (TechUpkeep, 2026).
The effect of an empty authoritative DNS record is straightforward to describe and painful to experience. Any system attempting to resolve DynamoDB's endpoint simply could not find it, regardless of how healthy the underlying DynamoDB infrastructure otherwise was. Because DynamoDB is used not only by external customers but extensively within AWS's own service fabric, including EC2 instance metadata workflows, Lambda, and various internal control plane functions, the DNS failure did not stay contained to one service. It cascaded into EC2 instance launch failures and NLB health check errors, which in turn affected any customer workload relying on autoscaling, container orchestration, or load balanced compute during the affected window (Amazon Web Services, 2025; Das, 2025).
Cloud+ teaches that spreading workloads across availability zones protects against a failure in one physical data center, and that spreading across regions protects against a failure affecting an entire metropolitan area. Neither concept, however, fully protects a customer from a fault inside a shared regional control plane service like DynamoDB's DNS automation, since that fault was not tied to any single zone. It affected the region's DynamoDB endpoint as a whole. This is an important nuance the exam objectives gesture toward but that this incident makes concrete: availability zone redundancy protects against physical and hardware level failure, but it does not automatically protect against a logical or software level failure in a shared regional service that every zone in that region still depends on.
Recovery time objective and recovery point objective are only useful when an organization has actually tested them against a realistic failure scenario. Many of the businesses affected on October 20 discovered, in real time, that their assumed recovery time was considerably longer than what their leadership had budgeted for, because the dependency causing the delay sat inside a provider's control plane rather than inside their own application code (CIO, 2025). This is precisely the scenario Cloud+ warns about when it stresses that RTO and RPO commitments must be tested and validated, not simply assumed based on a provider's general reputation for reliability.
The shared responsibility model draws a line between what a cloud provider secures and manages versus what the customer is responsible for. Availability during a regional control plane failure sits close to that dividing line. AWS is responsible for the underlying DNS automation, and it did, by its own account, correct the defect and disable the responsible automation pending a fix (Amazon Web Services, 2025). Customers, however, remain responsible for architecting their own applications to tolerate exactly this kind of provider side failure, whether through multi-region failover, graceful degradation, or reduced dependency on a single region's control plane. Organizations that treated AWS's reliability as a substitute for their own resilience planning were the ones that felt this outage most acutely.
Cloud-native design principles emphasize loosely coupled services that can fail independently without dragging the rest of the system down with them. The October 2025 incident is a real world illustration of what happens when that principle is violated at scale, even inside a hyperscaler's own infrastructure. Because EC2, Lambda, and NLB health checks all had tight internal dependencies on DynamoDB's availability, a fault in one narrowly scoped service propagated into several nominally separate services (Das, 2025). The lesson for architects is not that dependencies are inherently bad, but that hidden, tightly coupled dependencies are dangerous precisely because they are often invisible until an incident forces them into view.
Cloud+ frames multicloud and multi-region tenancy primarily as a resilience strategy, not merely a cost or vendor negotiation tactic. Interestingly, AWS itself pointed customers toward one of its own global-scoped alternatives in the aftermath, noting that DynamoDB Global Tables, which replicate data across multiple regions, were largely unaffected by the single-region nature of the fault (Chiang, 2025). This detail underscores a practical Cloud+ takeaway: multi-region design is not a theoretical best practice reserved for exam questions. It was the specific architectural choice that separated customers who rode out the incident from those who did not, even within the same provider's ecosystem.
The scale of downstream impact illustrates how deeply embedded cloud dependency has become in ordinary digital life. Reported disruptions touched streaming and gaming platforms, financial and payment services, airline booking systems, government tax portals, and consumer smart home devices, with monitoring services logging millions of user reports across more than a thousand affected services globally (Akamai, 2025; TechUpkeep, 2026). Early industry loss estimates from cyber risk analytics firms placed potential insurance exposure in the hundreds of millions of dollars, though such figures should be treated as preliminary and subject to revision as formal claims data becomes available (Sen, 2025). Beyond the direct financial impact, the incident renewed industry conversation about the risks of regional concentration among a small number of hyperscale providers, particularly given that AWS, Microsoft Azure, and Google Cloud collectively control a substantial majority of the global cloud market (Rest of World, 2026).
Treat regional concentration as a risk category on its own, separate from ordinary availability zone planning, and evaluate whether mission critical workloads justify true multi-region or multicloud redundancy.
Test recovery time and recovery point objectives against provider side control plane failures specifically, not only against application level bugs or hardware failures within an organization's own environment.
Map hidden dependencies between services before an incident forces the mapping to happen in real time, since loosely coupled architecture only protects an organization if the coupling has actually been audited.
Revisit the shared responsibility model periodically, since a provider correcting its own defect does not retroactively grant an unprepared customer the resilience their own architecture failed to provide.
Maintain clear, tested communication and incident response plans that assume a dependency, not an internal system, is the source of an outage, since the appropriate response differs meaningfully between the two.
The October 20, 2025 AWS outage was, at its technical core, a narrow and rare race condition inside a single region's DNS automation for one database service. Its consequences, however, were anything but narrow. The incident offers a rare, fully documented case study in exactly the concepts CompTIA Cloud+ asks IT professionals to internalize: that availability zones and regions solve different problems, that RTO and RPO commitments must be tested rather than assumed, that shared responsibility does not disappear just because a provider is reliable, and that loosely coupled architecture and multi-region design are not academic exercises but practical safeguards with a demonstrated payoff. Cloud computing did not fail this test because it is fundamentally unreliable. It failed a subset of its customers because too many of them had quietly outsourced their resilience planning to a provider's general reputation instead of their own tested architecture.
Akamai. (2025, October 27). When the cloud breaks: Lessons from the AWS outage. https://www.akamai.com/blog/security/when-cloud-breaks-lessons-aws-outage
Amazon Web Services. (2025, October 23). Summary of the Amazon DynamoDB service disruption in the Northern Virginia (US-EAST-1) Region. https://aws.amazon.com/message/101925/
Chiang, E. (2025, November 1). Summary of the Amazon DynamoDB service disruption in the Northern Virginia (US-EAST-1) Region, 2025-10. https://www.ernestchiang.com/en/posts/2025/summary-of-the-amazon-dynamodb-service-disruption-in-the-northern-virginia-us-east-1-region/
CIO. (2025, December 29). 7 major IT disasters of 2025. https://www.cio.com/article/4109186/7-major-it-disasters-of-2025.html
Das, D. K. (2025, October 25). Anatomy of AWS outage — October 2025. Medium. https://medium.com/@dipakkrdas/aws-us-east-1-outage-october-2025-technical-analysis-e7a563a8fe57
Rest of World. (2026, January 5). Cloud outages 2025: How global businesses survived blackouts. https://restofworld.org/2026/cloud-outages-2025-global-business-impact/
Sen, N. (2025, October 28). The AWS DynamoDB outage of October 2025: A story of cascading failures. Medium. https://navaneethsen.medium.com/the-aws-dynamodb-outage-of-october-2025-a-story-of-cascading-failures-42f4b23b6379
TechUpkeep. (2026, April 14). AWS US-EAST-1 outage Oct 2025: Root cause + timeline. https://www.techupkeep.dev/blog/aws-outage-october-2025-analysis
The Register. (2025, October 23). A single DNS race condition brought AWS to its knees. https://www.theregister.com/2025/10/23/amazon_outage_postmortem/
ThousandEyes. (2025, October 20). AWS outage analysis: October 20, 2025. https://www.thousandeyes.com/blog/aws-outage-analysis-october-20-2025
A Technical and Conceptual Analysis of the July 19, 2024 CrowdStrike Outage
White Paper Cloud+ for the Rest of Us — Applied Case Study Series (Published August 30, 2024)
On July 19, 2024, the cybersecurity vendor CrowdStrike distributed a defective Rapid Response Content update to its Falcon sensor software running on Windows systems worldwide. The update contained a logic error that caused approximately 8.5 million Windows devices to crash and enter a repeating boot loop, disrupting airlines, hospitals, banks, broadcasters, and emergency call centers across dozens of countries. It has been widely described as the largest IT outage in history. This white paper examines the incident from a technical and conceptual standpoint, tracing the failure from a mismatched input field count in an internal validation tool through to a kernel level crash on affected endpoints. Rather than treating the event as a one-off vendor failure, this paper relates it back to foundational cloud computing concepts covered under CompTIA Cloud+ (CV0-004), including deployment strategies, patch and lifecycle management, vulnerability management, concentration risk, loosely coupled architecture, and the shared responsibility model. The analysis concludes that the outage was less a story of malicious activity and more a demonstration of how a single untested update, pushed everywhere at once through a highly trusted, kernel level software agent, can turn a narrow logic error into a global disruption. Recommendations for both software vendors and their customers are offered in light of established Cloud+ principles.
Endpoint security software occupies an unusual position of trust. To detect threats effectively, tools like CrowdStrike's Falcon platform run with deep, kernel level access on the machines they protect, which means they can see almost everything happening on a system, and it also means a defect in that software can bring the entire system down just as easily as a real attacker could. The events of July 19, 2024 demonstrated exactly that risk at a global scale. A single flawed configuration file, delivered automatically and without a staged rollout, caused millions of Windows machines to blue screen almost simultaneously, grounding flights, delaying surgeries, and knocking hospital and banking systems offline (Wikipedia, 2024; Bitsight, 2024). This paper walks through what actually happened, then connects each stage of the failure back to specific concepts taught under Cloud+, so the incident becomes a working example of why deployment discipline, testing, and dependency awareness exist as exam topics in the first place, not just checkboxes on a study guide.
CrowdStrike Falcon is an endpoint detection and response, or EDR, platform. Its Windows sensor runs partly as a kernel level driver, which lets it observe process activity, file changes, and network behavior at a level ordinary applications cannot reach. This depth of access is precisely what makes an EDR tool effective against sophisticated threats, and it is also what makes a defect in that same tool so dangerous. A bug in a typical desktop application usually crashes that one application. A bug that reaches kernel level code can crash the entire operating system, which is exactly what happened here (Messageware, 2025).
CrowdStrike distributes two general categories of updates to the Falcon sensor. Sensor version updates change the underlying software itself and typically go through a more deliberate staged release process. Rapid Response Content updates are smaller, more frequent configuration files, sometimes called channel files, that adjust what the sensor looks for without changing the sensor software itself. These are pushed out faster and more broadly, precisely because they are treated as low risk configuration data rather than executable code changes. Channel File 291, the file at the center of this incident, fell into that second, faster moving category (CrowdStrike, 2024).
According to CrowdStrike's own preliminary and final incident reviews, the sequence of events unfolded quickly. At 04:09 UTC on July 19, 2024, CrowdStrike released a new version of Channel File 291 to Windows sensors as part of routine operations. The update triggered a logic error almost immediately, and affected machines began crashing and displaying the Blue Screen of Death, or BSOD, often citing errors such as DRIVER_OVERRAN_STACK_BUFFER or SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (Messageware, 2025). CrowdStrike identified the problem and reverted the faulty file by 05:27 UTC, a response time of just over an hour, but that reversion did not help machines that had already downloaded the bad file and were now stuck in a crash and reboot cycle, since a crashed machine could not necessarily reach the network in time to pull the corrected file before crashing again (Bitsight, 2024).
Recovery was uneven and, for many organizations, painfully manual. Affected systems generally needed to be rebooted while connected to a network, sometimes multiple times, to have a chance at pulling the reverted file before crashing again. Machines that still failed to recover needed to be booted into Safe Mode or the Windows Recovery Environment so a technician could manually delete the offending file, a process that does not scale well across a fleet of thousands of laptops and servers, particularly when some of those machines were also protected by BitLocker encryption requiring a recovery key before Safe Mode could even be reached (Wikipedia, 2024). CrowdStrike reported that by July 29, roughly ten days after the initial event, approximately 99 percent of Windows sensors were back online, compared to pre-incident connection rates (CrowdStrike, 2024).
CrowdStrike's published root cause analysis traces the defect to an internal structure called an IPC Template Type, which defines the fields a given piece of content is expected to contain. The Template Type involved in this update defined 21 input fields. The sensor code that actually processed the update, however, only supplied 20. This mismatch had existed in earlier versions without causing problems, because no previous Template Instance had made use of that 21st field. The July 19 update was the first to actually populate it (TechTarget, 2024).
Two safeguards should have caught this before it ever reached production. First, a runtime bounds check in the Content Interpreter, the component that actually reads each field, was missing, so the interpreter attempted to read a field that was not actually there. Second, the Content Validator, a separate tool meant to catch exactly this kind of structural mismatch before an update ships, contained its own logic error and evaluated the new content against incorrect assumptions, so it validated the update as safe when it was not (TechTarget, 2024). The result, as reconstructed from crash dump analysis, was an attempt to read from a memory location that had never been properly initialized, sometimes described informally as a wild pointer, which is a fast and reliable way to crash an operating system when the code doing the reading has kernel level privileges (Messageware, 2025).
It is worth being precise about what this was not. CrowdStrike and independent researchers were consistent on this point from the first hours of the incident. This was not a cyberattack, and it was not a security breach of CrowdStrike's systems. It was a quality assurance failure, a defect that should have been caught by automated validation and was not, compounded by a distribution process that pushed the update to essentially all subscribed Windows machines at once rather than in stages (CrowdStrike, 2024).
Adding to the chaos, and to a fair amount of public confusion in the first hours of the incident, Microsoft Azure experienced a separate and technically unrelated outage in its Central US region beginning around 21:56 UTC on July 18, roughly six hours before the CrowdStrike update went out. That outage, caused by a storage back end issue that affected Virtual Machine availability and connectivity along with services such as Cosmos DB and Azure SQL Database, lasted until approximately 12:15 UTC on July 19 (Congress.gov, 2024; Futurum, 2024).
Because both incidents involved Windows systems and Microsoft branded products, and because they overlapped in time, many early reports and even some affected IT teams initially assumed a single shared cause. Investigation quickly separated the two events, but the overlap illustrates a real world pattern worth remembering: when two unrelated failures land close together, diagnosis slows down precisely when speed matters most, since responders have to first confirm they are looking at one incident rather than two before they can even start looking for a root cause (ThousandEyes, 2024).
Cloud+ Domain 2 teaches four deployment strategies: in-place, blue-green, canary, and rolling. The entire point of canary and rolling deployments is to limit the blast radius of a bad change by exposing it to a small slice of the fleet first, watching for problems, and only expanding the rollout once the new version proves itself healthy. CrowdStrike's Rapid Response Content updates, including Channel File 291, were pushed to essentially the entire subscribed Windows fleet simultaneously rather than through a staged canary process. Had a small percentage of machines received the update first, the crash pattern would very likely have surfaced within minutes, long before it reached millions of production systems. This incident is close to a textbook illustration of why the canary concept exists, delivered at the worst possible scale.
Cloud+ Domain 3 draws a distinction between major and minor updates, and stresses that even routine patching benefits from policies like n-1 versioning, where an organization deliberately runs one version behind the latest release to let others absorb the risk of a fresh update first. CrowdStrike's own category system, treating Rapid Response Content as low risk configuration data rather than a full sensor version change, effectively exempted these updates from the more cautious handling major changes usually receive. The incident shows that the label an organization puts on a change, low risk configuration versus full release, does not always match the actual risk the change carries once it reaches kernel level code.
Cloud+ Domain 4 covers vulnerability management as an ongoing cycle of scanning, identification, assessment, and remediation, and Domain 1's solution design analysis emphasizes testing types including regression and functional testing before anything reaches production. The Content Validator in this incident was itself the safeguard meant to catch structural defects before release, and it contained the very kind of logic error it was supposed to detect in other content. This is a useful reminder that testing tools and validation pipelines are software too, and they need their own testing and scrutiny rather than being trusted automatically simply because their job is to check other people's work.
Cloud-native design, covered in Cloud+ Domain 1, favors loosely coupled architecture specifically so that a failure in one component does not cascade uncontrollably into everything around it. A kernel level security agent is about as tightly coupled to its host operating system as software gets, by necessity, since its entire job depends on deep visibility into that system. The incident is a reminder that concentration risk is not only a regional or provider level concern, the kind covered under service availability and disaster recovery. It can also be a vendor level concern, where a very large share of enterprise Windows machines worldwide depend on the same small set of kernel level security agents, meaning a defect in one of them can ripple across airlines, hospitals, and banks simultaneously regardless of which cloud region or provider any individual organization actually uses.
The shared responsibility model is usually framed around the split between a cloud provider and its customer, but the underlying idea generalizes further. Any third party software running with elevated privileges on an organization's systems, including security agents, sits inside that same responsibility conversation. CrowdStrike was responsible for the defect and, by its own account, corrected the immediate flaw and added the missing bounds checking and validator fixes within days (TechTarget, 2024). Customers, however, remained responsible for their own resilience against exactly this kind of vendor side failure, whether through staggered update rings, phased deployment of vendor content, or simply having a tested manual recovery process ready for machines that will not boot. Organizations that had never rehearsed a fleet-wide manual remediation process felt this incident considerably longer than organizations that had.
The scale of downstream disruption was extraordinary given that the root defect never touched a single line of application code belonging to any of the affected businesses. Airlines were especially hard hit. Delta Air Lines alone cancelled roughly 7,000 flights over the following days, affecting an estimated 1.3 million passengers, a disruption serious enough to draw scrutiny from the U.S. Department of Transportation and lead to subsequent litigation between Delta and CrowdStrike over the scale of the losses (Wikipedia, 2024). Beyond aviation, hospitals reported delayed procedures and appointment rescheduling, banks and payment processors experienced service interruptions, broadcasters lost airtime, and some emergency call centers had to fall back on manual processes (Windows Central, 2024; DCD, 2024).
Financial estimates vary depending on methodology, but insurers and analysts converged on figures in the billions of dollars. One widely cited estimate placed direct losses to U.S. Fortune 500 companies alone at roughly 5.4 billion dollars, with total global impact, including smaller businesses and public sector organizations, estimated considerably higher (TechTarget, 2024; Messageware, 2025). The event is broadly regarded as the largest IT outage in history by volume of affected systems, not because of any single point of technical sophistication, but because of how widely a single trusted software agent had been deployed across the world's Windows infrastructure.
Treat configuration content updates with the same deployment discipline as full software releases, especially for any tool running with kernel level or otherwise elevated privileges, rather than assuming smaller changes are automatically lower risk.
Use staged, canary style rollouts for security agent updates specifically, since the entire value of a canary deployment is catching exactly this kind of defect on a small slice of the fleet before it reaches everyone.
Apply n-1 or ring based patching policies to third party security tooling, not just to internally developed software, so at least a portion of the fleet is never on the newest, least proven update.
Validate the validators. Any automated tool whose job is to catch defects before release deserves its own dedicated testing, since a flaw in a safeguard is functionally the same as having no safeguard at all.
Rehearse fleet-wide manual recovery procedures before they are needed, including scenarios involving disk encryption recovery keys, since the organizations that recovered fastest were generally the ones that had already practiced this kind of remediation.
Recognize vendor concentration as its own risk category alongside cloud provider and regional concentration, and evaluate whether a single kernel level security vendor represents an unacceptable single point of failure for mission critical systems.
The July 19, 2024 CrowdStrike outage was, at its technical core, a narrow mismatch between how many input fields a content template declared and how many the sensor code actually supplied, compounded by a validation tool that failed to catch its own blind spot. Its consequences were anything but narrow. The incident offers a fully documented, real world case study in exactly the concepts CompTIA Cloud+ asks IT professionals to internalize: that deployment strategy exists to limit blast radius, that patch and lifecycle policies should scale with actual risk rather than a convenient label, that validation tooling needs validation of its own, and that concentration risk can live at the vendor level just as easily as the regional or provider level. The outage did not happen because CrowdStrike's engineers were careless or because kernel level security tools are a bad idea. It happened because a single untested change was trusted enough, and distributed broadly enough, that nobody got the chance to catch it before it reached millions of machines at once.
Bitsight. (2024, July 24). CrowdStrike outage timeline, analysis, & impact. https://www.bitsight.com/blog/crowdstrike-outage-timeline-and-analysis
Congress.gov, Congressional Research Service. (2024). The July 19th global IT outages (IN12392). Library of Congress. https://www.congress.gov/crs-product/IN12392
CrowdStrike. (2024, August 6). Channel File 291 incident: Root cause analysis available. https://www.crowdstrike.com/en-us/blog/channel-file-291-rca-available/
Data Center Dynamics. (2024, July 19). Microsoft Azure outage and faulty CrowdStrike update grounds flights, delays trains, impacts banks around the world. https://www.datacenterdynamics.com/en/news/microsoft-azure-outage-grounds-flights-delays-trains-impacts-banks-around-the-world/
Futurum Group. (2024, July 23). Microsoft's Central US Azure outage: What went wrong? https://futurumgroup.com/insights/microsofts-central-us-azure-outage-what-went-wrong/
Messageware. (2025). What caused the CrowdStrike outage: A detailed breakdown. https://www.messageware.com/what-caused-the-crowdstrike-outage-a-detailed-breakdown/
TechTarget. (2024). CrowdStrike outage explained: What caused it and what's next. https://www.techtarget.com/whatis/feature/Explaining-the-largest-IT-outage-in-history-and-whats-next
ThousandEyes. (2024, July 26). Unpacking the CrowdStrike update, Azure outage, & more. https://www.thousandeyes.com/blog/internet-report-crowdstrike-update-azure-outage
Wikipedia. (2024). 2024 CrowdStrike-related IT outages. https://en.wikipedia.org/wiki/2024_CrowdStrike-related_IT_outages
Windows Central. (2024, July 19). Microsoft and CrowdStrike take action as global outages affect airlines and cellular networks. https://www.windowscentral.com/microsoft/mitigation-actions-microsoft-cloudstrike-outages