CVE-2025-53101: Lỗ hổng RCE nghiêm trọng trong ImageMagick

Lỗ hổng thực thi mã từ xa nghiêm trọng trong ImageMagick (CVE-2025-53101)

Một lỗ hổng nghiêm trọng đã được công bố trong thư viện xử lý ảnh ImageMagick, cho phép thực thi mã từ xa (RCE) thông qua việc sử dụng các mẫu tên tệp được tạo một cách tinh vi. Lỗ hổng này được theo dõi với mã định danh CVE-2025-53101 và bắt nguồn từ một lỗi stack buffer underwrite trong module MagickCore/image.c. Bằng cách chỉ định nhiều chỉ định định dạng liên tiếp trong một mẫu tên tệp cho lệnh magick mogrify, kẻ tấn công có thể ép buộc phép toán con trỏ nội bộ vượt ra ngoài giới hạn của bộ đệm stack, từ đó đạt được khả năng thực thi mã tùy ý.

Lỗ hổng này được đánh giá ở mức độ nghiêm trọng Cao theo thang điểm CVSS v3.1. Các phiên bản ImageMagick trước 7.1.1-47 và 6.9.13-25 bị ảnh hưởng. Vấn đề đã được khắc phục trong các phiên bản 7.1.2-0 và 6.9.13-26. Người dùng được khuyến nghị nâng cấp ngay lập tức lên các phiên bản đã vá để giảm thiểu rủi ro.

Phân tích kỹ thuật của lỗ hổng

Cốt lõi của lỗ hổng nằm ở cách hàm InterpretImageFilename() xử lý các chỉ định định dạng như %d, %o, và %x bên trong các mẫu tên tệp. Trong quá trình mở rộng tên tệp, hàm này tính toán vị trí ghi dữ liệu bằng cách sử dụng một điều chỉnh bù đắp tĩnh (static offset adjustment). Điều chỉnh này hoạt động dựa trên giả định rằng mỗi mẫu định dạng chiếm bốn ký tự. Khi các mẫu định dạng này xuất hiện liên tiếp mà không có ký tự phân tách rõ ràng (ví dụ: %d%d), sự điều chỉnh bù đắp này có thể bị vượt quá mức dự kiến.

Sự tính toán sai lệch này dẫn đến việc phép toán con trỏ tham chiếu đến vùng bộ nhớ nằm **trước** vùng bộ đệm dự định. Điều này tạo ra một tình trạng underwrite, nơi dữ liệu được ghi vào một vị trí không hợp lệ trước khi bắt đầu vùng bộ đệm. Hậu quả là, một lời gọi tiếp theo đến hàm vsnprintf() sẽ ghi dữ liệu vào vùng bộ nhớ bị underflow này. Hành động ghi này, do đã bị điều hướng sai, sau đó sẽ tràn ra ngoài ranh giới của bộ đệm stack dự định, gây ra một lỗi stack-buffer-overflow. Chính lỗi tràn bộ đệm này có thể được khai thác để thực thi mã từ xa.

Phân tích kỹ thuật sâu hơn cho thấy logic lỗi nằm ở việc xử lý biến `offset`. Biến này được tăng lên theo một hằng số dựa trên độ dài định dạng giả định (bốn ký tự cho mỗi chỉ định định dạng) thay vì theo số lượng ký tự thực tế được tạo ra sau khi mở rộng. Điều này trở nên rõ ràng khi sử dụng tiện ích magick mogrify với các đầu vào như %d%d. Trong trường hợp này, `offset` sẽ vượt quá phạm vi an toàn, kích hoạt một lỗi ghi ngoài giới hạn (out-of-bounds write) đã được phát hiện bởi AddressSanitizer trong các môi trường thử nghiệm.

Cơ chế khai thác và ảnh hưởng

Việc khai thác lỗ hổng này khá đơn giản đối với những kẻ tấn công từ xa có khả năng gọi lệnh magick trên hệ thống mục tiêu. Trong các ứng dụng web hoặc dịch vụ xử lý ảnh, nếu ImageMagick được cấu hình để xử lý các tệp do người dùng cung cấp và cho phép định nghĩa các mẫu tên tệp động, thì nguy cơ khai thác là rất cao. Bằng cách cung cấp một mẫu tên tệp độc hại, kẻ tấn công có thể làm hỏng stack và chuyển hướng luồng thực thi chương trình đến các tải trọng tùy ý (arbitrary payloads) đã được thiết kế trước.

Mặc dù chưa có mã khai thác công khai nào xuất hiện, nhưng các báo cáo về sự cố (Proof-of-Concept crashes) đã được ghi lại bằng cách sử dụng AddressSanitizer, nhấn mạnh mức độ nghiêm trọng của lỗ hổng này. Trong các thử nghiệm được thực hiện trong phòng thí nghiệm trên môi trường Ubuntu 22.04 LTS với gcc 11.4.0, việc đơn giản gọi lệnh sau đã tái tạo lỗi tràn bộ đệm một cách đáng tin cậy, dẫn đến sự cố ứng dụng:

magick mogrify %d%d

Khả năng thực thi mã từ xa cho phép kẻ tấn công kiểm soát hoàn toàn hệ thống bị ảnh hưởng, bao gồm việc cài đặt phần mềm độc hại, đánh cắp dữ liệu nhạy cảm, hoặc thậm chí thiết lập cửa hậu để duy trì quyền truy cập. Mức độ ảnh hưởng cụ thể sẽ phụ thuộc vào ngữ cảnh mà ImageMagick được sử dụng và đặc quyền của tiến trình chạy nó.

Biện pháp khắc phục và giảm thiểu

Đội ngũ bảo trì ImageMagick đã giải quyết vấn đề bằng cách viết lại logic điều chỉnh bù đắp (offset adjustment). Thay vì dựa vào giả định tĩnh, logic mới tính toán các hiệu chỉnh một cách động dựa trên sự khác biệt giữa độ dài mẫu tên tệp và đầu ra thực tế. Điều này được kết hợp với việc kiểm tra ranh giới (bounds checks) trên số lượng byte được ghi để ngăn chặn việc ghi dữ liệu ngoài vùng bộ đệm cho phép.

Bản vá cũng đã giới thiệu các cơ chế xác thực để hủy bỏ hoạt động trong trường hợp lỗi định dạng hoặc các nỗ lực ghi quá mức. Người dùng được khuyến cáo mạnh mẽ nâng cấp ngay lập tức lên các phiên bản đã vá: 7.1.2-0 hoặc 6.9.13-26. Đây là biện pháp hiệu quả nhất để loại bỏ lỗ hổng này.

Để giảm thiểu rủi ro, quản trị viên hệ thống nên thực hiện các bước sau:

* Kiểm tra và nâng cấp hệ thống: Rà soát tất cả các hệ thống đang chạy ImageMagick để xác định các phiên bản bị ảnh hưởng và áp dụng ngay lập tức các bản cập nhật lên 7.1.2-0 hoặc 6.9.13-26.
* Vệ sinh đầu vào: Là một biện pháp bảo mật tốt, mọi đầu vào không đáng tin cậy được sử dụng trong các mẫu tên tệp cho ImageMagick cần phải được vệ sinh (sanitize) hoặc hạn chế nghiêm ngặt. Điều này bao gồm việc kiểm tra và lọc bỏ các ký tự đặc biệt hoặc các chuỗi có thể được diễn giải là chỉ định định dạng.
* Giám sát liên tục: Thực hiện giám sát liên tục các mẫu gọi lệnh magick bất thường trên hệ thống. Các hoạt động đáng ngờ, đặc biệt là các lệnh sử dụng các mẫu tên tệp phức tạp hoặc không mong muốn, có thể là dấu hiệu của nỗ lực khai thác lỗ hổng. Việc phát hiện sớm có thể giúp ngăn chặn hoặc giảm thiểu thiệt hại từ các cuộc tấn công.

Việc tuân thủ các hướng dẫn này là cần thiết để bảo vệ các hệ thống sử dụng ImageMagick khỏi các mối đe dọa tiềm tàng từ lỗ hổng CVE-2025-53101.