
Vào tháng 4 năm 2025, Orange Cyberdefense đã phát hiện ra một lỗ hổng nghiêm trọng trong Craft CMS trong quá trình điều tra sự cố, hiện được theo dõi với mã CVE-2025-32432 . Lỗ hổng này cho phép thực thi mã từ xa (RCE) mà không cần xác thực, với mức độ nghiêm trọng tối đa là 10.0 (Nghiêm trọng) theo đánh giá của NVD (Cơ sở dữ liệu lỗ hổng quốc gia).
Là một phần của Chương trình Học bổng Sau đại học về An ninh mạng OPSWAT cơ sở hạ tầng trọng yếu , các học viên của chúng tôi đã tiến hành một nghiên cứu toàn diện về lỗ hổng này, bao gồm việc tái tạo khai thác, xác thực tác động của nó, đánh giá rủi ro tổ chức và phân tích các chiến lược bảo vệ được đề xuất.
Bài viết này cung cấp phân tích chuyên sâu toàn diện về lỗ hổng CVE-2025-32432, phân tích nguyên nhân gốc rễ, quy trình khai thác và các tác động an ninh rộng hơn, đồng thời đưa ra hướng dẫn thiết thực cho các tổ chức để phòng chống mối đe dọa này.
Giới thiệu về CVE-2025-32432
Lỗ hổng CVE-2025-32432 ảnh hưởng đến các phiên bản Craft CMS từ 3.0.0-RC1 đến 3.9.14, 4.0.0-RC1 đến 4.14.14 và 5.0.0-RC1 đến 5.6.16. Được phân loại là CWE-94: Lỗi chèn mã, lỗ hổng này phát sinh từ việc xử lý không đúng cách dữ liệu đầu vào không đáng tin cậy, cuối cùng cho phép thực thi mã từ xa mà không cần xác thực.

Craft CMS & The Yii Framework
Craft CMS là một hệ thống quản lý nội dung hiện đại cho phép các nhà phát triển và nhóm nội dung xây dựng các trang web linh hoạt, hoàn toàn tùy chỉnh thay vì dựa vào các mẫu có sẵn, cứng nhắc. Với việc được sử dụng trên hơn 46.000 trang web trên toàn thế giới, nó vừa được sử dụng rộng rãi vừa là mục tiêu thường xuyên của những kẻ tấn công tìm kiếm các lỗ hổng có tác động lớn.
Craft CMS được xây dựng trên nền tảng Yii Framework , một framework PHP nhanh và mạnh mẽ được thiết kế cho phát triển web hiện đại. Yii cung cấp cấu trúc và công cụ cốt lõi, trong khi Craft CMS mở rộng nó để tạo ra một hệ thống quản lý nội dung linh hoạt.

Một trong những tính năng cốt lõi của framework Yii là container Dependency Injection (DI). Dependency Injection là một mẫu thiết kế cung cấp cho các thành phần những tài nguyên cần thiết, thay vì yêu cầu chúng tự xây dựng các tài nguyên đó. Container DI của Yii rất linh hoạt, có khả năng xây dựng các đối tượng phức tạp từ các quy tắc cấu hình tương đối đơn giản.
Tuy nhiên, tính linh hoạt này cũng đi kèm với rủi ro. Trong trường hợp CVE-2025-32432, bộ chứa DI đã bị lạm dụng kết hợp với dữ liệu đầu vào không đáng tin cậy từ người dùng, tạo ra một con đường dẫn đến thực thi mã từ xa. Trường hợp này cho thấy ngay cả các tính năng an toàn và mạnh mẽ của khung phần mềm cũng có thể trở nên nguy hiểm nếu chúng được tích hợp mà không hiểu đầy đủ về các tác động bảo mật của chúng.
Phân tích chuyên sâu về lỗ hổng bảo mật CVE-2025-32432
Craft CMS bao gồm một tính năng gọi là Chuyển đổi hình ảnh (Image Transforms ), được thiết kế để tối ưu hóa hiệu suất bằng cách tạo ra các hình ảnh đã được thay đổi kích thước trực tiếp trên máy chủ. Thay vì cung cấp một hình ảnh lớn 4,5 MB để hiển thị dưới dạng hình thu nhỏ 300×300, Craft CMS tự động tạo và phục vụ một phiên bản nhỏ hơn, được tối ưu hóa. Cách tiếp cận này giúp giảm mức sử dụng băng thông và cải thiện đáng kể tốc độ tải trang.
Để cung cấp chức năng này rộng rãi, Craft CMS cho phép sử dụng điểm cuối actions/assets/generate-transform mà không yêu cầu xác thực. Mặc dù điều này đảm bảo cả người dùng đã xác thực và người dùng ẩn danh đều có thể hưởng lợi từ hình ảnh được tối ưu hóa, nhưng nó cũng tạo ra một bề mặt tấn công công khai, nơi bất kỳ ai cũng có thể cung cấp dữ liệu đầu vào được tạo sẵn cho ứng dụng.

Thông qua phân tích chi tiết quy trình làm việc này, các cộng sự của chúng tôi đã xác định rằng phương thức AssetsController::actionGenerateTransform được gọi bất cứ khi nào một yêu cầu POST được gửi đến điểm cuối được công khai. Chức năng này truy xuất tham số handle trực tiếp từ phần thân yêu cầu và chuyển tiếp nó xuống phía dưới để xử lý tiếp ở giai đoạn tiếp theo.

Ở bước tiếp theo, phương thức ImageTransforms::normalizeTransform() được gọi. Phương thức này nhận tham số xử lý do người dùng cung cấp và chuyển đổi nó thành một đối tượng ImageTransform . Vì đối tượng được tạo trực tiếp từ đầu vào không đáng tin cậy, điều này представляет một điểm rủi ro nghiêm trọng trong luồng thực thi.

Trong quá trình này, tất cả các cặp khóa-giá trị từ mảng $transform do người dùng điều khiển (xuất phát từ tham số handle) được hợp nhất vào một mảng cấu hình. Phương thức normalizeTransform sau đó chuyển mảng này cho Craft::createObject() , phương thức chịu trách nhiệm tạo một đối tượng ImageTransform mới.

Lỗ hổng này xuất phát từ cách Craft::createObject() (bao bọc Yii::createObject() của Yii ) xử lý các mảng cấu hình. Vì cơ chế này sử dụng bộ chứa DI để khởi tạo và cấu hình các đối tượng trực tiếp từ mảng chưa được xác thực, kẻ tấn công có thể giành quyền kiểm soát quá trình tạo đối tượng.

Khi một payload độc hại được truyền vào, hàm tạo của đối tượng (kế thừa từ lớp Model ) sẽ gọi phương thức App::configure() .

Phương pháp này lặp qua từng thuộc tính trong mảng do kẻ tấn công kiểm soát và gán chúng cho đối tượng mới.

When App::configure() assigns properties from the attacker-controlled configuration array, most keys are mapped directly onto the object. However, if a key begins with the prefix as, the assignment is routed through Component::__set, Yii’s magic setter. This method interprets as <name> as an instruction to attach a behavior (mixin) to the object.
Một trong những đoạn mã độc hại như vậy có thể được tạo ra để khai thác cách Component::__set xử lý các thuộc tính có tiền tố là , chẳng hạn như khai thác :

Theo phân tích của chúng tôi, việc triển khai Component::__set bao gồm một biện pháp bảo vệ: khi một hành vi được gắn vào thông qua thuộc tính này, framework sẽ xác minh rằng lớp được chỉ định trong mảng cấu hình là một lớp con hợp lệ của yii\base\Behavior . Việc kiểm tra này nhằm mục đích ngăn chặn việc gắn trực tiếp các lớp tùy ý vào các thành phần.

Tuy nhiên, biện pháp bảo vệ này không hiệu quả như vẻ ngoài của nó. Điểm yếu nằm ở cách Yii::createObject xử lý các mảng cấu hình.
Khi khởi tạo một đối tượng, Yii::createObject ưu tiên tham số đặc biệt __class . Nếu khóa này tồn tại, giá trị của nó sẽ được sử dụng làm lớp đích để khởi tạo, và khóa lớp tiêu chuẩn trong mảng cấu hình sẽ bị bỏ qua.

Kẻ tấn công có thể tạo ra một payload cho hành vi khai thác bao gồm hai khóa:
- 'class' => '\craft\behaviors\FieldLayoutBehavior' - Một lớp hợp lệ kế thừa từ yii\base\Behavior. Giá trị này chỉ tồn tại để đáp ứng điều kiện kiểm tra is_subclass_of trong Component::__set, cho phép quá trình thực thi tiếp tục mà không gây ra lỗi.
- '__class' => '\yii\rbac\PhpManager' - Mục tiêu thực sự của kẻ tấn công. Đây là lớp "gadget" mà chúng muốn khởi tạo.
Khi mã được thực thi, Component::__set vượt qua kiểm tra bảo mật vì nó chỉ kiểm tra khóa lớp. Tuy nhiên, khi framework gọi Yii::createObject sau đó để gắn hành vi, nó ưu tiên __class, dẫn đến việc khởi tạo đối tượng \yii\rbac\PhpManager do kẻ tấn công lựa chọn.
Việc sử dụng \yii\rbac\PhpManager là có chủ đích. Chỉ tạo một đối tượng thôi là chưa đủ để khai thác; để đạt được RCE (thực thi mã từ xa) cần một lớp gadget có tác dụng phụ có thể bị lợi dụng. PhpManager là mục tiêu phổ biến trong các cuộc tấn công POI (PHP Object Injection) vì luồng khởi tạo của nó. Khi được khởi tạo, phương thức init() của nó gọi load() , sau đó gọi loadFromFile($this->itemFile) . Với quyền kiểm soát $this->itemFile , kẻ tấn công có thể buộc ứng dụng tải một tệp độc hại, biến việc tạo đối tượng thành thực thi mã.

Mối nguy hiểm nằm ở phương thức loadFromFile. Trong PHP, lệnh require thực thi tệp mục tiêu như một đoạn mã, vì vậy nếu kẻ tấn công kiểm soát đường dẫn tệp, chúng có thể kích hoạt việc thực thi mã tùy ý.
Để đưa mã độc hại lên máy chủ, kẻ tấn công khai thác các tệp phiên PHP . Bằng cách chèn mã PHP vào tham số yêu cầu, Craft CMS lưu trữ mã độc vào một tệp phiên trong quá trình chuyển hướng. Sau đó, khi PhpManager tải tệp này, mã của kẻ tấn công có thể được thực thi.

Chuỗi tấn công hoàn chỉnh hoạt động theo ba giai đoạn. Đầu tiên, kẻ tấn công cài đặt mã PHP độc hại bằng cách gửi một URL được tạo sẵn, mà Craft CMS sẽ lưu vào một tệp phiên. Tiếp theo, chúng khai thác lỗ hổng bỏ qua __class trong điểm cuối chuyển đổi hình ảnh để tải tiện ích PhpManager và trỏ nó đến tệp phiên bị nhiễm độc. Cuối cùng, khi PhpManager tải tệp, tải trọng của kẻ tấn công sẽ được thực thi, cấp quyền thực thi mã từ xa (RCE) và toàn quyền kiểm soát máy chủ — thường thông qua webshell hoặc reverse shell.



Giảm thiểu và khắc phục
Để giảm thiểu hiệu quả các rủi ro liên quan đến CVE-2025-32432, các tổ chức cần có khả năng giám sát và kiểm soát các thành phần mã nguồn mở của mình. Nếu không có danh mục rõ ràng về các thành phần, việc vá lỗi sẽ trở nên phỏng đoán.
OPSWAT SBOM , một công nghệ độc quyền trong nền tảng MetaDefender® , giải quyết nhu cầu này bằng cách cung cấp danh sách tất cả các thành phần phần mềm, thư viện, vùng chứa Docker và các phụ thuộc đang được sử dụng. Nó cho phép các tổ chức theo dõi, bảo mật và cập nhật các thành phần của họ một cách chủ động.


Trong ví dụ trên, công nghệ SBOM trong MetaDefender Core™ đã quét gói nginx-ingress-controller chứa lỗ hổng CVE-2025-32432. Hệ thống tự động gắn cờ vấn đề là Nghiêm trọng và cung cấp hướng dẫn về các phiên bản đã được vá lỗi, cho phép các nhóm nhanh chóng ưu tiên và vá lỗ hổng trước khi nó có thể bị khai thác.
OPSWAT SBOM có sẵn trong MetaDefender Core và MetaDefender Software Supply Chain™ , cho phép các nhóm bảo mật xác định và xử lý các lỗ hổng nhanh hơn . Với OPSWAT Với SBOM, các nhóm bảo mật có thể:
- Nhanh chóng xác định các thành phần dễ bị tổn thương - Xác định ngay lập tức các thành phần mã nguồn mở bị ảnh hưởng bởi các cuộc tấn công giải mã dữ liệu. Điều này đảm bảo hành động nhanh chóng trong việc vá lỗi hoặc thay thế các thư viện dễ bị tổn thương.
- Đảm bảo việc vá lỗi và cập nhật chủ động - Liên tục giám sát các thành phần mã nguồn mở thông qua OPSWAT SBOM giúp chủ động phòng ngừa các lỗ hổng liên quan đến quá trình giải mã dữ liệu. OPSWAT SBOM có thể phát hiện các thành phần lỗi thời hoặc không an toàn, cho phép cập nhật kịp thời và giảm thiểu nguy cơ bị tấn công.
- Đảm bảo tuân thủ quy định và báo cáo – OPSWAT SBOM giúp các tổ chức đáp ứng các yêu cầu tuân thủ khi các khuôn khổ pháp lý ngày càng đòi hỏi sự minh bạch trong chuỗi cung ứng phần mềm.
Bạn đã sẵn sàng tăng cường chuỗi cung ứng phần mềm của mình để chống lại các mối đe dọa mới nổi chưa?
