Minh họa kỹ thuật trừu tượng trên nền xám ấm nhạt: một bảng cài đặt cao màu trắng ngà với các hàng kẻ mờ nằm bên trái trung tâm, và ô thấp nhất của bảng chứa hai dấu ngoặc nhọn màu lục lam nhỏ lồng nhau, dấu này nằm trong dấu kia. Một đường mảnh màu lục lam chạy từ bảng đến một khối máy chủ phẳng màu đá phiến ở bên phải; một đường thứ hai màu hổ phách rời khỏi các dấu lồng nhau, đi qua viền bảng và đến cùng khối đó, và một hình vuông nhỏ màu hổ phách đánh dấu điểm giao nơi hai đường tách ra. Một khối máy chủ thứ hai, mờ hơn, nằm phía sau khối đầu tiên. Tác phẩm là hình học vector phẳng với bóng đổ mềm và lề rộng; không có văn bản, chữ cái, số, người hay logo tổ chức nào xuất hiện. Logo OrcaRouter được ghép ở góc dưới bên phải của một dải trắng bên dưới tác phẩm.
AI Safety Incidents

Lỗ hổng RCE trong AI Agent của Zammad: một thẻ mẫu lồng nhau, một bản sửa chỉ một chữ cái

Tác giả

Alistair Wren

Ngày đăng

Mô hình mới nhất · 20Xem tất cả mô hình →
Benchmark: Artificial Analysis · cập nhật hằng ngày
Quay lại tất cả bài viết

Zammad, helpdesk mã nguồn mở, đã phát hành phiên bản 7.1.2 vào ngày 4 tháng 8 năm 2026 với mười tám bản sửa lỗi bảo mật; bản đầu tiên trong danh sách vá một lỗ hổng thực thi mã từ xa trong các trường cấu hình của tính năng AI Agent. Lỗ hổng là CVE-2026-84462, được công bố trong tư vấn GitHub GHSA-gp3x-9xm8-rcj6 cùng ngày, và phạm vi bị ảnh hưởng là mọi bản cài đặt tự vận hành trên phiên bản 7.1.1 trở xuống, bao gồm 7.1.1. Một quản trị viên có thể tạo hoặc chỉnh sửa AI Agent có thể nhập văn bản được tạo đặc biệt vào một trong các trường của agent, vượt qua bộ lọc nhằm vô hiệu hóa nó, và chạy các lệnh tùy ý trên máy chủ lưu trữ Zammad — với khả năng, theo lời của tư vấn, là “đọc, sửa đổi hoặc phá hủy toàn bộ dữ liệu được lưu trữ trên máy chủ đó.” Không cần người dùng nào khác thực hiện hành động nào: tư vấn nêu rằng “mã độc sẽ tự động chạy vào lần tiếp theo mà AI Agent bị ảnh hưởng xử lý một phiếu hỗ trợ.” GitHub đánh giá mức Cao với điểm 8.6 theo CVSS 4.0. Hồ sơ, các thẻ mức độ nghiêm trọng và tác hại của nó, cùng những mục được lập xung quanh nó, được lưu giữ trong the Orca AI Incident Archive, nơi liệt kê sự cố này cùng với phần còn lại của loạt.

Những gì khuyến cáo này xác lập

Bản tư vấn bảo mật của GitHub, được công bố ngày 4 tháng 8 năm 2026, ngắn gọn và đặc biệt cụ thể về cơ chế cùng các điều kiện tiên quyết. Bản tư vấn mô tả một "bộ lọc bảo mật bảo vệ cấu hình AI Agent của Zammad" "có thể bị vượt qua bằng cách nhập văn bản được chế tạo đặc biệt vào một trong các trường của AI Agent", và xác định chính xác đối tượng: "Một quản trị viên có quyền tạo hoặc chỉnh sửa AI Agent có thể khai thác lỗi này để chạy các lệnh tùy ý trên máy chủ lưu trữ Zammad." Phạm vi bị ảnh hưởng được ghi nhận là tối đa và bao gồm 7.1.1, phiên bản đã vá là 7.1.2. Người báo cáo được ghi nhận là colinthebomb1; tài khoản công bố là fliebe92. Bản tư vấn không công bố bằng chứng khái niệm nào và không có chi tiết khai thác nào.

GitHub đánh giá lỗ hổng này ở mức Cao, 8,6 theo CVSS 4.0, với vectơ AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H và không thay đổi phạm vi. Diễn giải ra thì điều đó có nghĩa là lỗ hổng có thể được truy cập qua mạng với độ phức tạp thấp, không có yêu cầu tấn công và không cần tương tác của người dùng, bởi một kẻ tấn công đã có đặc quyền cao bên trong ứng dụng, với tác động cao đến tính bảo mật, tính toàn vẹn và tính khả dụng của chính instance Zammad. Bản khuyến cáo liệt kê ba điểm yếu: CWE-20, xác thực đầu vào không đúng cách; CWE-94, chèn mã; và CWE-1336, lớp lỗi công cụ mẫu mà MITRE định nghĩa là không vô hiệu hóa cú pháp đặc biệt "mà có thể được diễn giải thành biểu thức mẫu hoặc các chỉ thị mã khác khi được xử lý bởi công cụ."

Bản sửa lỗi đã thay đổi một chữ cái.

Bản sửa lỗi công khai là commit e3b0c8df91ad2108c8305be23e8fe6f73fb9718d, được gửi kèm thông điệp “Maintenance: Improve ERB sanitizer.” GitHub ghi nhận ngày tác giả là 7 tháng 7 năm 2026 và ngày commit là 3 tháng 8 năm 2026, một ngày trước khuyến cáo và bản phát hành. Commit này động đến hai tệp: một dòng của lib/erb_sanitizer.rb và mười bốn dòng đặc tả được thêm vào.

Dòng duy nhất đó chính là toàn bộ bản vá. Phương thức escape_tag trước đây dùng sub của Ruby, thứ thay thế kết quả khớp đầu tiên của một mẫu trong chuỗi; giờ đây nó dùng gsub, thứ thay thế mọi kết quả khớp. Trong cả hai phiên bản, phần thay thế đều giống nhau: một dấu mở được viết là <% sẽ trở thành <%%, dạng nhân đôi mà ERB, công cụ mẫu của Ruby, kết xuất dưới dạng văn bản nguyên văn thay vì đánh giá. Bản khuyến nghị bảo mật không nêu trường AI Agent nào chứa mẫu; commit xác định bộ lọc lẽ ra phải làm cho mẫu đó trở nên vô hại.

A dark HTML card titled 'One line, one letter', kicker 'Zammad fix commit e3b0c8f', subtitle 'lib/erb_sanitizer.rb, method escape_tag, authored 7 July 2026 and committed 3 August 2026 - one day before disclosure'. Two code panels: BEFORE, in amber, shows a red minus beside tag.sub with the opener arguments and the note 'Replaces the first opener only'; AFTER, in cyan, shows a green plus beside tag.gsub and the note 'Replaces every opener'. A second panel headed 'WHY ONE LETTER MATTERED' shows the payload, a literal opener followed by an evaluating tag, arrowed to the same string with the first opener doubled, and explains that the inner tag is never touched. A third row headed 'REGRESSION SPEC, SAME COMMIT' shows the two nested payloads the added tests cover, with the note 'Both must render as literal text, not evaluate'. A footer names commit e3b0c8df91ad2108c8305be23e8fe6f73fb9718d and says the card was rendered by OrcaRouter with no vendor logos. The OrcaRouter logo is composited in the bottom-right corner.

Với sub, chỉ dấu mở đầu tiên trong chuỗi bị vô hiệu hóa. Một payload đặt dấu mở thứ hai ngay sau dấu thứ nhất vẫn sống sót qua bộ lọc: <%<%= 1 + 1 %> trở thành <%%<%= 1 + 1 %>, trong đó ERB phát ra dấu mở dẫn đầu dưới dạng văn bản rồi sau đó đánh giá thẻ bên trong. Đặc tả hồi quy được thêm trong cùng commit gọi rõ thủ thuật này — "with a nested opener smuggled inside a single tag (escape-all-openers bypass)" — và khẳng định rằng cả <%<%= 1 + 1 %> và một thẻ lồng hai lớp <%<%<%= 1 + 1 %> đều phải hiển thị dưới dạng văn bản theo nghĩa đen. Đặc tả đó là mô tả công khai rõ ràng nhất về cách bộ lọc đã bị vượt qua, vì bản tư vấn bảo mật không cung cấp thông tin nào.

Dạng của lỗi này mang tính tổng quát chứ không phải là một điều kỳ lạ riêng của Zammad: một bộ thoát dừng sau lần khớp đầu tiên sẽ bị vô hiệu hóa bởi bất kỳ đầu vào nào chứa thêm một bản sao thứ hai, lồng nhau, của chuỗi mà nó loại bỏ. Thông điệp commit gọi thay đổi này là bảo trì, vốn là cách một bản vá gia cố một ký tự thường được truyền đi — và đó là lý do tại sao bản khuyến cáo, chứ không phải diff, phải mang cảnh báo.

Bảy tuần từ bản tư vấn đến NVD

NVD đã công bố bản ghi của mình cho CVE-2026-84462 vào ngày 25 tháng 9 năm 2026, bảy tuần sau bản tư vấn, và sửa đổi lần cuối vào ngày 28 tháng 9. Bản ghi được đánh dấu là "Deferred", nghĩa là cơ quan chưa công bố phân tích của riêng mình, và khối chỉ số của bản ghi quy điểm 8.6 cho security-advisories@github.com như một chỉ số phụ — việc chấm điểm của GitHub với tư cách là cơ quan cấp số CVE, chứ không phải đánh giá độc lập của NVD. Bản ghi này hoàn toàn không có cấu hình CPE, do đó không ánh xạ lỗ hổng tới một định danh sản phẩm có phiên bản.

Cả hai chi tiết này đều quan trọng đối với bất kỳ ai theo dõi phần mềm tự lưu trữ qua nguồn cấp dữ liệu thay vì qua ghi chú phát hành. Bản vá đã được công khai và có thể hành động vào ngày 4 tháng 8; bản ghi dạng máy đọc được xuất hiện vào ngày 25 tháng 9; và ngay cả khi đó, nó vẫn đến mà không có mã định danh sản phẩm mà các trình quét dựa trên CPE dùng để đối khớp. Trong bảy tuần, tài liệu mô tả chính thức về lỗ hổng là khuyến cáo của nhà cung cấp và ghi chú phát hành của nhà cung cấp.

A dark HTML timeline card titled 'From commit to CVE record', kicker 'Zammad 7.1.2 - CVE-2026-84462', subtitle 'Five dated points, taken from the fix commit, the GitHub advisory, the Zammad release note and the NVD API'. Five rows: 7 July 2026, fix authored in commit e3b0c8f with the message 'Maintenance: Improve ERB sanitizer'; 3 August 2026, fix committed one day before disclosure; 4 August 2026, GitHub advisory GHSA-gp3x-9xm8-rcj6 published and Zammad 7.1.2 shipped the same day with 18 security fixes; 25 September 2026, NVD publishes CVE-2026-84462 with status Deferred and no CPE configuration, 52 days after disclosure; 29 October 2026, FIRST EPSS read at 0.28 percent probability in 30 days, 20th percentile. An amber rule below reads 'The advisory and the CVE record describe the same flaw. The first was actionable on 4 August; the second arrived as a machine-readable record 52 days later.' A footer credits GitHub, Zammad, NVD and FIRST, and says the card was rendered by OrcaRouter. The OrcaRouter logo is composited in the bottom-right corner.

Điều gì đã được xác lập, và điều gì chưa.

Đã xác lập: bản khuyến cáo, phiên bản đã vá, điểm CVSS và thay đổi mã đều đến từ Zammad và từ cơ sở dữ liệu khuyến cáo của GitHub, và chúng nhất quán với nhau. Bản ghi của NVD sao chép mô tả của cơ quan cấp số mà không bổ sung phân tích riêng của mình. Kho lưu trữ xếp mức độ tin cậy của mục là A trên cơ sở đó, với sự cố không có tranh chấp.

Chưa được xác lập hoặc chưa được ghi nhận: không có bằng chứng khái niệm trong bản khuyến cáo và không có báo cáo nào về việc bị khai thác trong thực tế. EPSS của FIRST cho CVE-2026-84462 xác suất bị khai thác là 0,28 phần trăm trong ba mươi ngày tới, thuộc phân vị thứ 20, trong điểm số được công bố ngày 29 tháng 10 năm 2026. Kho lưu trữ không ghi nhận thiệt hại thực tế nào và xếp mục này ở mức độ nghiêm trọng trung bình — thấp hơn dải High của chính bản khuyến cáo. Đó là những công cụ riêng biệt trả lời những câu hỏi khác nhau, về điều mà lỗ hổng có thể cho phép so với điều đã được biết là đã xảy ra, và bài viết này báo cáo cả hai thay vì dung hòa chúng.

Sự xác nhận độc lập rất ít. Việc tìm kiếm thông tin đưa tin về CVE này trả về các cơ sở dữ liệu lỗ hổng sao chép lại văn bản của cơ quan cấp số hiệu, cùng với ghi chú phát hành của chính Zammad; không có hãng tin nào có vẻ đã đưa tin độc lập về lỗ hổng này. Đó là một phát hiện về hồ sơ, không phải lời chỉ trích hồ sơ: một lỗ hổng thực thi mã từ xa trong helpdesk đòi hỏi tài khoản quản trị viên không phải loại sự kiện tạo ra báo chí, và việc thiếu một tường thuật độc lập tự nó là một phần của những gì hồ sơ ghi lại.

Ai có thể kích hoạt nó, và điều gì đã thay đổi?

Ghi chú phát hành Zammad cho phiên bản 7.1.2, ngày 4 tháng 8 năm 2026, liệt kê mười tám lỗ hổng đã được vá trong phiên bản đó và đặt lỗ hổng vượt qua mẫu của AI Agent lên đầu. Đối với khách hàng dùng dịch vụ lưu trữ, ghi chú nêu: "Không cần thực hiện hành động nào. Các instance của bạn đã được nhóm chúng tôi vá và bảo vệ." Đối với các cài đặt tự lưu trữ, văn bản thẳng thắn hơn: "Chúng tôi khuyến nghị mạnh mẽ việc nâng cấp lên phiên bản Zammad mới nhất ngay lập tức để đảm bảo hệ thống của bạn được bảo vệ." Bản khuyến cáo không đưa ra biện pháp thay thế nào, và hồ sơ không có biện pháp giảm thiểu nào ngoài việc nâng cấp.

A dark HTML card titled 'Who can pull the trigger', kicker 'CVE-2026-84462 - preconditions', subtitle 'From the GitHub advisory and the Zammad 7.1.2 release note; the score and exploitation figure are labelled separately'. Left column headed 'THE ATTACKER MUST' lists three conditions: hold administrator rights inside Zammad, specifically permission to create or edit AI Agents; reach the agent configuration over the network; supply no interaction from any other user. Right column headed 'THE PAYLOAD THEN' lists three consequences: runs on the server that hosts Zammad, not in a browser; fires the next time the agent processes a ticket; can read, modify or destroy all data on that server, according to the advisory. A statistics strip reads 8.6 CVSS 4.0 High, PR:H high privileges required, UI:N no user interaction, C:H I:H A:H all three impacts high, and 0.28 percent EPSS on 29 October 2026. Three flags below read Affected: Zammad up to and including 7.1.1; Fixed: 7.1.2, released 4 August 2026; Stated remedy: upgrade, no workaround published. A closing panel notes that the advisory publishes no proof of concept and that the regression spec in the fix commit is the clearest public description of the bypass. A footer says hosted instances were already patched and self-hosted installations must reach 7.1.2. The OrcaRouter logo is composited in the bottom-right corner.

Yêu cầu về đặc quyền xứng đáng được xem xét kỹ hơn so với những gì vector đưa ra. PR:H có nghĩa là kẻ tấn công cần quyền truy cập đáng kể trước khi lỗ hổng có thể bị lợi dụng, và ở đây quyền truy cập đó chính là đặc quyền admin.ai_agent mà tài liệu của Zammad nói là bắt buộc để làm việc với AI Agents ngay từ đầu. Trong một helpdesk, đó thường là trưởng nhóm dịch vụ, người tinh chỉnh các bộ phân loại, công cụ gắn thẻ và trình trích xuất văn bản — không nhất thiết là người quản trị máy chủ. Cách diễn đạt của chính bản tư vấn, “một quản trị viên có quyền tạo hoặc chỉnh sửa AI Agents”, hẹp hơn so với “bất kỳ ai” và rộng hơn so với “root”. Nếu không thể nâng cấp ngay lập tức, việc thu hẹp những người nắm giữ đặc quyền đó sẽ làm giảm nhóm người có thể tiếp cận đường đi mã; đây là suy luận từ vector và tài liệu, không phải là biện pháp khắc phục do nhà cung cấp công bố.

Không có tài liệu gốc nào đưa mô hình ngôn ngữ vào đường khai thác. Lệnh chạy bên trong tiến trình Ruby của Zammad khi cấu hình của agent được kết xuất; không nội dung nào trong bản khuyến cáo, commit hay ghi chú phát hành mô tả việc mô hình tạo ra payload. Tính năng AI Agent cung cấp trường do quản trị viên có thể ghi và được xử lý bằng mẫu, còn AI là bề mặt chứ không phải cơ chế. Đó là kiểu mẫu mà bản ghi chỉ ra: định nghĩa agent — gồm hướng dẫn, mẫu và bộ lọc của nó — là cấu hình có thể thực thi, được chỉnh sửa bởi những người làm công việc hỗ trợ, chứ không phải đánh giá bảo mật.

Biện pháp khắc phục của Zammad là tương xứng và tẻ nhạt: thay đổi một phương thức, hai bài kiểm thử hồi quy, và một lần tăng phiên bản vá luôn mười bảy lỗ hổng khác cùng với lỗ hổng này. Phần đáng được ghi nhớ là mô hình phơi nhiễm. Một helpdesk cho phép trưởng nhóm hỗ trợ định nghĩa một nhân viên hỗ trợ cũng đồng thời cho phép trưởng nhóm đó viết ra thứ mà máy chủ sẽ thực thi, và thứ duy nhất đứng giữa hai điều này là một bộ lọc phải đúng với mọi bản sao lồng nhau của cú pháp mà nó loại bỏ.