Chuỗi tấn công nhắm vào VS Code có thể đánh cắp GitHub token chỉ với một cú nhấp chuột

WhiteHat Team

Administrators
Thành viên BQT
09/04/2020
141
1.949 bài viết
Chuỗi tấn công nhắm vào VS Code có thể đánh cắp GitHub token chỉ với một cú nhấp chuột
Một cú nhấp chuột tưởng chừng vô hại trên github.dev có thể là khởi đầu cho việc mất quyền kiểm soát toàn bộ kho mã nguồn riêng tư trên GitHub. Đó là cảnh báo được nhà nghiên cứu bảo mật Ammar Askar đưa ra khi công bố chuỗi khai thác mới nhắm vào Visual Studio Code (VS Code) ngày 2/6/2026. Thay vì nhắm trực tiếp vào GitHub, chuỗi khai thác lợi dụng cơ chế WebView của VS Code và quy trình cấp token trên github.dev.
GitHub token.png

Từ một repository được chuẩn bị sẵn, kẻ tấn công có thể từng bước đánh cắp thông tin xác thực, cài đặt extension độc hại và trong một số trường hợp còn dẫn tới thực thi mã từ xa trên thiết bị của nạn nhân. Theo Askar, toàn bộ chuỗi khai thác có thể hoàn tất trong chưa đầy một phút, với điều kiện duy nhất là nạn nhân nhấp vào liên kết do kẻ tấn công kiểm soát. Sau thao tác ban đầu này, quá trình đánh cắp OAuth token và cài đặt extension độc hại có thể diễn ra hoàn toàn tự động.​

OAuth token trở thành mục tiêu hấp dẫn​

Github.dev là phiên bản VS Code hoạt động trực tiếp trên trình duyệt, cho phép người dùng chỉnh sửa mã nguồn mà không cần cài đặt phần mềm cục bộ. Để duy trì trải nghiệm đăng nhập liền mạch, GitHub tự động chuyển một OAuth token sang phiên làm việc trên github.dev khi người dùng mở repository bằng môi trường này.

Theo Ammar Askar, token được cấp không chỉ giới hạn trong repository đang được truy cập mà có thể được sử dụng với mọi kho mã mà tài khoản đang sở hữu hoặc được cấp quyền. Nếu token bị đánh cắp, kẻ tấn công có thể tiếp cận toàn bộ các repository riêng tư của nạn nhân thay vì chỉ một dự án đơn lẻ. Đây cũng là yếu tố khiến lỗ hổng trở nên đặc biệt nguy hiểm. Với các nhà phát triển hoặc doanh nghiệp đang quản lý nhiều dự án trên GitHub, việc mất quyền kiểm soát token có thể kéo theo nguy cơ lộ mã nguồn, sửa đổi repository trái phép và tạo tiền đề cho các cuộc tấn công chuỗi cung ứng phần mềm.

Tuy nhiên, để tiếp cận được token này, kẻ tấn công trước tiên phải vượt qua lớp cô lập bảo mật vốn được VS Code sử dụng để ngăn nội dung không đáng tin cậy truy cập vào các chức năng đặc quyền của trình soạn thảo.​

Điểm yếu nằm trong cơ chế WebView​

Để ngăn nội dung không đáng tin cậy ảnh hưởng đến các thành phần quan trọng của trình soạn thảo, VS Code hiển thị Markdown Preview và Jupyter Notebook bên trong WebView - một môi trường được thiết kế để hoạt động tách biệt với phần còn lại của ứng dụng. Tuy nhiên, sự tách biệt này vẫn tồn tại một "cầu nối". Để người dùng có thể tiếp tục sử dụng các phím tắt quen thuộc khi làm việc trong WebView, VS Code cho phép các thao tác bàn phím được chuyển tiếp tới cửa sổ chính của trình soạn thảo.

Theo Ammar Askar, chính cơ chế này đã tạo cơ hội cho chuỗi khai thác. Thay vì chờ người dùng nhấn phím thật, mã JavaScript bên trong WebView có thể tự tạo các tổ hợp phím giả mạo rồi gửi tới VS Code. Hệ thống sau đó xử lý những tín hiệu này như các thao tác hợp lệ từ người dùng, cho phép kẻ tấn công kích hoạt nhiều chức năng vốn không thể truy cập trực tiếp từ bên trong WebView.​

Chuỗi khai thác từ Jupyter Notebook đến đánh cắp token​

Chuỗi tấn công bắt đầu khi nạn nhân mở một repository hoặc tệp Jupyter Notebook đã được cài cắm mã độc. Thông qua các thành phần HTML được WebView xử lý, kẻ tấn công có thể thực thi JavaScript ngay bên trong môi trường hiển thị của VS Code. Từ đây, mã độc lợi dụng cơ chế chuyển tiếp sự kiện bàn phím để tạo các tổ hợp phím giả mạo, chờ thời điểm VS Code hiển thị thông báo đề xuất cài đặt extension rồi tự động kích hoạt hành động chấp nhận. Do các tín hiệu này được xử lý như thao tác hợp lệ từ người dùng, quá trình cài đặt có thể diễn ra mà nạn nhân không nhận thấy dấu hiệu bất thường.
1780471925914.png

Mã độc Javascript
Nguồn: Ammar Askar

Mục tiêu tiếp theo là đưa một extension độc hại vào môi trường làm việc của VS Code. Theo Ammar Askar, chuỗi khai thác có thể lợi dụng cơ chế keybinding để gọi hàm workbench.extensions.installExtension với tùy chọn skipPublisherTrust, qua đó bỏ qua bước xác thực nhà phát hành. Sau khi được cài đặt, extension sẽ truy cập OAuth token GitHub đã được nạp sẵn trong phiên làm việc, sử dụng token này để truy vấn GitHub API và thu thập danh sách repository mà nạn nhân được phép truy cập trước khi gửi dữ liệu về máy chủ do kẻ tấn công kiểm soát. Chỉ từ một notebook tưởng chừng vô hại, chuỗi khai thác đã có thể mở đường tới toàn bộ các kho mã gắn với tài khoản GitHub của nạn nhân.
1780471959760.png

Các đoạn mã Javascript được thực thi
Nguồn: Ammar Askar

Nguy cơ leo thang thành tấn công chuỗi cung ứng​

Một OAuth token bị đánh cắp có thể mở ra phạm vi truy cập rộng hơn nhiều so với repository ban đầu mà nạn nhân đang làm việc. Theo Ammar Askar, token này cho phép kẻ tấn công truy cập các kho mã riêng tư, tải xuống dữ liệu nội bộ, chỉnh sửa repository hoặc chèn mã độc vào các dự án đang được phát triển. Với những tổ chức sử dụng GitHub làm nền tảng quản lý mã nguồn trung tâm, đây là mắt xích có thể dẫn tới các cuộc tấn công chuỗi cung ứng, nơi mã độc được phát tán từ chính các dự án phần mềm hợp pháp.

Rủi ro còn mở rộng sang VS Code Desktop. Khi repository độc hại được mở trên máy tính của nạn nhân, extension được cài đặt thông qua chuỗi khai thác có thể truy cập trực tiếp các API Node.js, bao gồm mô-đun child_process để thực thi lệnh hệ điều hành. Từ một lỗ hổng ban đầu trên github.dev, kẻ tấn công có thể mở rộng phạm vi kiểm soát sang môi trường phát triển của nạn nhân và thực hiện các hành vi thực thi mã từ xa trên thiết bị mục tiêu.​

Khuyến nghị​

Tại thời điểm nghiên cứu được công bố, các biện pháp khắc phục vẫn chưa được triển khai đầy đủ. Vì vậy, các quản trị viên nên chủ động rà soát môi trường VS Code và GitHub của tổ chức, đồng thời áp dụng các biện pháp giảm thiểu rủi ro sau:Hạn chế mở các liên kết github.dev hoặc repository từ nguồn không xác thực.​
  • Rà soát và gỡ bỏ các extension không rõ nguồn gốc.​
  • Xóa dữ liệu cục bộ liên quan đến github.dev để kích hoạt lại cơ chế xác nhận cấp quyền.​
  • Hạn chế mở notebook hoặc dự án chưa được kiểm chứng trong các môi trường có quyền truy cập vào kho mã quan trọng.​
Theo Ammar Askar, những người chưa từng sử dụng github.dev hoặc đã xóa hoàn toàn dữ liệu phiên làm việc hiện vẫn được bảo vệ bởi cơ chế yêu cầu xác nhận trước khi OAuth token được cấp cho môi trường chỉnh sửa trực tuyến. Phát hiện lần này cho thấy ngay cả những cơ chế được thiết kế để tăng tính tiện dụng cũng có thể trở thành điểm tựa cho các chuỗi khai thác phức tạp khi được kết hợp theo những cách ngoài dự kiến.​
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
chuỗi khai thác extension độc hại github github.dev javascript jupyter notebook oauth token vs code webview
Bên trên