Plugin4Shell cho plugin chạy mã: hai AI coding agent vẫn chưa có bản vá

Ngày 17/9/2026, AIR Security công bố Plugin4Shell, một lỗi chuỗi cung ứng trong Claude Code, OpenAI Codex, GitHub Copilot và Gemini CLI. Công bố kỹ thuật của AIR Security xác nhận Claude Code và Codex đã được sửa, còn Copilot chưa có bản vá và phiên bản Gemini CLI dành cho người dùng phổ thông sẽ không được sửa.
Plugin4Shell là cách vượt qua cơ chế ghim commit bằng SHA: công cụ yêu cầu đúng mã định danh đã được duyệt nhưng không kiểm tra mã thực sự xuất hiện trong thư mục làm việc. Nếu kiểm soát hoặc chiếm được kho plugin, kẻ tấn công có thể khiến agent chạy nội dung khác với commit đã ghim; trên Claude Code và Codex, cập nhật nền mặc định còn có thể đưa mã đó tới plugin đã cài mà không cần thao tác mới của người dùng.
SHA được ghim nhưng mã checkout vẫn có thể bị đổi
SHA pinning chỉ bảo đảm tính toàn vẹn khi trình cài đặt đối chiếu commit cuối cùng trong cây làm việc với SHA đã phê duyệt. Ba công cụ Claude Code, Codex và Copilot trước đây clone kho mã rồi yêu cầu Git checkout chuỗi SHA, nhưng không xác minh lại HEAD sau khi lệnh hoàn tất.
Trên dịch vụ Git cho phép tên nhánh gồm đúng 40 ký tự thập lục phân, chủ kho có thể tạo nhánh mặc định mang tên giống SHA đã ghim. Khi tên đó đồng thời giống một tham chiếu và một mã commit, Git có thể chọn nhánh; trình cài đặt vẫn hoàn tất trong khi cây làm việc chứa mã do chủ nhánh kiểm soát. Bản sửa cần phân giải HEAD sau checkout và hủy cài đặt nếu commit thực tế không trùng SHA được duyệt.
Gemini CLI có biến thể riêng. Công cụ tải commit được ghim vào FETCH_HEAD, sau đó checkout tên này; một nhánh mặc định cũng mang tên FETCH_HEAD có thể khiến Git chọn nội dung nhánh thay cho commit vừa tải. Vì quyết định checkout diễn ra trên máy khách, việc kiểm duyệt hoặc ghim phiên bản ở chợ plugin không thể tự bảo đảm mã cuối cùng sẽ giữ nguyên.
“Không cần nhấp” chỉ đúng trong những điều kiện cụ thể
Đường khai thác cần kẻ tấn công kiểm soát kho plugin, chẳng hạn chủ plugin chủ động thay mã hoặc kho của một nhà phát triển hợp pháp bị chiếm quyền. Với Claude Code và Codex, cập nhật plugin chạy nền theo mặc định có thể kích hoạt lại quá trình checkout cho một plugin đã được cài, vì vậy người dùng không phải bấm cài đặt hoặc chấp nhận lời nhắc mới.
Phạm vi thực tế hẹp hơn cách gọi “zero-click RCE” có thể gợi ra. GitHub chặn tên nhánh hoặc thẻ trông giống SHA 40 ký tự, nên biến thể này không hoạt động với plugin được lưu trên GitHub; Bitbucket và máy chủ Git tự quản có thể cho phép tên đó. Kiểm tra của The Hacker News ngày 18/9 cho thấy các catalog mặc định của Claude Code và Copilot khi ấy đều trỏ tới GitHub, đồng thời chưa tìm thấy bằng chứng khai thác độc hại ngoài thực tế, CVE hay cảnh báo công khai từ bốn nhà cung cấp.
Giới hạn của GitHub không loại bỏ biến thể FETCH_HEAD trên Gemini CLI và cũng không sửa lỗi xác minh trong các agent. Với Copilot, rủi ro còn tồn tại khi dùng marketplace bên ngoài đặt trên Bitbucket hoặc Git tự quản; còn một plugin chỉ đến từ catalog mặc định trên GitHub không phơi nhiễm trước biến thể tên nhánh giống SHA theo các điều kiện đã công bố.
Trạng thái của bốn công cụ
Bản tin Help Net Security ngày 18/9 tổng hợp trạng thái vá không đồng đều của bốn sản phẩm và các phiên bản đã khắc phục:
- Claude Code: lỗi được sửa trong phiên bản 2.1.179. Phiên bản an toàn là 2.1.179 trở lên.
- OpenAI Codex: lỗi được sửa trong phiên bản 0.146.0. Người dùng cần chạy 0.146.0 hoặc mới hơn.
- GitHub Copilot: chưa có bản vá được phát hành tại thời điểm các nguồn cập nhật ngày 18–19/9.
- Gemini CLI: phiên bản dành cho người dùng phổ thông đã bị ngừng và sẽ không nhận bản sửa; hướng thay thế được nêu là Google Antigravity. Quyền truy cập Gemini CLI cho doanh nghiệp vẫn có thể tiếp tục được cập nhật, nhưng chưa có xác nhận công khai rằng nhánh này đã sửa Plugin4Shell.
Điểm cần thận trọng là trạng thái Claude Code 2.1.179 và quyết định không sửa Gemini CLI chủ yếu dựa trên hồ sơ công bố của nhóm nghiên cứu. Bản sửa Codex có dấu vết công khai mô tả chính lỗi Git có thể hiểu SHA được yêu cầu như tên nhánh; ghi chú phát hành Claude Code không nêu đích danh Plugin4Shell.
Giảm rủi ro khi chưa có bản vá
Với Claude Code và Codex, biện pháp đầy đủ ở cấp agent là nâng cấp lên phiên bản đã sửa. Tài liệu công khai chưa xác nhận việc nâng cấp có tự nhận diện hoặc loại bỏ plugin từng bị tráo trước đó hay không, nên tổ chức vẫn cần kiểm tra lại nguồn kho, commit thực tế và thay thông tin xác thực nếu phát hiện dấu hiệu bất thường.
Với Copilot, ưu tiên là tạm ngừng cài mới hoặc cập nhật plugin từ Bitbucket và máy chủ Git tự quản, thu hẹp danh sách plugin được phép và đối chiếu HEAD thực tế với SHA đã phê duyệt bằng một bước độc lập. Chỉ sử dụng catalog đặt trên GitHub làm giảm biến thể tên nhánh 40 ký tự, nhưng không thay thế bản vá phía agent.
Với Gemini CLI dành cho người dùng phổ thông, chờ một bản sửa không còn là phương án theo trạng thái đã công bố. Người dùng cần chuyển sang Antigravity hoặc ngừng dùng plugin trên công cụ cũ; khách hàng doanh nghiệp nên kiểm tra đúng kênh phân phối và thông báo cập nhật của mình thay vì suy luận rằng phiên bản tiếp tục được hỗ trợ đã được vá.
PoC đã thành công, chưa có chiến dịch tấn công được xác nhận
Plugin4Shell đã được chứng minh bằng các thử nghiệm có kiểm soát trên cả bốn agent, nhưng PoC không đồng nghĩa với một chiến dịch xâm nhập đang diễn ra. Kẻ tấn công vẫn phải kiểm soát kho plugin, và biến thể chính còn phụ thuộc nơi lưu trữ cho phép tên nhánh giống SHA.
Trạng thái được xác nhận đến ngày 19/9 vì vậy gồm hai phần: Claude Code 2.1.179 và Codex 0.146.0 đã có cách chặn ở phía agent; Copilot chưa có bản vá, còn Gemini CLI phổ thông không dự kiến được sửa. Những điểm chưa rõ là phản hồi chính thức của Microsoft, phạm vi xử lý trên kênh Gemini CLI doanh nghiệp và cách các nhà cung cấp nhận diện plugin có thể đã bị thay thế trước khi agent được nâng cấp.
Đọc thêm:
Đăng ký bản tin
Nhận tin Web3, AI và tiền mã hóa mới nhất ngay trong hộp thư.