# Một regex đã đánh sập Cloudflare. 27 phút.

Published: 2026-09-12

Ngày 2 tháng 7 năm 2019, 13:42 UTC: một quy tắc mới cho Tường lửa Ứng dụng Web của Cloudflare được triển khai ở hơn 180 thành phố trong khoảng hai giây. Đó là một quy tắc XSS ở chế độ mô phỏng, vì vậy nó không chặn bất cứ điều gì, nhưng nó vẫn chạy trên mọi yêu cầu và kết thúc bằng .\*(?:.\*=.\*). PCRE backtrack, mọi lõi CPU phục vụ HTTP đều đạt 100%, và mọi trang web được Cloudflare ủy quyền trả về lỗi 502 trong 27 phút; lưu lượng truy cập giảm 82%. Nút ngắt khẩn cấp nằm phía sau Cloudflare Access, mà lại nằm phía sau Cloudflare. Báo cáo hậu sự cố, từ bài viết của Cloudflare: tính năng bảo vệ CPU đã bị loại bỏ vài tuần trước đó trong một đợt tái cấu trúc nhằm tiết kiệm CPU, quy trình cho phép mọi quy tắc bỏ qua giai đoạn thử nghiệm, công cụ không có đảm bảo về độ phức tạp, 11 nguyên nhân và 7 cách khắc phục. Phán quyết về cách khắc phục: SHIP IT.

Canonical: https://thedailydiff.dev/vi/video/2026-09-12-cloudflare-regex/

## Nội dung video này đề cập

- 13:31–13:42 UTC: PR được hợp nhất, CI xanh (không có kiểm tra CPU), Quicksilver đẩy quy tắc đến hơn 180 thành phố; các quy tắc WAF bỏ qua các giai đoạn DOG → PIG → Canary
- 13:45–14:07: trang đầu tiên; CPU 100% trên toàn cầu, lưu lượng truy cập −82%, lỗi 502 ở khắp mọi nơi; bảng điều khiển nội bộ nằm phía sau Cloudflare Access, mà đang ngừng hoạt động; một số thông tin đăng nhập đã hết hạn; một đường vòng hiếm khi được thực hiện
- 14:07–14:09: dừng WAF toàn cầu; lưu lượng truy cập và CPU bình thường sau 27 phút; 14:52 WAF trở lại nhưng không có quy tắc
- Ngày 2 tháng 7 (15:50 UTC) và ngày 12 tháng 7: Cloudflare xuất bản thông báo cùng ngày và báo cáo hậu sự cố đầy đủ; tính năng bảo vệ CPU được thêm lại, 3.868 quy tắc được đọc lại, triển khai theo giai đoạn, chuyển sang công cụ regex thời gian tuyến tính

## Bản ghi đã dịch

Được dịch từ lời tường thuật tiếng Anh gốc. Âm thanh và phụ đề có sẵn được điều khiển bởi YouTube.

0:00 Một biểu thức chính quy được triển khai đồng thời trên mọi máy chủ Cloudflare, và trong hai mươi bảy phút tiếp theo, các trang web phía sau nó đều hiển thị trang 502, đó là cài đặt nghiêm ngặt nhất có thể đối với một tường lửa. Ngày 2 tháng 7 năm 2019, 13:42 UTC. Cloudflare đăng bài trong vòng hai giờ: không phải một cuộc tấn công, mà là một triển khai lỗi, lưu lượng truy cập giảm 82 phần trăm. Mười ngày sau, CTO John Graham-Cumming xuất bản báo cáo hậu sự cố đầy đủ, bao gồm cả regex, và Hacker News cho nó 698 điểm,

0:26 đó là một sự hoan nghênh nồng nhiệt đối với một sự cố ngừng hoạt động. Cách nó xảy ra, tại sao nó có thể xảy ra, và ai thực sự phải chịu trách nhiệm. Đây là The Daily Diff, báo cáo hậu sự cố. 13:31. Một yêu cầu kéo được hợp nhất: một quy tắc tường lửa mới chống lại tập lệnh chéo trang, ở chế độ mô phỏng, nên nó không chặn bất cứ điều gì. 13:37, các bài kiểm tra đạt; không có bài nào đo lường CPU. 13:42, quy tắc được chuyển đến 180 thành phố trong hai giây, bởi vì các quy tắc WAF bỏ qua các giai đoạn dog, pig và canary mà các bản phát hành khác phải trải qua.

0:54 13:45, trang đầu tiên. 13:49, Hacker News có một chủ đề về trang trạng thái, mà vẫn nói tất cả các hệ thống đang hoạt động. Quy tắc kết thúc bằng dấu sao, dấu sao, bằng, dấu sao: bất cứ thứ gì, sau đó bất cứ thứ gì, sau đó là dấu bằng. PCRE đoán một cách tham lam, thất bại và quay lại qua mọi phân tách khác. x bằng x mất 23 bước. Hai mươi x sau dấu bằng: 555.

1:15 Hai mươi x, không có dấu bằng: 4.067 bước để không tìm thấy gì. Chạy cái đó trên mọi yêu cầu và mọi lõi đều ở mức một trăm phần trăm, không làm gì cả, một cách triệt để. Hai bộ bảo vệ lẽ ra phải bắt được nó. Giới hạn CPU trên các quy tắc đã bị loại bỏ do nhầm lẫn vài tuần trước đó, trong một đợt tái cấu trúc nhằm làm cho WAF sử dụng ít CPU hơn. Và quy trình cho phép mọi quy tắc bỏ qua giai đoạn thử nghiệm, vì các quy tắc tồn tại để ngăn chặn các cuộc tấn công trực tiếp; cái này không phải là một trường hợp khẩn cấp, và nó vẫn được triển khai toàn cầu.

1:37 14:00, WAF được xác định; không có cuộc tấn công. 14:02, ai đó đề xuất dừng toàn cầu: một thành phần, tắt, trên toàn thế giới. Nút gạt nằm phía sau Cloudflare Access. Cloudflare Access nằm phía sau Cloudflare. Một số thông tin đăng nhập đã hết hạn do không sử dụng, vì vậy mạng nhanh nhất trên internet dành năm phút để thực hiện một đường vòng mà không ai đã thử trước đó. 14:07, tắt. 14:09, lưu lượng truy cập bình thường. git blame: một lần triển khai với một tốc độ, toàn cầu; một bộ bảo vệ CPU bị tái cấu trúc

2:04 do tai nạn; một công cụ regex không có giới hạn trên. Không phải kỹ sư đã viết quy tắc: báo cáo hậu sự cố liệt kê mười một nguyên nhân và không nêu tên ai. Phạm vi ảnh hưởng: 27 phút, 82 phần trăm lưu lượng truy cập, 100 phần trăm CPU trên mọi lõi, ở mọi thành phố. Bảng điều khiển và API nằm phía sau cùng một biên, vì vậy khách hàng thậm chí không thể tắt nó đi. Hacker News, dưới báo cáo hậu sự cố: họ có một vấn đề, sử dụng một biểu thức chính quy, bây giờ họ có hai. Trò đùa cũ. Vẫn biên dịch được.

2:28 Phán quyết, báo cáo hậu sự cố: SHIP IT. Bộ bảo vệ CPU đã trở lại, tất cả 3.868 quy tắc được đọc bằng tay, các quy tắc phải trải qua giai đoạn thử nghiệm, và công cụ chuyển sang một công cụ có thời gian tuyến tính đảm bảo, được Ken Thompson xuất bản vào năm 1968. Thứ Hai: không có dấu sao chấm sao trong bất cứ thứ gì chạy theo mỗi yêu cầu, và giữ nút ngắt khẩn cấp không liên quan đến thứ mà nó giết. Hãy gửi cho tôi sự cố mà bạn vẫn chưa được phép nói về, trong phần bình luận, hoặc tại the daily diff dot dev.

2:53 Và đó là the diff cho ngày hôm nay. Tôi là Niko từ Axrisi. Hợp nhất một cách có trách nhiệm.

## Nguồn

- [John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)](https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/) — blog.cloudflare.com
- [Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)](https://blog.cloudflare.com/cloudflare-outage/) — blog.cloudflare.com
- [Matthew Prince on X, Jul 2, 2019, 14:22 UTC](https://x.com/eastdakota/status/1146061591143538688) — x.com
- [Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")](https://x.com/eastdakota/status/1146065231270907907) — x.com
- [Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)](https://news.ycombinator.com/item?id=20334924) — news.ycombinator.com
- [Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)](https://news.ycombinator.com/item?id=20336332) — news.ycombinator.com
- [Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)](https://news.ycombinator.com/item?id=20421538) — news.ycombinator.com
- [TechCrunch, Jul 2, 2019](https://techcrunch.com/2019/07/02/a-cloudflare-outage-is-impacting-sites-everywhere/) — techcrunch.com
