Nhà nghiên cứu bảo mật của Snyk phát tán gói NPM độc hại nhắm vào Cursor.com
(sourcecodered.com)- Nhiều gói được đưa lên npm chứa script cài đặt có vẻ nhắm vào Cursor.com, và khi cài đặt sẽ gửi thông tin hệ thống đến một dịch vụ web bên ngoài
- Người phát tán là người dùng npm sn4k-s3c, sử dụng các tên gợi nhớ đến gói nội bộ của Cursor như
cursor-retreival,cursor-always-local,cursor-shadow-workspace - Đầu ra
envmà các gói lấy đi có thể chứa biến môi trường nhạy cảm như khóa AWS, token npm, thông tin xác thực GitHub, nên phạm vi ảnh hưởng có thể lớn - OpenSSF package analysis scanner đã xác định các gói này là độc hại, và OSV đã tạo 3 cảnh báo MAL-2025-27, MAL-2025-28, MAL-2025-29
- Trong metadata npm, email snyk.io của Snyk Security Labs xuất hiện là nhà phát hành, sau đó nhà nghiên cứu của Snyk đã gỡ các gói xuống và Snyk phản hồi bằng một bài blog
Các gói npm có vẻ nhắm vào Cursor
- Trong quá trình phát hiện gói độc hại của SourceCodeRed, nhiều gói được tải lên npm đã được phát hiện
- Tên gói có dạng gợi nhớ đến các gói nội bộ liên quan đến Cursor
cursor-retreivalcursor-always-localcursor-shadow-workspace
- Người phát tán được hiển thị là người dùng npm sn4k-s3c
- Danh sách gói được cho là có thể xem tại
https://www.npmjs.com/~sn4k-s3c
Hành vi được thực hiện khi cài đặt
- Khi cài gói, dữ liệu hệ thống sẽ bị thu thập và gửi đến dịch vụ web do kẻ tấn công kiểm soát
- Theo ảnh chụp màn hình, gói lấy đầu ra của lệnh
env - Đầu ra
envcó thể bao gồm các biến môi trường nhạy cảm cùng với cấu hình hệ thống- khóa AWS
- token npm
- thông tin xác thực GitHub
- các biến môi trường nhạy cảm khác
- Kết quả là chỉ cần cài đặt cũng có thể khiến thông tin môi trường cục bộ bị rò rỉ ra bên ngoài
Khả năng dependency confusion và kết quả phát hiện
- Những gói kiểu này thường xuất hiện trong các cuộc tấn công dependency confusion nhắm vào một công ty cụ thể
- Chưa xác nhận được liệu Cursor.com có chương trình bug bounty hay bối cảnh cụ thể nào khác hay không
- SourceCodeRed nghi ngờ Cursor có thể đang dùng các gói npm riêng tư như
cursor-always-local,cursor-retrieval,cursor-shadow-workspace - Kẻ tấn công có thể đã kỳ vọng nhân viên Cursor vô tình cài gói công khai và gửi dữ liệu đi
- OpenSSF package analysis scanner đã xác định các gói này là độc hại, và OSV đã tạo 3 cảnh báo mã độc
-
MAL-2025-27
-
MAL-2025-28
- MAL-2025-29
- Danh sách OSV liên quan có tại
https://osv.dev/list?q=cursor&ecosystem=npm
-
Metadata của nhà phát hành
- Trong metadata gói npm, nhà phát hành dùng địa chỉ email snyk.io của đội Snyk Security Labs
- Metadata email nhà phát hành này được mô tả là phần không thể bị giả mạo
- Trường
authornêu đích danh một nhân viên Snyk - Trường
authorcó thể bị giả mạo, nhưng vì nhà phát hành dùng email Snyk đã được xác minh nên có suy đoán rằng gói thực sự xuất phát từ Snyk
Phản ứng của người dùng và cập nhật sau đó
- SourceCodeRed cho biết đã báo cho npm, nhưng vào thời điểm đó các gói vẫn chưa bị đánh dấu là độc hại
- Nhiều công cụ bảo mật chuỗi cung ứng phần mềm chỉ có thể chặn khi chúng biết gói đó là độc hại
- Khuyến nghị là không cài các gói npm một cách vô điều kiện
- Các gói này chỉ chứa hai tệp là
package.jsonvàindex.jshoặcmain.js, đây có thể được xem là một dấu hiệu đáng ngờ - Theo cập nhật ngày 15/01/2025, nhà nghiên cứu của Snyk đã gỡ các gói liên quan đến Cursor xuống vào ngày sau khi bài blog được công bố
- Ngày 14/01/2025, The Register đã đăng bài liên quan:
https://www.theregister.com/2025/01/14/snyk_npm_deployment_removed/ - Cùng ngày, Snyk đã đăng phản hồi trên blog và khẳng định theo hướng rằng họ không làm gì sai:
https://snyk.io/blog/snyk-security-labs-testing-update-cursor-com-ai-code-editor/
1 bình luận
Ý kiến trên Hacker News
[Chỉnh sửa: Xem phản hồi của nhà phát triển Cursor bên dưới thì có vẻ không phải Cursor phê duyệt việc này] Nghe như bên trong Cursor có một NPM registry riêng tư chứa các gói đó, và do cách NPM hoạt động nên kẻ tấn công dễ lừa để lấy gói cùng tên từ registry công khai
Có lẽ một nhân viên Snyk đã phát hiện hoặc nghi ngờ rằng một phần bản build của Cursor bị cấu hình sai theo kiểu này, nên đã đăng gói lên như một bằng chứng khái niệm. Nhìn mô tả gói là “for Cursor” nên tôi tưởng họ được thuê cho mục đích này
Nếu vậy thì cũng không có gì quá lớn; nếu trọng tâm là cho thấy cấu hình sai khiến bỏ qua registry riêng tư, thì nhà nghiên cứu bảo mật hẳn không thể dùng NPM registry riêng tư cho bằng chứng khái niệm được
Đặc biệt, nhiều proxy sẽ chọn registry công khai thay vì registry riêng tư nếu phiên bản gói mới nhất ở đó cao hơn: https://snyk.io/blog/detect-prevent-dependency-confusion-att...
Chúng tôi xử lý theo cùng cách với VS Code: https://github.com/microsoft/vscode/tree/main/extensions
Chúng tôi không thuê Snyk; sau khi thấy việc này và liên hệ với họ, chúng tôi đã nhận được lời xin lỗi. Chúng tôi chưa được xác nhận chính xác họ định làm gì, nhưng lời giải thích rằng ai đó nghi ngờ có lỗ hổng dependency confusion nghe có vẻ hợp lý. Tuy vậy, việc thực sự gửi biến môi trường từ NPM công khai là khá vô trách nhiệm theo tôi
env, sẽ là vấn đề lớn với hầu hết mọi ngườiThú vị là đồng sáng lập Snyk đã khởi nghiệp một công ty cạnh tranh với Cursor
https://www.tessl.io/ https://techcrunch.com/2024/11/14/tessl-raises-125m-at-at-50...
Hy vọng là không có hành vi gian lận nào
Có vẻ từ giờ mọi hoạt động phát triển phần mềm cần được làm nghiêm túc bên trong máy ảo. Mỗi dự án một VM. Có quá nhiều cách tinh vi để tôi có thể vô tình mắc lỗi mà làm hỏng bảo mật lúc nào không hay. Điều an ủi duy nhất là tôi chỉ là kẻ vô danh, không có bí mật hay tài sản gì để bị đánh cắp
Chúng ta đang đặt niềm tin mù quáng vào quá nhiều mã: IDE, plugin, tiện ích phát triển, thư viện ngôn ngữ, gói hệ điều hành, v.v.
Ở một nơi tôi từng làm vài năm trước, họ cấm dùng trình duyệt web và công cụ phát triển trên laptop. Nếu cần trình duyệt thì phải dùng qua Citrix, nếu cần viết code thì phải dùng VDI hoặc chạy công cụ bên trong VM
Lúc đó cách làm ấy trông gần như điên rồ, nhưng tôi ngày càng hiểu ra
NVIDIA khóa tính năng GPU ảo hóa sau các card enterprise, nên rốt cuộc phải dựa vào việc chuyển đổi lệnh không mấy hiệu quả
Hầu hết overhead khác của VM thì còn chịu được, nhưng GUI giật và không phản hồi có tác động xấu đến công thái học hơn ta tưởng, và kỳ lạ là còn kéo tụt cả các hiệu năng khác
Nếu vấn đề này được giải quyết, dù chỉ trong trường hợp ảo hóa Linux trên Linux, thì lựa chọn ảo hóa mọi thứ sẽ thực tế hơn nhiều
Cụ thể là tôi đang chuyển môi trường phát triển Go và Zig từ một máy Mac cũ sang Asahi Linux trên M1, và đã loay hoay ngay từ việc tìm thứ thay thế TrueCrypt và Little Snitch. Các công cụ VM kiểu này có hỗ trợ VM được mã hóa và quy tắc tường lửa không? Ở đây có nhắc đến Vagrant và có vẻ nó giải quyết phần nào việc cô lập mạng, nhưng ngoài ra còn có thể khuyến nghị gì?
VM có thể bảo vệ tôi, nhưng không bảo vệ người dùng phần mềm mà tôi tạo ra. Làm sao tôi có thể gửi cho khách hàng một sản phẩm mà chính tôi phải mặc đồ bảo hộ mới dám chạm vào, rồi kỳ vọng họ dùng nó an toàn mà không có bảo vệ?
Môi trường tôi mong muốn không phải như vậy
Giải pháp hiện tại là cực kỳ khắt khe khi chọn phụ thuộc. Cụ thể hơn, tôi nghĩ không nên tin dự án hay công ty, mà chỉ nên tin con người. Không dễ, nhưng hiện tại tôi chưa thấy lựa chọn nào tốt hơn
Tôi ghi các bind filesystem vào một file dot đơn giản theo từng dự án, và khi mở terminal mới trong lúc làm việc thì nó tự động được cô lập theo file dot đó. Gánh nặng nhận thức rất thấp và tích hợp gần như liền mạch. Tôi đoán nhiều lập trình viên cũng có script tương tự. Trước đây tôi từng tìm một dự án như vậy nhưng không thấy; không rõ là vì nó quá đơn giản nên chẳng có gì để biến thành dự án, hay vì tôi không biết người khác gọi nó là gì. Nếu có thứ gì đáng tham khảo thì tốt quá
Tôi không hạn chế truy cập mạng. Tôi từng thử ghi lại toàn bộ lưu lượng và tự động thiết lập proxy man-in-the-middle, nhưng nó chưa đủ tiện để dùng như người dùng bình thường. Tất nhiên bề mặt tấn công kernel vẫn còn. Tuy vậy mối lo chính của tôi là file bị đọc hoặc bị phá hủy
Phần tôi không đồng ý trong bài là đoạn: “Không nên cài đặt mù quáng các gói NPM, và có những tín hiệu để xem gói có đáng ngờ không. Các gói này chỉ có hai file là
package.jsonvàindex.jshoặcmain.js, nên đó là một trong các cờ để đánh giá có bình thường hay không”Điều này có thể phần nào đúng với gói cấp cao nhất, nhưng gần như không thể kiểm tra toàn bộ phụ thuộc bắc cầu
Nếu kéo về một gói có 400 phụ thuộc, làm sao kiểm tra tử tế được dù chỉ 10% bề mặt đó? https://gist.github.com/anvaka/8e8fa57c7ee1350e3491#top-1000...
id_rsa— có thể được giải quyết khá tốtSnyk cũng là công ty không xoay vòng khóa công khai mà cứ đổi cái rụp không báo trước: https://github.com/snyk/cli/pull/5649
Nếu một dự án chuyển sang dịch vụ lưu trữ repository khác không phải GitHub, họ gắn nhãn “abandoned”, và dù có bản phát hành mới trên npm/PyPI thì nó vẫn tiếp tục bị coi là dự án bị bỏ rơi
Tôi không nghĩ năng lực của họ lớn như danh tiếng
Ngoài ra một nhân viên sales của Snyk đã xúc phạm tôi qua email. Có vẻ việc tôi không quan tâm đến mua sản phẩm đồng nghĩa với chuyện tôi là một developer kém cỏi chỉ biết dùng phần mềm đầy lỗ hổng
Trông giống kiểu phần mềm hoàn toàn ngược đời mà doanh nghiệp mua chỉ vì công ty bảo hiểm bắt điền các mục trong checklist bảo mật
Codeberg trông khá thú vị, và nếu cáng đáng được việc bảo trì thì các lựa chọn tự host như Forejo cũng có vẻ tốt
Tôi chưa nghe nhiều về Snyk ngoài chuyện họ khá kiêu, nhưng đây là một góc nhìn khá thú vị
Nếu không có thêm bối cảnh thì phía Snyk trông cũng không ổn. Điều đó có nghĩa là nhân viên đã dùng NPM để thử nghiệm dịch vụ của chính công ty trong môi trường thực, hoặc khi thực hiện một cuộc kiểm toán hợp pháp đối với Cursor thì thiếu kiểm soát và quy trình để tránh dùng tài nguyên công khai
Trông giống một cuộc kiểm toán white-hat của Snyk. Có vẻ bị phát hiện vì
oastify.comlà máy chủ mặc định của Burp CollaboratorLẽ ra bài kiểm thử phải dùng kho npm riêng tư, và ghi đè cục bộ cũng không khó. Họ cũng nên dùng máy chủ Collaborator riêng
console.log, làmnpm installthất bại, hoặc dùng cách không trích xuất payload là đủCó vẻ NPM đang tạo ra việc làm cho ngành bảo mật. Đó là một mớ hỗn độn không thể sửa, và tôi hy vọng các đối thủ như JSR sẽ tạo đủ áp lực lên tổ chức này
Ngược lại, các quy định như DORA và NSIS nhiều khả năng sẽ ngày càng yêu cầu kiểm toán gói bên thứ ba. Điều này sẽ buộc các ngành quan trọng phải thay đổi cách phát triển. Ngoài ra, trong kỷ nguyên LLM, tôi cho rằng việc dùng gói bên ngoài sẽ giảm đi rất nhiều. Vì sao phải kéo một gói bên ngoài về chỉ để làm những việc như tạo đặc tả OpenAPI? Chỉ cần một hai giờ cấu hình, LLM có thể viết cho bạn script CLI cần thiết. Tương tự, ngay cả khi không dùng LLM để tự động sinh trực tiếp các phần mã nhàm chán, bạn có thể nhờ nó tạo công cụ CLI làm việc đó. Khi đó bạn không phải phụ thuộc vào yếu tố bên ngoài; gần như chắc chắn các công cụ CLI đó sẽ là thứ code kiểu cao bồi lộn xộn, nhưng đầu ra có thể được tinh chỉnh bằng cách cải thiện công cụ để ra đúng dạng mong muốn
Nhìn vào những ngôn ngữ như Go, vốn nhồi những thứ cần thiết vào các gói chuẩn, có thể thấy một thế giới nơi chỉ với thư viện chuẩn cũng làm được rất nhiều việc một cách rất dễ dàng
Hơi lạc đề, nhưng có ai từng nhận được SBOM đúng nghĩa cho chính các công cụ và dịch vụ của Snyk chưa? Tôi hỏi vì họ đang cố bán cho công ty tôi một giải pháp tạo SBOM
Có trả tiền tôi cũng không nghĩ mình sẽ cài. Unit 8200 liên tục sản sinh nhà sáng lập và rót vốn cho họ, khiến tôi có cảm giác như NSA đã đặt được một chân vào trong cửa
Snyk Research Labs thường xuyên đóng góp cho cộng đồng thông qua việc thử nghiệm và nghiên cứu các gói phần mềm phổ biến. Nghiên cứu Cursor lần này không có ý đồ ác ý, và các gói có kèm thông tin liên hệ của Snyk Research Labs cũng như nhà nghiên cứu. Chúng tôi đang xem xét rất cụ thể hiện tượng dependency confusion trong một số extension VS Code, và các gói đó không phải thứ mà nhà phát triển sẽ tự cài đặt
Snyk tuân theo chính sách công bố có trách nhiệm. Không ai lấy các gói này, nhưng nếu có ai đó lấy, chúng tôi đã lập tức có hành động tiếp theo
Cách phản ứng nghe như gửi thư xin lỗi đến đám tang của người bị trúng. Dù là “ý định tốt”, nếu bạn xâm phạm thông tin xác thực thì người đó đã bị xâm phạm rồi, và phải phản ứng y như khi bị một kẻ tấn công ác ý tấn công
Chuyện này gần đến mức khó cảm nhận được khác biệt với hành vi ác ý
Thêm nữa, mọi người cũng nên nhớ rằng một bên liên quan của Snyk hiện đang chuẩn bị ra mắt sản phẩm cạnh tranh với Cursor. Điều này khiến việc giả định thiện chí khó hơn rất nhiều
envcủa mìnhHơn nữa, vì có xung đột lợi ích với một sản phẩm cạnh tranh Cursor, họ càng phải cẩn trọng hơn. Cả việc ra quyết định lẫn cách phản hồi đều tệ