Các tệp cấu hình có thể chạy mã: Điểm mù nguy hiểm trong bảo mật chuỗi cung ứng phần mềm

08 tháng 6, 2026·5 phút đọc

Chỉ cần clone một kho chứa và mở trong trình soạn thảo, mã độc của tin tặc có thể được thực thi ngay lập tức thông qua các tệp cấu hình có vẻ vô hại. Bài viết phân tích sâu về lỗ hổng bảo mật chuỗi cung ứng này và chiến thuật của sâu Miasma nhằm vào các tác nhân AI và IDE phổ biến.

Các tệp cấu hình có thể chạy mã: Điểm mù nguy hiểm trong bảo mật chuỗi cung ứng phần mềm

Các tệp cấu hình có thể chạy mã: Điểm mù nguy hiểm trong bảo mật chuỗi cung ứng phần mềm

Việc sao chép (clone) một kho chứa mã nguồn và mở nó trong trình soạn thảo có thể giúp tin tặc thực thi mã trên máy của bạn trước khi bạn đọc được bất kỳ dòng code nào. Nguyên nhân không phải là một thư viện phụ thuộc độc hại hay một cài đặt script ẩn, mà chính là những tệp cấu hình (config files) có vẻ bình thường đang nằm sẵn trong repo.

Các công cụ như VS Code, Cursor, Claude Code, Gemini CLI, npm, Composer và Bundler đều hỗ trợ các tệp cấu hình có thể mang theo các lệnh shell. Một số công cụ chạy các lệnh này khi cài đặt dependencies hoặc chạy kiểm thử (test), nhưng những công cụ khác lại kích hoạt ngay khi thư mục được mở hoặc khi phiên làm việc của tác nhân AI bắt đầu.

Trong phần lớn các trường hợp, điều này diễn ra sau một hộp thoại yêu cầu tin cậy (trust prompt) mà các nhà phát triển thường bấm qua mà không đọc kỹ. Một tệp cấu hình có khả năng chạy lệnh thực chất là một yếu tố thực thi (execution primitive), không chỉ đơn thuần là metadata, và những kẻ tấn công chuỗi cung ứng đã bắt đầu khai thác chúng. Rất ít người xem xét kỹ các tệp này, tạo ra một điểm mù nghiêm trọng trong bảo mật.

vector tấn công config injectionvector tấn công config injection

Cơ chế hoạt động và các vector tấn công

Mặc dù các bản quét phụ thuộc (dependency scans) thường phát hiện ra các gói npm độc hại, chúng thường bỏ qua các tệp cấu hình của trình soạn thảo hoặc hệ thống xây dựng. Ví dụ, tệp tasks.json của VS Code có thể được thiết lập để chạy một lệnh khi bạn nhấn nút "Build", hoặc .cursor/rules có thể chứa các lệnh được thực thi khi dự án được mở.

Các tác nhân lập trình AI hiện nay cũng tự động đọc và thực hiện các tệp này để thiết lập môi trường làm việc. Điều này tạo ra một bề mặt tấn công mới nơi mã độc có thể được kích hoạt mà không cần sự can thiệp thủ công của nhà phát triển, chỉ đơn giản là họ "mở" dự án.

Chiến dịch sâu Miasma

Một ví dụ điển hình về vector tấn công này là sâu máy tính Miasma. Một cam kết (commit) cụ thể (f72462d9) trong kho icflorescu/mantine-datatable đã được ký không chính thức, giả danh github-actions với tiêu đề "chore: update dependencies [skip ci]". Commit này thêm vào sáu tệp.

Sâu Miasma trên GitHubSâu Miasma trên GitHub

Năm trong số sáu tệp này tồn tại để kích hoạt tệp thứ sáu — một tệp dropper (tải mã độc) duy nhất tại .github/setup.js với kích thước 4.348.254 byte. Kích thước lớn này không phải là dữ liệu thừa; nó chứa payload đã được mã hóa và được thiết kế để vượt quá giới hạn ~384 KB nơi GitHub Code Search ngừng lập chỉ mục.

Do đó, các tệp khởi chạy nhỏ hơn sẽ lộ diện trong tìm kiếm, trong khi tệp dropper lớn nằm ẩn. Tệp này sử dụng eval để giải mã và thực thi mã độc, đánh cắp thông tin xác thực từ máy của nạn nhân.

Phát hiện và Phòng chống

Vì các tệp cấu hình này là một phần của bề mặt tấn công của repo, quy trình phát triển phần mềm (SDLC) cần xem xét chúng như code thực thụ.

Cách phát hiện

Một số quy tắc grep đơn giản có thể giúp phát hiện các mẫu tấn công phổ biến:

  1. Tìm kiếm các cuộc tấn công Miasma cụ thể trong tệp package.json.
  2. Tìm kiếm các hành vi tự động chạy (auto-run) trong Gemfile hoặc các tệp cấu hình khác bằng cách tìm các lệnh shell như system hoặc exec.

Ví dụ lệnh kiểm tra:

grep -nE '\"postinstall\"[[:space:]]*:' package.json
grep -nE '^[[:space:]]*(system|exec|`)' Gemfile

Giải pháp sâu xa

Giải pháp căn cơ là coi các tệp cấu hình của trình soạn thảo và trình quản lý gói là một phần của Cơ sở tính toán tin cậy (Trusted Computing Base - TCB).

  • Một hook SessionStart thực chất là một script postinstall dành cho trình soạn thảo.
  • Tệp .cursor/rules có thể là một dạng prompt injection được vận chuyển ngay trong repo.

Cả hai đều chạy với quyền cấp của nhà phát triển và không xuất hiện trong các bản quét phụ thuộc truyền thống. Nếu bạn đã mở hoặc tin tưởng một trong các kho chứa bị nhiễm, hãy coi máy tính của mình đã bị lộ và cần xoay vòng (rotate) các thông tin xác thực như token GitHub, npm, và các khóa AWS, Azure, hoặc GCP.

Việc phát hiện vấn đề này cũng nan giải như việc phát hiện các thư viện độc hại, nhưng được áp dụng trên một tập hợp tệp rộng lớn hơn. Quét lockfile có thể bắt được một gói bị độc hại, nhưng nó không bắt được một tệp tasks.json bị nhiễm. Các công cụ bảo mật cần mở rộng phạm vi quét sang các bề mặt cấu hình mới này của trình soạn thảo và tác nhân AI.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗