Sáng thứ 7 tuần trước (06/12/2025) , như những cuối tuần thường lệ, tôi có khá nhiều lịch hẹn. Nhưng tất cả dừng lại từ lúc 3h sáng, khi tôi nhận được email từ Cloudflare với nội dung: Health check status change: API is now Unhealthy. Đang trong trạng thái nửa tỉnh nửa mê, tôi giật mình bật dậy mà không hiểu chuyện gì đang xảy ra. Tôi mở điện thoại kiểm tra nhanh thì thấy toàn bộ hệ thống đều sập, từ frontend cho đến backend. Theo phản xạ quen thuộc và vì lúc đó quá buồn ngủ, tôi chỉ đơn giản bật lại các services như thường lệ. Khi thấy mọi thứ đã chạy trở lại, tôi tắt điện thoại và ngủ tiếp.

8h sáng, điện thoại tôi reo liên tục. Hàng loạt các cuộc gọi nhỡ từ khách hàng gọi đến với nội dung là Ecombox không còn truy cập được. Tôi mở kiểm tra nhanh thì thấy một lần nữa server đã down không lí do. Trong lúc đó tôi lại dùng cách cũ, mở lại một lần nữa. Đến thời điểm này tôi vẫn chưa nhận thức được mình đang đối diện với một lỗ hổng khủng khiếp đến cấp độ 10.
Server chạy được khoảng hai tiếng thì lại sập. Lần này Google Cloud gửi cảnh báo phát hiện hành vi đào coin trên VM. Tôi thật sự bất ngờ vì làm gì có chuyện đào coin trên máy chủ production của mình.
Tôi mở ticket yêu cầu kiểm tra và may mắn là lần đầu tiên Google duyệt rất nhanh. Tôi lại khởi động lại server và vẫn cố tự trấn an rằng có thể Google nhận nhầm thứ gì đó vì tôi dùng vài port có số khá lạ như 3333 hoặc 3733.
Nhưng sau đó hai tiếng, mọi chuyện trở nên nghiêm trọng hơn. Google Cloud tắt hẳn VM và không cho phép mở lại. Lúc này tôi bắt đầu hơi rén. Cũng hên là tôi có chuẩn bị nhiều phương án backup dự phòng như snapshot và machine image, nên tôi có thể khôi phục server ngay mà không làm gián đoạn quá lâu.
Sau khi khôi phục, tôi chỉ chạy đúng những service căn bản nhất của Ecombox để loại trừ trường hợp VM cũ bị cài mã độc. Nhưng chưa được bao lâu, server lại down. Lần này tôi thật sự mất bình tĩnh vì Google chỉ gửi một email rất chung chung nói rằng phát hiện hành vi đào coin. Tôi không có bất kỳ thông tin cụ thể nào để lần theo. Và chưa dừng lại ở đó, Google dừng luôn cả project của tôi chứ không chỉ một VM instance. Việc dừng project này càng làm tôi hoảng loạn, bởi vì tất cả backups cho tới script đều nằm trên project đó. Mà cũng may mắn, tối qua linh cảm đã khiến tôi backup sẵn một vài config quan trọng.
Thiệc lòng mà nói bữa thứ 7 đó tôi bị burn out nặng. Người rất mệt mỏi do 3 ngày trước có khá nhiều việc cần xử lý, vì vậy cơ thể và tâm trí đều rã rời. Sáng thứ 7 tôi có lịch tham dự Workshop ở UII và chiều có lịch đón bạn gái. Giờ phải nghĩ đến cảnh cancel cả 2 làm tôi trở nên cọc và bị phán đoán sai nhiều vấn đề. Một trong những phán đoán sai nhất chính là việc tôi nghĩ rằng Bot của Google đã phát hiện nhầm. Trong trạng thái rã rời, tôi tự đổ lỗi cho hệ thống tự động quét của họ thay vì bình tĩnh xem xét khả năng rằng hệ thống của mình đang thực sự gặp vấn đề nghiêm trọng. Điều này khiến tôi bỏ lỡ những tín hiệu và xử lý sự cố theo hướng không chuẩn xác ngay từ đầu.
Sau sự cố của Ecombox, các services khác trên những máy chủ hoàn toàn tách biệt cũng bắt đầu gặp vấn đề, không chỉ riêng trên Google Cloud. Chính điều đó buộc tôi phải dừng lại và xem xét lại toàn bộ phán đoán trước đó của mình. Rõ ràng không thể đổ lỗi cho Google hay nghi ngờ hệ thống quét của họ nữa, vì sự cố đã lan sang những nơi mà Google không hề liên quan.
Tôi bắt đầu kiểm tra lại từng thành phần, từng lớp, từng container. Và rồi tôi mở phần logs của frontend container, một nơi mà trong đầu tôi mặc định là an toàn, là không thể bị ảnh hưởng. Đây là lỗi của tôi, một sự chủ quan rất lớn,.
Cho đến khi tôi nhìn thấy những đoạn script lạ đang chạy bên trong. Những đoạn execute hoàn toàn không thuộc về ứng dụng của tôi. Và tôi nhận ra mọi giả định trước đó đều sai, vấn đề không nằm ở Google, không nằm ở hạ tầng, mà nằm ngay trong hệ thống của tôi.

Và từ những manh mối đó, tôi phát hiện ra đây là lỗi CVE liên quan đến Nextjs - thư viện tôi và team dùng để làm frontend cho Ecombox và tất cả những dự án khác. Mà xui cái, tôi dùng ngay cái phiên bản có lỗ hổng luôn mới ác.
Thông tin về CVE-2025-55182 và CVE-2025-66478
CVE-2025-55182 còn có tên là React2Shell, là một lỗ hổng nghiêm trọng đang bị các nhóm từ Trung Quốc khai thác. Theo phân tích từ AWS Security, lỗ hổng nà này liên quan tới cơ chế render phía server của một số framework frontend (như React và Nextjs) tạo điều kiện cho hacker Remote Code Execution ngay trong môi trường của services.
CVSS score của nó là 10. Cao nhất và rất nguy hiểm. Ngay ảnh hưởng đến hàng loạt server. Nó ảnh hưởng tới React Server components, React 19.x và Next.js 15.x/16.x App Router. Tôi và team dính chùm ngay cục Next.js 15.x thành ra chạy sao cho thoát. Bởi vậy đôi khi ham đồ mới quá cũng không tốt.
CVE-2025-55182 là thượng nguồn, còn hạ lưu là CVE-2025-66478 ở tại Next.js luôn. Đây là lỗi liên quan đến cơ chế xử lý route của Next.js, khiến các request đặc biệt có thể được xử lý sai và dẫn tới việc excute code. Sau khi lấy được quyền excute code thì làm gì tiếp theo ? Tất nhiên anh em hacker sẽ chạy script đào coin rồi. Mà chạy script đào coin thì bị Google Cloud Bot gõ cái bốp => server down.
Các bạn có thể đọc thêm về lỗ hổng tại đây. Do tôi cũng không phải dân security nên cũng không dám phân tích sâu thêm.



Vấn đềchính vẫn là lỗi ở tôi, lỗi này đã được cảnh báo từ ngày 3 và ngày 4 rồi. Nhưng tôi do cũng bận nên không check tin tức thường xuyên dẫn tới bị sót thông tin. Next.js đã đưa ra các bản patch ngay lập tức, chỉ cần upgrade version lên là sẽ tránh được lỗi này. Tính ra mất chưa tới 15 phút. Mà giờ do chủ quan, do phán đoán sai mà tôi phải trả giá bằng 24h khách hàng Ecombox bị ảnh hưởng liên tục.

Cũng may mắn, dù sao các phương án backups của Ecombox vẫn còn hoạt động tốt nên đến nay sự cốđã được khắc phục. Qua sự việc lần này, bản thân tôi rút ra được các kinh nghiệm sau và muốn chia sẻ với các bạn:
- Luôn cập nhật tin tức mới về security.
- Nhắc anh em có sài lib, framework nào thì check phiên bản xem nó có bị out date chưa...
- Nên giữ tinh thần bình tĩnh để phán đoán tốt hơn, bất kể tinh thần hay thể chất có mệt mỏi.
- Không nên đặt trứng vào 1 giỏ như cách tôi chủ quan đặt tất cả VM instance, backups, bucket vào chung 1 project Google Cloud.
- Xử lý sự cố hạ tầng chuyên nghiệp hơn: từ bước thông báo khách hàng -> backups -> restore ->... để đảm bảo uptime cao nhất.
- Hiểu được giá trị và tầm quan trọng của backup, tổ chức backup.
- Luôn sẵn sàng tâm lý đón nhận CVE lần thứ 2 hoặc tệ hơn là bị hack.
Dù nói gì đi nữa thì tôi cũng thấy thú vị. Đây là lần đầu tôi đối diện với 1 đợt tấn công ảnh hưởng toàn cầu mà tôi cũng là một phần, cũng đã thử các phương pháp, mò mẫm nguyên nhân và đã vượt qua được nó. Trên tinh thần công nghệ không bao giờ hoàn hảo tuyệt đối. Tôi biết sẽ còn bị lần sau và nhiều lần sau nhưng tôi sẽ đón nhận nó và hy vọng sẽ bình tĩnh đối diện.
Cám ơn bạn đã đọc bài, hẹn gặp lại trong bài viết sau.


Bình luận ()