29th November 2025

Unwrap() kills systems. How a hidden detail took thousands of CloudFlare sites offline on November 18, 2025.

Post-mortem analysis of how a single database permission change caused a global crash of Cloudflare services, revealing hidden and unexpected vulnerabilities.

On November 18, thousands of websites protected by Cloudflare suffered severe and widespread outages, giving the appearance that “half the Internet” was out of orderOn the surface, it might have looked like a cyber attack or a global infrastructure problem, but the reality was much more surprising: a change to a database's permissions triggered a domino effect that led to the repeated crash of one of Cloudflare's most critical services. The database in question is clickhouse, a high-performance columnar database used for real-time analytics, chosen for its ability to execute complex queries on large volumes of data in extremely short times. This is a very powerful technology, but—like all global and shared components—it can become a point of fragility if something changes unpredictably.

What exactly happened

Cloudflare Bot Management is based on a machine learning model that analyzes each HTTP request by evaluating a set of features collected from internal systems. These features are extracted via a query on ClickHouse and are then included in a file that is updated every 5 minutes and distributed across the global Cloudflare network. It is therefore a mechanism highly dynamic and distributed: any error in the generation or deployment step propagates within minutes.

CloudFlare-Down-Outage

Changing database permissions

The Cloudflare team was making an internal improvement to its security processes: moving away from shared accounts in favor of dedicated user accounts and explicit permissions. This step involved updating the permissions on the ClickHouse database used by Bot Management. The operation seemed completely harmless. No one would have imagined that a change in access could change the behavior of a query that had been consolidated for years. And yet, that's exactly what happened.

The hidden side effect: duplicate data

Before the change, the query returned about 60 features from the default database. After the permission change, ClickHouse started reading data not only from the "default" database, but also from the "r0" database. The result was a output greater than 200 features. The Bot Management module had a hard-coded limit to 200 itemsWhen the list exceeded the threshold, the service did not manage the situation, did not record any errors, did not activate fallbacks or controlled degradations: it simply sent everything to crashA theoretically improbable condition, never seen before, suddenly became reproducible every five minutes, depending on the node generating the feature file.

Because it looked like a DDoS attack

The configuration file was regenerated and redistributed every five minutes. This meant that some instances on the Cloudflare network received a correct file, while others received a corrupted file. The result was behavior intermittent and irregular: services dropping and picking up, nodes asynchronously entering and exiting the error condition. Such a pattern is also typical of a distributed DDoS attack, especially when it affects multiple independent regions. To make matters worse, the incident also caused the Cloudflare status page, for a completely unrelated issue. A deadly coincidence, which led engineers down the wrong track for over two hours.

Diagnosis and resolution

It wasn't until around 14:30 PM that the team identified the source of the problem: a configuration file containing more than 200 features, generated by queries modified following ClickHouse's permission review. Once the cause was identified, engineers stopped the propagation of the faulty file and deployed a version known as correctThe complete recovery was completed at approximately 17:06 p.m. two and a half hours after corrective surgery.

CloudFlare Outage November 18, 2025

Technical Lessons: What Engineers Need to Take Home

1. Unwrap() kills systems

The most serious problem was not the number of features, but the way the software reacted to the anomaly. The offending module used .unwrap() in Rust: a convenient choice for rapid development, but extremely dangerous for mission-critical systems. Unwrap() assumes that the operation always succeeds. If something goes wrong, it causes a panic which interrupts the entire service, without logs, without countermeasures, without diagnosis. If the system had logged a simple error message instead of crashing, the problem would have been identified within minutes. A single .unwrap() in a global pipeline can cause a international incident.

2. Global database changes are fragmentation grenades

A permissions change seemed harmless. In a complex and distributed system, however, even what seems impossible can generate side effects in subsystems that had no direct connection to the change. Staging environments never perfectly replicate a global infrastructure. The idea that a simple change could cause a duplication of query results wasn't among the foreseen risks. Yet that's exactly what happened. The lesson is simple: any global change can generate side effects. unexpected emerging behaviors.

3. Coincidences are more misleading than bugs

When two unrelated problems occur at the same time, the mind creates connections that don't exist. The Bot Management crash and the offline status page made the hypothesis of an external attack credible. Cloudflare is bombarded daily with attack attempts: starting from that hypothesis is natural. However, it cost 2,5 hours of investigation into a nonexistent problem. The lesson: data always beats narrative.

4. CDNs are real single point of failure

The incident highlighted a difficult fact to accept: the internet is massively dependent on a few global players. When a CDN like Cloudflare fails, much of the web is immediately impacted. Most companies don't have a second CDN ready, nor do they have an autonomous infrastructure to absorb traffic. Multi-CDN redundancy exists, but it's expensive, complex, and often impractical. The dependency is real, and the November 18 incident made it clear again.

Conclusion

The November 18th outage was a textbook case showing how seemingly irrelevant details can have enormous effects in global systems. A change in database permissions changed the behavior of a single query. The unexpected output exceeded a hard limit. A critical module relied on .unwrap() and reacted with total panic rather than a managed error. The global distribution of the faulty file every five minutes amplified the impact. An external coincidence led to a prolonged misdiagnosis. And so, from a single technical detail, tens of millions of websites have gone offlineAnd that's why, in complex architectures, it's not the attacks that are the most scary: it's the small, unexpected changes. Or worse yet, it's the .unwrap() hidden in the code.

Do you have doubts? Don't know where to start? Contact us!

We have all the answers to your questions to help you make the right choice.

Chat with us

Chat directly with our presales support.

0256569681

Contact us by phone during office hours 9:30 - 19:30

Contact us online

Open a request directly in the contact area.

DISCLAIMER, Legal Notes and Copyright. RedHat, Inc. holds the rights to Red Hat®, RHEL®, RedHat Linux®, and CentOS®; AlmaLinux™ is a trademark of the AlmaLinux OS Foundation; Rocky Linux® is a registered trademark of the Rocky Linux Foundation; SUSE® is a registered trademark of SUSE LLC; Canonical Ltd. holds the rights to Ubuntu®; Software in the Public Interest, Inc. holds the rights to Debian®; Linus Torvalds holds the rights to Linux®; FreeBSD® is a registered trademark of The FreeBSD Foundation; NetBSD® is a registered trademark of The NetBSD Foundation; OpenBSD® is a registered trademark of Theo de Raadt; Oracle Corporation holds the rights to Oracle®, MySQL®, MyRocks®, VirtualBox®, and ZFS®; Percona® is a registered trademark of Percona LLC; MariaDB® is a registered trademark of MariaDB Corporation Ab; PostgreSQL® is a registered trademark of PostgreSQL Global Development Group; SQLite® is a registered trademark of Hipp, Wyrick & Company, Inc.; KeyDB® is a registered trademark of EQ Alpha Technology Ltd.; Typesense® is a registered trademark of Typesense Inc.; REDIS® is a registered trademark of Redis Labs Ltd; F5 Networks, Inc. owns the rights to NGINX® and NGINX Plus®; Varnish® is a registered trademark of Varnish Software AB; HAProxy® is a registered trademark of HAProxy Technologies LLC; Traefik® is a registered trademark of Traefik Labs; Envoy® is a registered trademark of CNCF; Adobe Inc. owns the rights to Magento®; PrestaShop® is a registered trademark of PrestaShop SA; OpenCart® is a registered trademark of OpenCart Limited; Automattic Inc. holds the rights to WordPress®, WooCommerce®, and JetPack®; Open Source Matters, Inc. owns the rights to Joomla®; Dries Buytaert owns the rights to Drupal®; Shopify® is a registered trademark of Shopify Inc.; BigCommerce® is a registered trademark of BigCommerce Pty. Ltd.; TYPO3® is a registered trademark of the TYPO3 Association; Ghost® is a registered trademark of the Ghost Foundation; Amazon Web Services, Inc. owns the rights to AWS® and Amazon SES®; Google LLC owns the rights to Google Cloud™, Chrome™, and Google Kubernetes Engine™; Alibaba Cloud® is a registered trademark of Alibaba Group Holding Limited; DigitalOcean® is a registered trademark of DigitalOcean, LLC; Linode® is a registered trademark of Linode, LLC; Vultr® is a registered trademark of The Constant Company, LLC; Akamai® is a registered trademark of Akamai Technologies, Inc.; Fastly® is a registered trademark of Fastly, Inc.; Let's Encrypt® is a registered trademark of the Internet Security Research Group; Microsoft Corporation owns the rights to Microsoft®, Azure®, Windows®, Office®, and Internet Explorer®; Mozilla Foundation owns the rights to Firefox®; Apache® is a registered trademark of The Apache Software Foundation; Apache Tomcat® is a registered trademark of The Apache Software Foundation; PHP® is a registered trademark of the PHP Group; Docker® is a registered trademark of Docker, Inc.; Kubernetes® is a registered trademark of The Linux Foundation; OpenShift® is a registered trademark of Red Hat, Inc.; Podman® is a registered trademark of Red Hat, Inc.; Proxmox® is a registered trademark of Proxmox Server Solutions GmbH; VMware® is a registered trademark of Broadcom Inc.; CloudFlare® is a registered trademark of Cloudflare, Inc.; NETSCOUT® is a registered trademark of NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, and Kibana® are registered trademarks of Elastic NV; Grafana® is a registered trademark of Grafana Labs; Prometheus® is a registered trademark of The Linux Foundation; Zabbix® is a registered trademark of Zabbix LLC; Datadog® is a registered trademark of Datadog, Inc.; Ceph® is a registered trademark of Red Hat, Inc.; MinIO® is a registered trademark of MinIO, Inc.; Mailgun® is a registered trademark of Mailgun Technologies, Inc.; SendGrid® is a registered trademark of Twilio Inc.; Postmark® is a registered trademark of ActiveCampaign, LLC; cPanel®, LLC owns the rights to cPanel®; Plesk® is a registered trademark of Plesk International GmbH; Hetzner® is a registered trademark of Hetzner Online GmbH; OVHcloud® is a registered trademark of OVH Groupe SAS; Terraform® is a registered trademark of HashiCorp, Inc.; Ansible® is a registered trademark of Red Hat, Inc.; cURL® is a registered trademark of Daniel Stenberg; Facebook®, Inc. owns the rights to Facebook®, Messenger® and Instagram®. This site is not affiliated with, sponsored by, or otherwise associated with any of the above-mentioned entities and does not represent any of these entities in any way. All rights to the brands and product names mentioned are the property of their respective copyright holders. All other trademarks mentioned are the property of their respective registrants. MANAGED SERVER® is a European registered trademark of MANAGED SERVER SRL, with registered office in Via Flavio Gioia, 6, 62012 Civitanova Marche (MC), Italy and operational headquarters in Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italy.

JUST A MOMENT !

Have you ever wondered if your hosting sucks?

Find out now if your hosting provider is hurting you with a slow website worthy of 1990! Instant results.

Close the CTA
Back to top