Tác Tử AI Của Wiz Tìm Ra Lỗ Hổng Trong Kho Mã Snowflake — Và Cuộc Tranh Cãi Ai Đã Viết Ra Nó
Ngày 17/8/2026, Wiz công bố việc tác tử tự động Red Agent tìm và khai thác một lỗ hổng chèn lệnh trong workflow GitHub Actions của kho mã công khai snowflake-connector-net. Lỗ hổng chỉ sống 5 ngày. Phần gây tranh cãi là dòng đồng tác giả 'Copilot Autofix' trong commit — GitHub phản bác cách diễn giả
Một tác tử AI đi săn lỗ hổng đã tìm ra một lỗi nghiêm trọng trong kho mã công khai của Snowflake chỉ 5 ngày sau khi nó được đưa lên nhánh chính. Câu chuyện lẽ ra dừng ở đó. Nhưng một dòng "đồng tác giả" trong commit đã biến nó thành cuộc tranh cãi về việc AI có phải là thứ đã viết ra lỗ hổng hay không — và câu trả lời trung thực là: chưa ai chứng minh được.
Lỗ hổng là gì?
Kho mã snowflakedb/snowflake-connector-net là kho công khai trên GitHub. Trong đó có một workflow GitHub Actions tên jira_issue.yml, có nhiệm vụ tạo một ticket Jira mỗi khi ai đó mở issue mới trên kho.
Vấn đề nằm ở chỗ tiêu đề issue — nội dung do người ngoài nhập tuỳ ý — được ghép thẳng vào một câu lệnh shell mà không xử lý an toàn. Một tiêu đề chứa dấu nháy đơn đặt đúng chỗ có thể thoát khỏi chuỗi và khiến phần còn lại bị hiểu là lệnh. Hệ quả: một người dùng không cần đăng nhập, chỉ cần mở một issue, là có thể chạy lệnh tuỳ ý trên runner của GitHub Actions.
Đây là lớp lỗi script injection kinh điển trong GitHub Actions, và nó nguy hiểm vì runner thường mang theo token và biến bí mật.
Dòng thời gian: sống 5 ngày
| Mốc | Sự kiện |
|---|---|
| 18/6/2026 | PR #1218 được gộp vào nhánh chính, lỗ hổng bắt đầu có hiệu lực |
| 23/6/2026 | Wiz Red Agent phát hiện, khai thác thành công và báo cáo cho Snowflake |
| 23/6/2026 | Snowflake vá ngay trong ngày và xoay vòng lại thông tin xác thực |
| 17/8/2026 | Wiz công bố chi tiết vụ việc trên blog |
Token Jira bị lấy ra xác thực dưới danh nghĩa một tài khoản QA của Snowflake, cho quyền đọc các dự án kỹ thuật, tuân thủ an ninh và chương trình bug bounty. Snowflake tuyên bố cuộc điều tra của họ không tìm thấy bằng chứng về truy cập trái phép.
Tranh cãi: AI có viết ra lỗ hổng này không?
Đây là phần nhiều bản tin đã đơn giản hoá quá mức. Commit đưa lỗi lên nhánh chính có ghi "Copilot Autofix powered by AI" trong danh sách đồng tác giả. Từ đó, nhiều nơi kết luận rằng AI đã viết ra lỗ hổng.
Ba tiếng nói, ba mức độ khẳng định khác nhau — cần tách bạch:
- Wiz viết rằng Copilot là một đồng tác giả đã kiểm tra PR và thay đổi mã, rồi đánh giá là không có vấn đề mà không nhận ra lỗ hổng. Nhưng chính Wiz cũng nói rõ: "chưa rõ thay đổi mã này có phải do AI hỗ trợ hay không".
- GitHub phản bác cách diễn giải rằng Copilot Autofix đã viết ra đoạn mã lỗi.
- Lịch sử commit, theo tường thuật, cho thấy commit có ghi Copilot đồng tác giả đã sửa tệp jira_close.yml, trong khi đoạn refactor không an toàn ở jira_issue.yml xuất hiện ở một commit riêng biệt được GitHub gán cho một tài khoản người thật.
Nói cách khác: tiêu đề "AI viết ra lỗ hổng" hiện chưa được chứng minh, và ngay cả bên phát hiện cũng không khẳng định điều đó. Điều có thể nói chắc là: đoạn mã lỗi đã đi qua một quy trình có sự tham gia của công cụ AI và các bước kiểm tra tự động, mà vẫn lên được nhánh chính.
Chính Wiz tóm tắt bài học theo hướng này: lỗ hổng nghiêm trọng vẫn có thể được tạo ra và được phê duyệt trong các quy trình có tác tử lập trình AI tham gia, và vẫn vượt qua được các bước kiểm tra an ninh tự động đã thiết lập.
Đội kỹ thuật Việt Nam nên kiểm tra gì trong tuần này
Lớp lỗi này rất phổ biến và rất dễ tự kiểm tra. Nếu đội của bạn dùng GitHub Actions:
- Tìm mọi chỗ ghép dữ liệu do người ngoài nhập vào khối chạy lệnh. Tiêu đề issue, nội dung issue, tên nhánh, tiêu đề PR, nội dung bình luận — tất cả đều là dữ liệu không đáng tin.
- Đưa dữ liệu qua biến môi trường thay vì ghép chuỗi trực tiếp. Truyền giá trị vào biến môi trường rồi tham chiếu biến đó trong lệnh shell, thay vì nội suy thẳng vào câu lệnh — đây là biện pháp được GitHub khuyến nghị cho đúng lớp lỗi này.
- Siết quyền mặc định của token. Đặt quyền tối thiểu cho workflow và chỉ cấp thêm ở job thật sự cần.
- Cẩn trọng với workflow chạy trên sự kiện từ người ngoài. Các sự kiện do người không có quyền ghi kích hoạt cần được tách khỏi những job nắm giữ bí mật.
- Đừng coi bản vá do AI đề xuất là đã được thẩm định. Một gợi ý sửa lỗi tự động vẫn cần người đọc hiểu, đúng như vụ việc này minh hoạ — bất kể cuối cùng ai là người viết ra dòng mã.
Bài học chung không phải "đừng dùng AI để viết mã", mà là: trách nhiệm rà soát không chuyển giao được cho công cụ. Khi commit có thêm một đồng tác giả là máy, người phê duyệt vẫn là người chịu trách nhiệm.
Nguồn:
- Wiz — Red Agent exploits Snowflake vuln missed by GitHub Copilot (17/8/2026) — nguồn sơ cấp cho dòng thời gian, cơ chế lỗ hổng và phạm vi truy cập của token
- The Next Web — GitHub disputes Wiz's claim that Copilot Autofix wrote a Snowflake flaw — phản hồi của GitHub và đối chiếu lịch sử commit
- The Hacker News — Snowflake GitHub Actions flaw lets crafted issues trigger command injection — mô tả kỹ thuật lớp lỗi
- SC Media — Wiz agent finds Snowflake repo flaw in code co-authored by GitHub Copilot Autofix
Đồ hoạ: Locaith, dựng theo dòng thời gian trong công bố của Wiz — không phải hình ảnh chính thức của Wiz, Snowflake hay GitHub. Các mốc ngày và phạm vi truy cập của token lấy từ blog của Wiz. Việc quy trách nhiệm đoạn mã lỗi cho Copilot Autofix đang bị GitHub phản bác và chưa được xác lập; bài viết trình bày cả ba phía thay vì chọn một kết luận. Tổng hợp và phân tích bởi Ban Biên Tập Locaith, ngày 19/8/2026.