- Các phiên bản 2.6.2 và 2.6.3 của framework deep learning
lightningđã bị lợi dụng trong một cuộc tấn công chuỗi cung ứng — chỉ cần chạypip install lightninglà payload JavaScript bị làm rối trong thư mục_runtimesẽ tự động thực thi - Đây là framework được dùng rộng rãi để xây dựng bộ phân loại hình ảnh, fine-tune LLM, mô hình khuếch tán, dự báo chuỗi thời gian, v.v., nên rất có thể đã nằm sẵn trong cây phụ thuộc của nhiều đội AI/ML
- Khi mã độc chạy, nó quét hơn 80 đường dẫn trong hệ thống tệp cục bộ để đánh cắp GitHub token (
ghp_,gho_), npm token (npm_), biến môi trường và bí mật đám mây, xử lý tối đa 5MB cho mỗi tệp - Nhắm vào cả 3 nhà cung cấp đám mây lớn, gồm AWS (tệp thông tin xác thực, IMDSv2, ECS, Secrets Manager, SSM), Azure (Key Vault) và GCP (Secret Manager), để liệt kê và lấy bí mật
- Trong môi trường GitHub Actions, nó dùng Python tích hợp sẵn để dump bộ nhớ tiến trình
Runner.Worker, trích xuất mọi bí mật được đánh dấu"isSecret":truecùng thông tin repository và workflow - Điểm xâm nhập là PyPI (Python), nhưng sự lây lan kiểu sâu được phát tán qua npm (JavaScript) — dùng npm token đã đánh cắp để chèn dropper (
setup.mjs) và mã độc (router_runtime.js) vào mọi package có thể publish, tăng patch version rồi phát hành lại, từ đó lây nhiễm dây chuyền tới máy của các lập trình viên cấp dưới cài các package đó - Việc rò rỉ dữ liệu dùng đồng thời 4 kênh song song để không thể bị chặn chỉ bằng một đường truyền: ① gửi tới máy chủ C2 qua HTTPS POST, ② dead drop qua GitHub Commit Search API (chèn token được mã hóa Base64 kép vào commit message), ③ commit dưới dạng
results-<timestamp>.jsonvào các repository GitHub công khai mang tên theo thế giới Dune, ④ push trực tiếp vào repository của nạn nhân - Sau khi xâm nhập repository, nó cài hook duy trì trong các công cụ phát triển để bảo đảm tái lây nhiễm — ghi hook
SessionStartvào.claude/settings.jsoncủa Claude Code để tự động chạy khi bắt đầu phiên, và chèn tác vụrunOn: folderOpenvào.vscode/tasks.jsoncủa VS Code để chạy mỗi khi mở thư mục- Cả hai hook đều gọi dropper tự chứa
setup.mjs; nếu không có runtime Bun, nó sẽ âm thầm tải từ GitHub và chạy payloadrouter_runtime.jsdung lượng 14.8MB
- Cả hai hook đều gọi dropper tự chứa
- Nếu lấy được GitHub token có quyền ghi, nó sẽ push một workflow ngụy trang tên
Formattervào repository của nạn nhân — dump bí mật repository ở mọi lần push bằng${{ toJSON(secrets) }}rồi tải lên dưới dạng Actions artifact - Mọi máy đã cài các phiên bản này trong khoảng thời gian bị ảnh hưởng đều phải được coi là đã bị xâm phạm hoàn toàn; cần lập tức thay GitHub token, thông tin xác thực đám mây, API key, và kiểm tra các thư mục
.claude/cùng.vscode/xem có tệp bất thường hay không - Chỉ dấu tấn công: commit message có tiền tố
EveryBoiWeBuildIsAWormyBoi, mô tả repository có"A Mini Shai-Hulud has Appeared", hoặc sự hiện diện của thư mục_runtime/trong repository — có thể tự kiểm tra trực tiếp qua tìm kiếm trên GitHub
2 bình luận
Giờ thì có vẻ không nên cập nhật nữa...
Ý kiến Hacker News
Có thể chỉ là ảo giác về tần suất, nhưng dạo gần đây có vẻ xuất hiện khá nhiều cuộc tấn công chuỗi cung ứng đình đám trong các gói quan trọng
Ngay ở vài trang đầu của HN lúc này cũng có nhiều bài nói về các trường hợp khác nhau
Nhìn lại
left-padcủa 10 năm trước, tôi tự hỏi liệu bây giờ số vụ tấn công thành công có nhiều hơn trước không, và có lẽ là cóGiá trị của các vụ tấn công thành công chắc chắn cũng đã tăng lên, nhưng tôi tự hỏi liệu khả năng phát hiện trước khi phát hành gói có thực sự đang cải thiện trên bình diện toàn cộng đồng hay không
Các công ty phần mềm thương mại tất nhiên phải làm tốt hơn, nhưng có vẻ vẫn còn thiếu những công cụ phổ quát và dễ dùng cho các trường hợp bắt đầu từ mã hobby/nghiệp dư rồi trở thành phụ thuộc của rất nhiều dự án
Tôi cũng đã đăng bình luận này trong thread về vụ tấn công chuỗi cung ứng SAP hiện tại: https://news.ycombinator.com/item?id=47964003
Trước đây, người ta thường chạy
npm installthủ công hơn, có lẽ chỉ khi build bị hỏng hoặc rất thỉnh thoảng mới chạyTấn công chuỗi cung ứng dựa vào việc con người, hay chính xác hơn là pipeline, tự động cập nhật gói ngay khi có bản phát hành mới mà không cần suy nghĩ
Tôi không biết đó có phải mô hình kinh doanh tốt không, và có lẽ là không
left-padkhông phải là một cuộc tấn công mà là lỗi của NPMKhông đáng lẽ phải có chuyện xóa được phiên bản gói mà các gói công khai khác đã phụ thuộc vào, và ngược lại thì phải cho phép xóa một phiên bản gói mới mà chưa ai phụ thuộc vào
Khi tác giả
left-padmuốn xóa toàn bộ dữ liệu với ý định rời bỏ dịch vụ, NPM đáng lẽ phải trả về mã lỗiTheo Wikipedia, khi Koçulu thất vọng với quyết định của npm, Inc. và nói rằng không muốn tiếp tục là một phần của nền tảng, Schlueter, tác giả NPM, đã cung cấp lệnh để xóa 273 module mà ông ấy đã đăng ký
Điều kỳ lạ là đã có 4 issue bảo mật được mở lên nhưng tất cả đều bị bot
pl-ghosttự động bình luận rồi đóng lại [1][2][3][4]Cuối cùng chỉ có [4] được xử lý đúng cách và toàn bộ bình luận của bot đều bị xóa
Ở báo cáo khác [5] vẫn có thể thấy bình luận của bot, và nó còn cung cấp nhiều thông tin hơn cả bài gốc
[1] https://github.com/Lightning-AI/pytorch-lightning/issues/216...
[2] https://github.com/Lightning-AI/pytorch-lightning/issues/216...
[3] https://github.com/Lightning-AI/pytorch-lightning/issues/216...
[4] https://github.com/Lightning-AI/pytorch-lightning/issues/216...
[5] https://socket.dev/blog/lightning-pypi-package-compromised
Kẻ tấn công đã dùng tài khoản này để tạo workflow Actions mới, rồi từ workflow đó parse và lấy trộm secret PyPI
Sau khi phát hành gói, hắn còn dùng tài khoản đó để bình luận, kiểu như chế nhạo chúng tôi một chút
Tôi thật sự mong ngày không còn phụ thuộc nào sẽ sớm đến
Lấy ví dụ cực đoan, gần đây khi làm ứng dụng giáo dục tương tác cho con gái, tôi bảo Opus chỉ dùng JavaScript và HTML thuần
Từ con lắc kép đến mô phỏng chất lưu đều chạy tốt trong một lần, trong khi trước đây sẽ kéo theo hàng trăm phụ thuộc
Nếu là mã giấy phép MIT, tôi còn có thể bảo Opus trích đúng phần cần thiết, sửa cho phù hợp với mục đích của tôi rồi nhúng luôn vào
Với các dự án hobby thì đến giờ cách này hoạt động tốt, và tôi hy vọng sau này cả phần mềm production cũng có thể bớt phụ thuộc
Nếu Chrome thay đổi hình dạng của một API nào đó thì bạn phải tự đi tìm và sửa, còn nếu Morocco đổi thời điểm bắt đầu giờ mùa hè thì bạn cũng phải tự cập nhật mã xử lý ngày/giờ
Đó là những việc mà thư viện vẫn âm thầm xử lý giúp ta nên ta coi là hiển nhiên
Với một trình mô phỏng con lắc kép mà tuần sau con gái bạn có thể chẳng còn hứng thú thì không sao, nhưng với một công ty làm thứ phải chạy vô thời hạn về sau thì đó là vấn đề
Chắc tôi phải tung ra một đoạn mã truy cập từ xa giấy phép MIT để nó chui vào tập dữ liệu huấn luyện của Opus mới được
Khi học khóa deep learning của Fast.AI, tôi đã rất ngạc nhiên trước số lượng phụ thuộc Python mà các dự án machine learning kéo theo
Các dự án web frontend vốn luôn bị xem là có nhiều phụ thuộc bên thứ ba, nhưng với tôi hệ sinh thái machine learning còn rối rắm hơn nhiều
Thêm nữa, phát triển web vốn được xem là nhạy cảm về bảo mật nên đã tích lũy được nhiều kinh nghiệm và thông lệ bảo mật từ lâu, còn phát triển machine learning thì có vẻ chắp vá hơn nhiều và cũng không áp dụng nhiều thực hành kỹ nghệ phần mềm thông thường
Ví dụ, một trong những cách triển khai model ML thời đó là dùng Python pickle, mà về cơ bản nó là một đối tượng thực thi được không có giới hạn mặc định
Model ở định dạng đó có thể làm bất cứ thứ gì trên máy tính tải nó về, và kiểu hệ sinh thái vô luật pháp ban đầu như vậy khiến vi phạm bảo mật và tấn công chuỗi cung ứng dễ xảy ra hơn
Có người trong lúc làm mới học viết code một chút, có người là nhà toán học, có người lại giống các lập trình viên say men AI
Cũng có kiểu tư duy “giờ code không còn quan trọng, chạy được là được”
Với nhiều người, quản lý phụ thuộc cho đàng hoàng chỉ là việc lặt vặt mà họ không muốn bận tâm
Nhiều dự án machine learning kết hợp tất cả những yếu tố này lại, trong khi thật ra đây lại là một trong những lĩnh vực đáng lẽ phải tập trung nhất vào tính tái lập
Tìm kiếm trong kho lưu trữ thì thấy có tới 2,2 nghìn repo được tạo trong vòng một ngày qua chứa chuỗi
"A Mini Shai-Hulud has Appeared": https://github.com/search?q=A%20Mini%20Shai-Hulud%20has%20Ap...Điều này có vẻ là dấu hiệu cho thấy tài khoản, có lẽ là token GitHub auth/Actions, đã bị xâm nhập rồi bị dùng để tạo repo
Chuyện kiểu này đã từng xảy ra rồi, nên tôi tưởng họ đã rút được bài học
Malware này chẳng tốn mấy công sức, và Microsoft dường như cũng chẳng cố gắng mấy
Nói trước là tôi chưa từng dùng pytorch và cũng không rành các thực hành bảo mật phần mềm
Nhưng tôi không nghĩ ra được mấy kịch bản mà pytorch cần truy cập mạng
Có vẻ sai khi ở bất kỳ đâu trong codebase cũng có thể import bất kỳ module nào rồi dùng API đó
Có lẽ cần thêm các hạn chế import hoặc phân tích tĩnh
Ngôn ngữ có vẻ không có abstraction phù hợp để xử lý vấn đề kiểu này
Để so sánh thì ở Rust, tôi thích việc chỉ nhìn chữ ký hàm thôi cũng có thể thấy tính biến đổi và vòng đời mà không cần hiểu mã bên trong
Tôi cảm giác phụ thuộc cũng cần một thứ tương tự
Nhà phát triển đáng lẽ phải có thể audit dễ dàng toàn bộ phụ thuộc mà không cần đào xuống mã cấp dưới để thấy kiểu “à, phụ thuộc này dùng
eval()này” hoặc “nó có truy cập mạng này”Ứng dụng di động thì bị ép quyền hạn, nên có lẽ nhà phát triển cũng phải có khả năng chỉ cho phép một số tính năng nhất định thay vì nhận nguyên cả đống khả năng
Tôi không muốn khái quát hóa, nhưng có vẻ đặc biệt là cộng đồng phát triển AI ưu tiên sự tiện lợi hơn mọi cân nhắc khác
Ví dụ, việc dự án tự động tải model lớn ở lần chạy đầu tiên gần như đã thành chuẩn
Thường thì có thể tắt được, nhưng vì có các lớp code ăn sâu qua nhiều thư viện nên việc tìm đúng tham số thật sự rất đau đầu
Việc có thể bắt đầu quá dễ với những thứ phức tạp, mà phần lớn vẫn giống đồ chơi, là điều hay, nhưng bầu không khí dễ dãi này khá khó chịu
Bước giải quyết vấn đề đầu tiên dường như lúc nào cũng là “
pip install …”, và một số môi trường, chẳng hạn MacOS, còn không virtualize tốt quyền truy cập GPUTuần này tôi đang tự hỏi liệu dùng uv để quản lý phiên bản Python có phải ý hay không
Trên website [1] có ghi “Python không cung cấp binary chính thức để phân phối, vì vậy uv sử dụng các bản phân phối từ dự án Astral python-build-standalone”
Nó trỏ đến repo GitHub này https://github.com/astral-sh/python-build-standalone, và ở đó lại nhắc tới https://gregoryszorc.com/docs/python-build-standalone/main/r...
Nếu tôi hiểu đúng thì có vẻ mã nguồn để build Python không được lấy trực tiếp từ python.org, và tôi không chắc mức độ an toàn của điều này
Tôi cũng có cùng lo ngại với asdf [2], nhưng asdf dùng pyenv [3], và bên đó có cảm giác gần chính thống hơn
Có ai giải thích được công cụ nào giữa uv và asdf tốt hơn và an toàn hơn cho việc cài Python không?
[1] https://docs.astral.sh/uv/guides/install-python/
[2] https://github.com/asdf-community/asdf-python
[3] https://github.com/pyenv/pyenv/tree/master/plugins/python-bu...
Ngay từ đầu thì còn lấy từ đâu khác được nữa
[1]: https://github.com/astral-sh/python-build-standalone/blob/a2...
uvvàcpython. Quy trình của họ vững, phản ứng nhanh, và giờ cũng có kha khá tài trợĐiều khiến tôi lo là những thứ như
mdformat, tức formatter được dùng rộng rãi nhưng chủ yếu do một người duy trì lúc rảnh, hoặc một phụ thuộc cực kỳ đặc thù đã nhiều năm không cập nhật và nằm sâu 3 tầng trong cây phụ thuộcTôi không muốn khóa mọi bản cập nhật rồi duyệt thủ công trên các ứng dụng đang phát triển tích cực, nhưng với ứng dụng nghiêm túc thì giờ điều đó bắt đầu trông như bắt buộc
Trong lúc đó tôi đi lấy các API key khỏi file
.envkhông mã hóa vậyNếu bị dính ở một webapp tiêu dùng quy mô lớn thì đáng xấu hổ nhưng còn hiểu được, chứ mất hàng trăm tới hàng nghìn đô chỉ vì một phụ thuộc gián tiếp của repo demo đồ chơi tình cờ nằm trên cùng host và cùng hệ thống thì đau quá
Có ai biết nếu key bị đánh cắp theo cách này thì OAI hay Anthropic có hoàn tiền không? Hay đó được xem là lỗi của người dùng?
Tôi không rõ mức độ rủi ro khác nhau bao nhiêu giữa việc họ tự build Python binary hay ai khác build
Dạo này phần lớn
pip installcủa tôi là do Claude Code gợi ý rồi tôi chỉ việc nhấn EnterModel được huấn luyện bằng dữ liệu từ vài tháng trước nên nó không thể biết tuần này cái gì vừa bị xâm nhập
Thành ra tôi đã tạo ra bộ lọc tệ nhất có thể để đánh giá xem “gói này hiện giờ có an toàn không”
Ý bạn là để Claude Code đề xuất phần mềm để cài từ internet rồi cứ thế cài theo
Tôi chưa từng nghe ai nói Claude Code hay bất kỳ LLM nào là bộ lọc để đánh giá “gói này hiện giờ có an toàn không”, và xét theo chính lý do bạn nêu ra thì đó có vẻ là một heuristic cực kỳ tệ
setup.pysẽ chạy gì trên máy của tôiVì không có thứ gì thật sự kiểm tra gói trước khi thực thi
Điều cần là công cụ lấy metadata trước khi chạy để xem có hook nào trong đó
Claude Code được cập nhật gần như mỗi ngày, đôi khi còn nhiều lần một ngày
Nếu một ngày nào đó Anthropic bị xâm nhập thì tất cả chúng ta sẽ lãnh đủ
Nhưng dạo này mọi thứ đều theo kiểu YOLO
Tôi thấy tin nhắn này trên GitHub được đăng ngày 20 tháng 4 và hơi bối rối
"deependujha hi @thebaptiste, thanks for inquiring. Release of 2.6.2 is blocked due to some internal reasons. Will notify once release is made."Nếu nghĩa là từ lúc đó họ đã biết vấn đề mà đến giờ vẫn không cảnh báo thì tôi sẽ thấy rất khó chịu
Mong ai biết rõ hơn có thể giải thích cho minh bạch
https://github.com/Lightning-AI/pytorch-lightning/issues/216...
Trước đó không có bản phân phối bị ảnh hưởng, và chúng tôi cũng không biết việc rò rỉ
Bản phát hành gốc trên GitHub không có vấn đề gì, nhưng đã được gỡ xuống để tránh gây nhầm lẫn