An ninh mạng
Copilot Autofix Đã Mở Lỗ Trình Đánh Mã Shell Trong Quy Trình CI/CD Của Snowflake

Một bản vá bảo mật được viết bởi Copilot Autofix của GitHub và được hợp nhất vào kho của Snowflake vào ngày 18 tháng 6 năm 2026 đã loại bỏ mẫu nhập đã được làm sạch và để lại quy trình CI/CD của công ty mở cho việc tiêm lệnh, và năm ngày sau, một tác nhân nghiên cứu AI tự động đã phát hiện lỗ hổng, khai thác nó, và lấy thông tin đăng nhập Jira hoạt động từ một runner của GitHub Actions, Wiz Research công bố vào ngày 17 tháng 8 năm 2026.
Lỗ hổng nằm trong jira_issue.yml, một workflow GitHub Actions trong snowflakedb/snowflake-connector-net, kho công khai cho bộ kết nối dữ liệu .NET của Snowflake. Workflow này được kích hoạt mỗi khi có ai đó mở một issue trên GitHub và chèn tiêu đề của issue (văn bản hoàn toàn do người tạo kiểm soát) trực tiếp vào một script shell. Vì trigger là issues: opened, bất kỳ tài khoản GitHub nào trên internet cũng có thể truy cập mà không cần xác thực.
“Red Agent” của Wiz, một công cụ nghiên cứu bảo mật tự động hoạt động thông qua chương trình bug bounty HackerOne của Snowflake, đã đánh dấu workflow này, xây dựng một exploit hoạt động, và trích xuất token API Jira từ môi trường của runner. Snowflake đã vá workflow ngay cùng ngày nhận được báo cáo, 23 tháng 6 năm 2026, quay vòng credential một ngày sau, và thông báo với Wiz rằng log kiểm toán của họ không cho thấy bất kỳ tác nhân nào khác đã chạm tới hệ thống bị lộ trong cửa sổ năm ngày.
“Autofix” Đã Loại Bỏ Bộ Làm Sạch
Commit giới thiệu mẫu có thể tiêm mã đã được đưa vào qua PR #1218, “SNOW-2069227: Update jira workflows”, hợp nhất vào ngày 18 tháng 6 năm 2026. Lịch sử pull request cho thấy một tác giả con người đã làm việc trên tự động hoá Jira từ tháng 8 năm 2025 — và, ở một phần nào đó, một commit đồng‑tác giả bởi Copilot Autofix powered by AI, bot GitHub Advanced Security tạo ra các đề xuất sửa lỗi cho cảnh báo quét mã.
Đề xuất của AI đã thay đổi cách workflow xử lý tiêu đề issue. Mã hiện tại truyền tiêu đề qua một biến env: và xây dựng payload JSON bằng jq --arg, một mẫu giữ văn bản không tin cậy ra khỏi shell. Đề xuất thay thế đã bỏ đi cách này và dùng mở rộng chuỗi trực tiếp:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
Việc thoát sed được thực hiện sau khi engine mẫu của GitHub đã thay thế tiêu đề vào script. Một dấu nháy đơn trong tiêu đề sẽ phá vỡ vòng bao echo '...', và mọi thứ sau đó sẽ được thực thi như shell. Tài liệu của GitHub về Copilot Autofix mô tả tính năng này như tạo “một đề xuất sửa duy nhất cho một cảnh báo, mà bạn tự xem xét và áp dụng” — bước xem xét chính là nơi đề xuất này đã lọt qua.
Workflow cũng chứa một điều kiện bảo vệ trông như thể nó hạn chế người có thể kích hoạt nó:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
Trong các sự kiện issue, github.event.pull_request luôn luôn null, vì vậy phép so sánh luôn luôn đúng. Mọi người dùng GitHub đều vượt qua được cổng.
Một Tác Nhân Ở Mỗi Bên Của Lỗ Hổng
Lần thử trích xuất dữ liệu đầu tiên của Red Agent đã thất bại. Payload của nó dùng ký tự chú thích # để nuốt phần còn lại của dòng đã tiêm, nhưng chú thích cũng ăn mất dấu ngoặc đóng của TITLE=$(...), và runner trả về lỗi cú pháp bash thay vì thực thi. Theo bản viết của Wiz, tác nhân đã phân tích lỗi, viết lại payload để đóng khối shell bằng ; echo ', và thử lại.
Payload hoạt động, được gửi dưới dạng tiêu đề issue, đã mã hoá base64 các biến môi trường JIRA_API_TOKEN, JIRA_USER_EMAIL, và JIRA_BASE_URL của runner và truyền chúng tới một listener bên ngoài qua curl. Cuộc gọi trả về đã đến từ một runner GitHub Actions được host trên Azure chỉ trong vài giây.
Token được khôi phục đã xác thực dưới danh tính qa@snowflake.net trên snowflakecomputing.atlassian.net, với quyền đọc trên toàn bộ các dự án kỹ thuật, tuân thủ bảo mật và theo dõi bug bounty của Snowflake.
Biện pháp khắc phục của Snowflake, được hợp nhất trong PR #1402 vào ngày 23 tháng 6 năm 2026, đã khôi phục lại biến env: an toàn và mẫu phân tích jq --arg. Token Jira đã bị thu hồi và quay vòng vào ngày 24 tháng 6 năm 2026. Wiz cho biết họ đã xóa an toàn toàn bộ dữ liệu đã truy cập trong quá trình thử nghiệm proof‑of‑concept.
“Snowflake đánh giá cao việc Wiz báo cáo có trách nhiệm và hợp tác xung quanh những phát hiện này thông qua chương trình công bố lỗ hổng và bug bounty, HackerOne,” công ty nói trong một tuyên bố được công bố cùng báo cáo của Wiz. “Báo cáo đã được nhận vào ngày 23 tháng 6 năm 2026, ngay lập tức được điều tra và khắc phục, và cuộc điều tra của chúng tôi không phát hiện bằng chứng nào về việc truy cập trái phép.”
Cửa sổ năm ngày cho thấy gì
Thông tin công bố nằm giữa một mẫu đã được ghi nhận: các thay đổi hỗ trợ AI di chuyển qua quá trình xem xét nhanh hơn so với các giả định bảo mật xung quanh chúng. Các log kiểm toán của Snowflake là những gì làm cho sự cố này có thể hiểu được: chúng cho phép công ty khẳng định, và Wiz xác nhận, rằng cửa sổ phơi bày không tạo ra bất kỳ truy cập của bên thứ ba nào. Phân tích log kiểm toán của Snowflake đã xác nhận không có bên thứ ba nào bên ngoài truy cập vào endpoint trong cửa sổ năm ngày.
Timeline cũng nén một chuỗi sự kiện mà ngành công nghiệp thường xem là giả thuyết. Một trợ lý lập trình đã loại bỏ một mẫu phòng thủ được đặt ra đặc biệt để ngăn chặn tiêm shell, vì trợ lý không có bản ghi về lý do mẫu đó tồn tại. Một tác nhân tấn công sau đó đã tìm ra và vũ khí hoá kết quả trong vòng vài ngày, tự điều chỉnh exploit dựa trên đầu ra lỗi trực tiếp. Bên tấn công đã chạy mà không có con người nào ở bàn phím; ở phía lập trình, AI đã tạo ra thay đổi nhưng con người đã áp dụng đề xuất và hợp nhất — chính là bước xem xét đã thất bại.
Báo cáo của Wiz đề xuất rằng các pull request do AI tạo ra nên trải qua cùng một phân tích tĩnh như mã do con người viết, các đội nên rút ngắn thời gian sống của credential để phù hợp với tốc độ khám phá tự động, và các rào chắn nên ngăn chặn các tác nhân thay thế các bộ phân tích có cấu trúc bằng việc chèn chuỗi trực tiếp. Check Point đã chuyển việc kiểm tra prompt cho lưu lượng AI vào tường lửa doanh nghiệp vào đầu mùa hè này, và Unite.AI đã đề cập đến việc thoát sandbox của tác nhân và các hệ thống agentic đạt được mục tiêu sản xuất thực tế khi phía tấn công ngày càng trưởng thành. Sự cố Snowflake là cùng một câu chuyện được kể từ bên trong một pipeline CI: lỗ hổng đã tồn tại trong năm ngày, và lý do duy nhất khiến nó được xem như một nghiên cứu trường hợp thay vì thông báo vi phạm là tác nhân nào đã đến trước.












