Hai lỗ hổng nghiêm trọng trong PHP Composer cho phép tấn công thực thi mã

Đội ngũ phát triển PHP Composer vừa công bố hai lỗ hổng bảo mật mức độ cao tồn tại trong Perforce VCS driver, cho phép kẻ tấn công thực thi lệnh tuỳ ý trên hệ thống nạn nhân. Điểm đặc biệt đáng lo ngại là cả hai lỗ hổng đều có thể bị khai thác ngay cả khi người dùng không cài đặt Perforce và không trực tiếp sử dụng driver này. Composer đã phát hành bản vá khẩn cấp và khuyến nghị người dùng cập nhật ngay lập tức.
Thông tin chi tiết
| Định danh lỗ hổng | CVE-2026-40176 | CVE-2026-40261 |
|---|---|---|
| Điểm CVSS (3.1) | 7.8 | 8.8 |
| Mức độ nghiêm trọng | HIGH - Nghiêm trọng cao | HIGH - Nghiêm trọng cao |
| Mô tả tóm tắt | Lỗ hổng kiểm tra đầu vào không đúng cách (Improper Input Validation) trong phương thức generateP4Command() của Perforce VCS driver. Các tham số kết nối do người dùng kiểm soát (port, user, client, source url) được nội suy vào lệnh shell mà không được escape đúng cách, cho phép kẻ tấn công kiểm soát file composer.json độc hại chèn và thực thi lệnh tuỳ ý trong ngữ cảnh của người dùng đang chạy Composer — kể cả khi Perforce không được cài đặt trên hệ thống. |
Lỗ hổng kiểm tra đầu vào không đúng cách do thiếu escaping trong phương thức syncCodeBase() của Perforce VCS driver. Một source reference không được escape đúng cách được nối trực tiếp vào lệnh shell, cho phép kẻ tấn công chèn lệnh tuỳ ý thông qua các shell metacharacter. Lỗ hổng có thể bị khai thác thông qua bất kỳ repository Composer nào phục vụ metadata độc hại, kể cả khi Perforce không được cài đặt trên hệ thống nạn nhân. |
| Phiên bản bị ảnh hưởng | Tất cả phiên bản Composer trước 2.9.6 (mainline) và 2.2.27 (LTS) |
PHP Composer là trình quản lý gói phụ thuộc cho ngôn ngữ lập trình PHP, cho phép nhà phát triển khai báo các thư viện cần thiết trong file composer.json, sau đó tự động tải xuống và quản lý chúng. Composer được sử dụng rộng rãi trong các framework phổ biến như Laravel và Symfony, và là công cụ không thể thiếu trong hầu hết các dự án PHP hiện đại.
CVE-2026-40176 tồn tại trong phương thức generateP4Command() của Perforce VCS driver. Tại đây, các tham số kết nối do người dùng kiểm soát gồm port, user, client và source url được nội suy trực tiếp vào lệnh shell mà không qua bất kỳ bước kiểm tra hay thoát ký tự (escaping) nào. Điều này cho phép kẻ tấn công nhúng các ký tự metacharacter của shell vào các trường này bên trong file composer.json để chèn và thực thi lệnh tuỳ ý. Đáng chú ý, Composer vẫn cố thực thi lệnh đã được xây dựng ngay cả khi Perforce không được cài đặt trên hệ thống.
Một điều quan trọng cần lưu ý: VCS repository chỉ được nạp từ file composer.json nằm ở thư mục gốc mà người dùng thực thi lệnh Composer, hoặc từ thư mục cấu hình Composer (ví dụ: ~/.config/composer/composer.json). Lỗ hổng này không thể bị khai thác thông qua các file composer.json của các package đã được cài đặt dưới dạng dependencies. Người dùng chỉ có nguy cơ bị tấn công nếu chạy lệnh Composer trực tiếp trên một project không đáng tin cậy có file composer.json do kẻ tấn công cung cấp.
CVE-2026-40261 nghiêm trọng hơn CVE-2026-40176 với điểm CVSS 8.8 do phạm vi khai thác rộng hơn đáng kể: kẻ tấn công không cần nạn nhân phải mở một project đáng ngờ, mà chỉ cần kiểm soát hoặc xâm phạm bất kỳ repository Composer mà nạn nhân tin dùng.
Lỗ hổng nằm trong phương thức syncCodeBase() của Perforce VCS driver. Tại đây, một source reference không được escape đúng cách được nối trực tiếp vào lệnh shell. Kẻ tấn công có thể nhúng các ký tự metacharacter của shell (chẳng hạn như ;, |, &&, $()) vào source reference để chèn và thực thi lệnh bổ sung. Tương tự CVE-2026-40176, Composer vẫn cố thực thi lệnh đã được xây dựng ngay cả khi Perforce không được cài đặt trên hệ thống.
Source reference và source url là một phần của package metadata. Bất kỳ repository Composer nào cũng có thể phục vụ metadata khai báo Perforce là source type cùng với source reference hoặc source url độc hại. Điều này có nghĩa là lỗ hổng có thể được khai thác thông qua bất kỳ package nào được phục vụ bởi một repository bị xâm phạm hoặc độc hại — kể cả những repository mà người dùng hoàn toàn tin tưởng trước đây. Lỗ hổng này đặc biệt nguy hiểm trong các kịch bản tấn công chuỗi cung ứng (supply chain attack): nếu một package phổ biến trên Packagist.org bị xâm phạm và kẻ tấn công chèn source metadata độc hại, toàn bộ các dự án PHP phụ thuộc vào package đó đều có thể bị ảnh hưởng.
Lỗ hổng có thể bị khai thác khi người dùng cài đặt hoặc cập nhật dependencies từ source, cụ thể khi sử dụng tùy chọn --prefer-source hoặc khi cài đặt các phiên bản có tiền tố dev- (đây là hành vi mặc định của Composer đối với các dev-prefixed versions).
Khuyến nghị & Khắc phục
Đội ngũ FPT Threat Intelligence khuyến nghị người dùng và quản trị viên thực hiện ngay các bước sau:
Cập nhật Composer lên phiên bản 2.9.6 hoặc 2.2.27 (LTS) ngay lập tức bằng lệnh:
composer.phar self-updateĐối với CVE-2026-40261: tránh cài đặt dependencies từ source bằng cách sử dụng tùy chọn
--prefer-disthoặc cấu hìnhpreferred-install: disttrong composer.json; đồng thời chỉ sử dụng các repository đáng tin cậy.Đối với CVE-2026-40176: rà soát cẩn thận file composer.json trước khi chạy Composer, kiểm tra các trường cấu hình Perforce (port, user, client, source url) đảm bảo không chứa ký tự đặc biệt; chỉ chạy Composer trên các project từ nguồn đáng tin cậy.





