3 điểm bởi GN⁺ 2026-05-02 | 2 bình luận | Chia sẻ qua WhatsApp
  • Các phiên bản 2.6.22.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ạy pip install lightningpayload JavaScript bị làm rối trong thư mục _runtime sẽ 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":true cù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>.json và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 SessionStart vào .claude/settings.json của Claude Code để tự động chạy khi bắt đầu phiên, và chèn tác vụ runOn: folderOpen vào .vscode/tasks.json củ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 payload router_runtime.js dung lượng 14.8MB
  • Nếu lấy được GitHub token có quyền ghi, nó sẽ push một workflow ngụy trang tên Formatter và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

 
picopress 2026-05-03

Giờ thì có vẻ không nên cập nhật nữa...

 
GN⁺ 2026-05-02
Ý 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-pad củ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

    • Đây là hiện tượng có thật. Tính đến đầu tháng 4, đã có 7 vụ trong 12 tháng gần nhất, trong khi 20 năm trước đó chỉ có 9 vụ: https://www.jefftk.com/p/more-and-more-extensive-supply-chai...
    • Mọi người đang đẩy mã vào khắp nơi với số lượng lớn mà chẳng buồn xem kỹ, nên việc tấn công chuỗi cung ứng gia tăng là điều tự nhiên
    • Lý do là cập nhật tự động và các công cụ CI đã đạt đến mức phổ cập đủ lớn để ai cũng dùng
      Trước đây, người ta thường chạy npm install thủ công hơn, có lẽ chỉ khi build bị hỏng hoặc rất thỉnh thoảng mới chạy
      Tấ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ĩ
    • Trong lịch sử, việc xử lý artifact có thêm kiểm tra bảo mật là tùy chọn enterprise trả phí, còn lựa chọn kém an toàn hơn lại là mặc định ít phiền phức hơn rất nhiều
      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-pad không phải là một cuộc tấn công mà là lỗi của NPM
      Khô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-pad muố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ỗi
      Theo 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-ghost tự độ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

    • Tôi là Andy của Lightning. Đúng vậy, thông tin xác thực PyPI đã bị đánh cắp thông qua tài khoản bot pl-ghost bị xâm nhập
      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

    • Làm vậy thì bạn phải tự quản lý mọi thay đổi và vô số trường hợp ngoại lệ
      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 đề
    • Giờ thì bạn chỉ đang lộ diện trước phụ thuộc thực sự là trình duyệt mà thôi
    • Tất nhiên bạn sẽ rà soát kỹ từng dòng mã do Opus tạo ra theo đúng tiêu chuẩn mà bạn kỳ vọng ở các maintainer mã nguồn mở chứ? Đúng không?
      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
    • Tôi thích Rust hơn Go nên cũng thấy phân vân. Xét cả từ góc độ LLM thì Rust tốt hơn, nhưng triết lý phụ thuộc của Rust thực chất là một hố đen bảo mật, còn Go thì tốt hơn nhiều
    • Bạn có repo hay forge nào có thể chia sẻ không? Tôi có một trò chơi đánh vần tên động vật nông trại và muốn mở rộng thư viện của mình cũng như nghĩ thêm ý tưởng
  • 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

    • Hệ sinh thái đó vốn có nhiều người không phải kỹ sư phần mềm
      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...

    • Tên repo dường như đều là hai thuật ngữ/từ trong Dune, ví dụ harkonen, mentat, ornithoptor, kèm theo số
      Đ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
    • https://github.com/tinin46 có vẻ là một tài khoản lưu rất nhiều key, nhưng tôi không rõ dùng để làm gì
    • Tôi không hiểu vì sao GitHub không phản ứng ngay và chặn các repo có README khớp regex
      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
    • Rốt cuộc chuyện quái gì đang xảy ra vậ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

    • Hệ sinh thái Python sẽ không bao giờ chấp nhận điều này, nhưng tôi mong chủ đề này được hiểu và thừa nhận nhiều hơn trong đó
      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 GPU
    • Có những trường hợp phải huấn luyện model trên nhiều compute node. Đó là một ví dụ lớn cần truy cập mạng
  • Tuầ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...

    • python-build-standalone lấy mã nguồn CPython trực tiếp từ python.org[1]
      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...
    • Tôi không quá lo về uvcpython. 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ộc
      Tô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 .env không mã hóa vậy
      Nế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?
    • Ngay từ đầu thì uv là một binary chạy trên máy bạn để quản lý Python binary, package, các binary bên trong chúng, công cụ toàn hệ thống, v.v.
      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 install của tôi là do Claude Code gợi ý rồi tôi chỉ việc nhấn Enter
    Model đượ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”

    • Đừng đổ lỗi cho LLM về sự lười biếng và thiếu thẩm định của bản thân
    • “Bộ lọc” nào cơ?
      Ý 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ệ
    • Dữ liệu huấn luyện cũ là một phần nguyên nhân, nhưng ngay cả model mới nhất cũng không thể biết setup.py sẽ chạy gì trên máy của tôi
      Vì 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 đó
    • Không nhấn Enter thì có thể tránh rất dễ
    • “Bộ lọc tệ nhất” là ý nói cứ nhấn Enter theo lời Claude à?
  • 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 đủ

    • “Chúng ta” là ai?
    • Nếu chạy trong VM/container không đặc quyền với truy cập mạng bị giới hạn thì không hẳn vậy
      Nhưng dạo này mọi thứ đều theo kiểu YOLO
    • Có lẽ chuyện đó đã được phản ánh vào giá Polymarket rồi
  • 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...

    • Tôi là Andy của Lightning. Gói độc hại đã được đăng lên PyPI hôm nay lúc 12:45 PM UTC
      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
    • Dành cho người dùng uv: https://docs.astral.sh/uv/reference/settings/#exclude-newer