Công cụ AI tự động phát hiện lỗ hổng RCE đã tồn tại 2 năm trong Redis (CVE-2026-23479)

Redis đã vá một lỗ hổng use-after-free trong mã blocking-client, cho phép người dùng đã xác thực thực thi các lệnh OS tùy ý trên máy chủ lưu trữ cơ sở dữ liệu. Lỗ hổng được phát hiện bởi một công cụ AI tự động được xây dựng để săn tìm lỗi trong các kho mã nguồn lớn. Được theo dõi dưới mã CVE-2026-23479, lỗ hổng này xuất hiện từ phiên bản Redis 7.2.0 và tồn tại trong mọi nhánh ổn định cho đến khi được khắc phục vào ngày 5 tháng 5, không bị phát hiện trong hơn hai năm.
Redis RCE Vulnerability

Redis đã một lỗi use-after-free trong mã blocking-client, cho phép người dùng đã xác thực thực thi các lệnh OS tùy ý trên máy chủ lưu trữ cơ sở dữ liệu. Lỗ hổng này được phát hiện bởi một công cụ AI tự động được xây dựng để săn tìm lỗi trong các kho mã nguồn lớn.

Được theo dõi dưới mã CVE-2026-23479, lỗ hổng này xuất hiện từ phiên bản Redis 7.2.0 và tồn tại trong mọi nhánh ổn định cho đến khi được khắc phục vào ngày 5 tháng 5, lẩn khuất trong hơn hai năm. NVD xếp hạng lỗ hổng này là 8.8 theo CVSS 3.1; Redis liệt kê là 7.7 theo CVSS 4.0. Lỗi được báo cáo bởi Team Xint Code và một bản phân tích kỹ thuật đầy đủ hiện đã được công khai.

Rủi ro trên môi trường Cloud

Sự hiện diện rộng rãi trên môi trường Cloud làm cho vấn đề này trở nên nghiêm trọng hơn. Phân tích của Wiz cho thấy Redis xuất hiện trong phần lớn các môi trường đám mây, với hầu hết các phiên bản đó chạy mà không có mật khẩu. Mặc dù exploit yêu cầu một phiên bản đã xác thực, nhưng trong triển khai mặc định, người dùng mặc định đã nắm giữ mọi đặc quyền mà chuỗi tấn công yêu cầu.

Chi tiết kỹ thuật về lỗi use-after-free

Lỗ hổng nằm trong hàm unblockClientOnKey() tại tệp src/blocked.c, được kích hoạt khi một sự kiện khóa đánh thức một lệnh đang bị chặn. Hàm này điều phối lệnh được xếp hàng thông qua processCommandAndResetClient(), sau đó tiếp tục sử dụng cùng một con trỏ client. Vấn đề là: hàm đó có thể giải phóng (free) client như một tác dụng phụ, và chú thích tiêu đề của chính nó đã cảnh báo điều này. Bên gọi lệnh đã bỏ qua giá trị trả về và vẫn đọc cấu trúc đã bị giải phóng, dẫn đến lỗi use-after-free (CWE-416).

Theo phân tích của Wiz, lỗi này được tạo ra từ hai lần commit. Một lần tái cấu trúc vào tháng 1 năm 2023 (PR #11012) đã thêm lời gọi lệnh không được kiểm tra. Một thay đổi vào tháng 3 năm 2023 (PR #11568) đã thêm nhiều quyền truy cập client hơn sau đó. Từng thay đổi riêng lẻ không gây nguy hiểm, nhưng khi kết hợp lại, chúng đã tồn tại từ bản 7.2.0 và vượt qua nhiều vòng kiểm tra bảo mật.

Chuỗi tấn công ba giai đoạn

Chuỗi tấn công bắt đầu bằng việc rò rỉ địa chỉ heap. Từ đó, nó giải phóng một client và chèn một client giả vào cùng bộ nhớ đó, sau đó lợi dụng cơ chế hạch toán bộ nhớ của Redis để ghi đè con trỏ hàm.

Phiên bản exploit được công bố chạy qua ba giai đoạn:

  • Giai đoạn 1: Một kịch bản Lua một dòng (EVAL \"return tostring(redis.call)\" 0) làm rò rỉ con trỏ heap.
  • Giai đoạn 2: Kẻ tấn công điều chỉnh giới hạn bộ nhớ client, đặt một client phình to vào một stream, sau đó hạ giới hạn và đánh thức nó. Redis giải phóng client bị chặn ngay giữa lời gọi lệnh, và một lệnh SET được pipelined ngay lập tức chiếm lại khe trống đó bằng một cấu trúc client giả.
  • Giai đoạn 3: Quy trình hạch toán bộ nhớ trong updateClientMemoryUsage() thực hiện một phép giảm ngoài phạm vi (out-of-bounds decrement) nhắm vào Global Offset Table để trỏ lại strcasecmp() sang system(). Lệnh tiếp theo Redis phân tích sẽ được thực thi như một lệnh shell.
Redis Exploitation Logic

Hình ảnh Docker chính thức của Redis khiến bước cuối cùng dễ dàng hơn do chỉ có RELRO một phần, để lại GOT có thể ghi được trong thời gian chạy. ASLR và PIE không giúp ích gì vì việc ghi là tương đối so với một biến toàn cục có offset cố định.

Chuỗi tấn công đầy đủ cần một phiên bản đã xác thực với các quyền CONFIG SET, EVAL, các lệnh stream (XREAD/XADD) và SET/GET cơ bản, thuộc các danh mục ACL: @admin, @scripting, @stream và @read/@write.

Khám phá bởi AI và Khuyến nghị

Team Xint Code đã trình diễn khả năng RCE này tại ZeroDay.Cloud 2025. Theori mô tả Xint Code là một công cụ bảo mật AI tự động được xây dựng để săn lùng các lỗi trong mã nguồn quy mô lớn.

Hãy nâng cấp ngay lên phiên bản vá lỗi tương ứng: 7.2.14, 7.4.9, 8.2.6, 8.4.3 hoặc 8.6.3. Các bản nâng cấp nhỏ này được thiết kế để thay thế trực tiếp mà không gây lỗi hệ thống.

Nhánh (Branch)Bị ảnh hưởngBản vá
7.2.x7.2.0 đến 7.2.137.2.14
7.4.x7.4.0 đến 7.4.87.4.9
8.2.x8.2.0 đến 8.2.58.2.6
8.4.x8.4.0 đến 8.4.28.4.3
8.6.x8.6.0 đến 8.6.28.6.3

Nếu chưa thể vá lỗi: hãy tách biệt Redis khỏi internet, sử dụng TLS, thắt chặt ACL để không vai trò nào giữ đồng thời @admin, CONFIG và @scripting. Việc chặn @scripting nếu không dùng Lua sẽ ngăn chặn được bước rò rỉ thông tin ban đầu.

CVE-2026-23479 là một trong năm lỗi RCE của Redis được tiết lộ gần đây. Hai lần commit đã gieo mầm lỗi, hai năm lẩn khuất trong một trong những cơ sở dữ liệu phổ biến nhất thế giới cho đến khi bị một công cụ AI phát hiện. Quy trình code review thủ công đã không thể nhận ra nó trong suốt thời gian qua.