Các gói AUR bị lây nhiễm infostealer và rootkit
(discourse.ifin.network)- Kho gói AUR là nơi các gói không được quản lý có thể được bất kỳ ai nhận nuôi và gửi thay đổi cho PKGBUILD cùng các tệp liên quan; trong sự cố lần này có dấu hiệu hơn 408 gói đã bị lây nhiễm
- Một maintainer gói AUR mới đã mạo danh maintainer đáng tin cậy để nhận nuôi các gói, và các maintainer AUR khác đang tiến hành loại bỏ các gói bị nhiễm
- Các gói bị nhiễm ban đầu đã bị sửa để chạy
npmtrong script preinstall nhằm cài payload độc hạiatomic-lockfile - Các đợt lây nhiễm sau đó đã dùng Bun để cài
js-digestđộc hại, và NPM đã gỡ gói này - Phần lớn các gói ít được dùng, nhưng điều quan trọng là phạm vi ảnh hưởng lớn và đây là một cuộc tấn công chuỗi cung ứng có cả hành vi đánh cắp thông tin lẫn eBPF rootkit
Tình hình sự cố
-
Đã xảy ra chuyện gì
- Có dấu hiệu một maintainer gói AUR mới đã mạo danh maintainer đáng tin cậy để nhận nuôi và lây nhiễm hơn 408 gói
- Sau khi vụ xâm phạm được báo cáo, các maintainer AUR khác đã tiến hành gỡ bỏ các gói bị nhiễm
- Tính đến 2026-06-12T17:30:00Z, các maintainer AUR báo cáo đã loại bỏ mọi commit độc hại
- Các maintainer AUR quyết định áp dụng kiểm soát và hạn chế đối với một số tính năng, bao gồm cả chức năng nhận nuôi gói
- Arch Linux đã đăng thông báo Active AUR malicious packages incident
-
Phụ thuộc độc hại
- Cuộc tấn công bao gồm ít nhất hai phụ thuộc độc hại riêng biệt
- Các gói bị ảnh hưởng ban đầu đã bị sửa để dùng
npmtrong script preinstall nhằm cài gói payload độc hạiatomic-lockfile - Gói
premake-gitcó commit ví dụ cho thay đổi này - Các đợt lây nhiễm sau đó dùng Bun để cài
js-digestđộc hại, và NPM đã gỡjs-digest - Phân tích cuộc tấn công có trong Preliminary analysis of AUR malware
Ứng phó và chỉ dấu xâm phạm
-
Biện pháp được khuyến nghị
- Nếu không dùng Arch, bạn không phải đối tượng bị ảnh hưởng trực tiếp bởi vụ xâm phạm gói AUR lần này
- Người dùng Arch nên xem lại danh sách các gói bị ảnh hưởng và kiểm tra hệ thống bằng script xác minh mức độ phơi nhiễm
aur_check.shđược liên kết trong bài gốc là phiên bản cũ; mục kiểm tra mới nhất cần làm theo hướng dẫn trong Gist tương ứng- Nếu phát hiện chỉ dấu xâm phạm, cần bảo toàn hệ thống để phục vụ điều tra pháp chứng phù hợp
- Nếu tìm thấy gói bị nhiễm, cần làm theo quy trình ứng phó sự cố thông thường, thay toàn bộ thông tin xác thực và cân nhắc cài lại Arch
- Do khả năng có rootkit, không thể đảm bảo độ tin cậy của hệ thống nữa
- Tất cả người dùng nên chặn lưu lượng Tor đi ra khỏi mạng
-
Chỉ dấu xâm phạm
- SHA256 của tệp thực thi Linux độc hại được nhúng trong
js-digestlà7883bda1ff15425f2dbe622c45a3ae105ddfa6175009bbf0b0cad9bf5c79b316 - Có thể phát hiện eBPF Maps đáng ngờ bằng
bpftool map list - Các tên map đáng ngờ gồm
hidden_pids,hidden_names,hidden_inodes
- SHA256 của tệp thực thi Linux độc hại được nhúng trong
-
Các điểm xác nhận thêm
- Không phải các tài khoản maintainer hiện có đã thực hiện commit độc hại; thay vào đó, các tài khoản maintainer đã biết đã bị mạo danh
- Phần lớn các gói ít được dùng, nhưng phạm vi lây nhiễm hơn 408 gói là rất lớn
- Một cuộc tấn công chuỗi cung ứng có cả hành vi đánh cắp thông tin lẫn eBPF rootkit là trường hợp hiếm gặp
- Trang
atomic-lockfiletrên Socket.dev hiển thị số lượt tải của gói NPM độc hại là 134 - Gói NPM này do người dùng
herbsoberingduy trì - Tìm kiếm tên người dùng
herbsoberingtrên GitHub cho thấy có một image container đơn lẻ trông như công cụ reverse shell/proxy làherbsobering430 - Kho gói AUR cho phép bất kỳ ai nhận nuôi một gói khi gói đó được đánh dấu là không được quản lý, rồi gửi thay đổi cho PKGBUILD và các tệp liên quan
- Việc tự động tìm và nhận nuôi các gói bị bỏ rơi không phải là chuyện hiếm; bối cảnh liên quan có trong chuỗi Mastodon
1 bình luận
Ý kiến trên Hacker News
Cần chấp nhận rằng AUR chỉ là một bộ sưu tập các PKGBUILD do người dùng tạo ra
Bạn bắt buộc phải tự xem xét mã nguồn của mọi PKGBUILD cài từ AUR, và các bản cập nhật cũng không ngoại lệ. Đây là tiền đề đã được bàn đi bàn lại hơn 10 năm nay, và cũng là lý do không có một AUR helper chính thức nào như yay
Có nhiều lời phàn nàn rằng Arch Linux mang tính tinh hoa, nhưng thực tế đây là một bản phân phối dành cho những người biết mình đang làm gì và không muốn được cầm tay chỉ việc ở từng bước. Điều đó cũng có nghĩa là nếu bạn cài ngẫu nhiên các gói AUR rồi làm hỏng hoặc để hệ thống bị xâm nhập, thì trách nhiệm thuộc về bạn
Tuy vậy, thời kỳ để bất kỳ ai cũng có thể tiếp quản một gói AUR có lẽ sắp kết thúc. Chỉ riêng chi phí hoàn tác các gói bị ảnh hưởng mỗi lần xảy ra sự cố đã là quá lớn. Còn phương án xem xét mọi yêu cầu tiếp quản thì quá tốn công, và cũng không đảm bảo lúc nào cũng hữu ích
Tôi nghĩ là đúng, trừ khi bạn chỉ chạy chúng ở nơi không có truy cập Internet hoặc chỉ được phép truy cập những thứ không cần giữ kín dù có bị công khai
Có thể không phải AUR, nhưng các hệ sinh thái khác về mặt lý thuyết có thể được cải thiện bằng mô hình quyền hạn hoặc sandbox. Tiện ích mở rộng trình duyệt đã có các lựa chọn như vậy, nhưng người dùng “bình thường” hầu như không dùng
Đáng tiếc là 99,99% mọi người không thể hoặc không có thời gian để xem xét tất cả mọi thứ. Các gói của bản phân phối với maintainer đáng tin cậy, hoặc những nơi có quyền hạn và mức độ kiểm duyệt nhất định như iOS App Store, có vẻ là an toàn nhất
Vụ này hơi khác ở chỗ họ khá cẩu thả khi chỉ
npm installngay trong PKGBUILD. Giờ thì gần như mọi kho gói ngoài AUR cũng gặp cùng vấn đề này, và việc tự kiểm toán toàn bộ chuỗi phụ thuộc là không thực tếTất nhiên tôi cũng không có giải pháp
Mọi người tắt SELinux,
--privilegedthì vô hiệu hóa seccomp và AppArmor, và các CVE thoát sandbox cũng tồn tạiCuối cùng tôi muốn nó trở thành cấu trúc như
username/packagename-bin|git. Như vậy sẽ rõ ràng hơn nhiều về việc mọi người thực sự đang cài cái gì và từ aiChiến dịch này vẫn đang diễn ra. Tôi vừa nhận được email báo rằng một gói cũ của mình đã bị tiếp quản; nó đã không hoạt động suốt nhiều năm và cũng là gói mồ côi từ lâu. Ngay sau khi bị tiếp quản, một commit độc hại đã được đẩy lên
Có vẻ giờ họ dùng bun thay vì npm, nên các cách né tránh dựa trên npm có thể sẽ không còn hiệu quả
https://aur.archlinux.org/cgit/aur.git/commit/?h=toggldeskto...
Dù sẽ bất tiện, nhưng có lẽ tốt hơn là AUR buộc phải gửi mới thay vì cho phép tiếp quản gói mà người khác đã bỏ, rồi định kỳ xóa các gói mồ côi sau một khoảng thời gian nhất định
Rõ ràng là phải cẩn thận khi cài thứ gì đó từ AUR, và trước đây cũng luôn có những gói đáng ngờ, tức là được build sai hoặc đóng gói sai, nhưng việc thấy hành vi cài cắm mã độc chủ động là điều đáng lo ngại
Tôi nghĩ AUR có hai vấn đề lớn. Thứ nhất, nó là tàn dư của một thời kỳ mã nguồn mở bình đẳng hơn, khi người ta phần lớn còn có thể tin mã của bên thứ ba. Thứ hai, bất kỳ ai cũng có thể tiếp quản các gói mồ côi mà vẫn giữ nguyên lịch sử và dấu vết xác minh sẵn có
Thời kỳ đầu tiên đã qua rồi, còn vấn đề thứ hai có thể được giảm nhẹ bằng cách kiểm soát chặt hơn tài khoản AUR hoặc thêm cơ chế bảo vệ trong các AUR helper. Ví dụ, nếu một gói vừa đổi chủ gần đây thì hiển thị một cảnh báo thật lớn và đáng sợ. Dĩ nhiên vẫn sẽ có người cứ bấm
ycho qua, nhưng còn hơn là không có gìHoặc cũng có thể tránh hẳn AUR helper và tự xem xét PKGBUILD rồi build gói mình cần
Chúng chủ động hỏi bạn có muốn xem xét không, và sau khi bạn chấp nhận rủi ro cuối cùng, chúng còn cho biết liệu đã có thay đổi nào không
Dù vậy, quan điểm “AUR có hại” không phải là mới. Người dùng AUR cần hiểu rủi ro ở đây, và về cơ bản nó chỉ khá hơn một bậc so với việc lấy thứ gì đó trên StackOverflow rồi
curl | bashthôiChuyện này đã trôi qua hơn 7 tiếng mà vẫn chưa có bất kỳ đề cập nào trên archlinux.org hay aur.archlinux.org. Tôi không hiểu vì sao. Đáng lẽ phải chặn AUR cho đến khi có biện pháp chứng minh rằng người dùng đã biết về vụ việc này
Ví dụ, có thể chỉnh nhẹ URL API của AUR để người dùng yay/yaourt phải đi tìm xem đã xảy ra chuyện gì. API mới cần có hạ tầng để thông báo cho người dùng và xác nhận họ đã đọc thông báo trước khi tiếp tục. Điều này càng cần thiết hơn khi thậm chí còn chưa chắc đã tìm ra hết toàn bộ mã độc
Ngoài ra cũng cần có cơ sở dữ liệu về các commit AUR đã bị thu hồi hoặc bị xâm phạm, cùng cơ chế cảnh báo nếu người dùng từng cài các gói đó
Nó nằm ngay trong chính cái tên, và tài liệu wiki cũng nói rất rõ AUR là kho của người dùng, không nên mù quáng tin tưởng
Ngay trong khung đỏ to ở phần đầu đã viết nguyên văn điều đó: https://wiki.archlinux.org/title/Arch_User_Repository
Có rất nhiều thứ trên AUR mà tôi sẽ không bao giờ cài, và tôi không nghĩ cách tốt nhất là phát tán tất cả chúng lên mailing list
Tôi không ghét ý tưởng cảnh báo những người đã cài gói độc hại, nhưng khả năng triển khai rất thấp. AUR không có cơ chế theo dõi cài đặt như các công cụ thương mại. Làm sao biết được ai đã cài gói nào? Về cơ bản AUR gần giống như danh bạ vị trí gói, và thậm chí còn không yêu cầu đăng nhập hay thông tin xác thực
Vì vậy cảnh báo phải đến từ các công cụ mà người dùng có thể chạy nếu họ chịu chú ý, và thực tế là họ cần phải chú ý. Ví dụ: https://gist.github.com/Kidev/59bf9f5fb53ab5eee99f19a6a2fc39...
Cái API mới vừa thông báo vừa bắt người dùng xác nhận đã đọc thì rốt cuộc phải hoạt động thế nào? Gói AUR đơn thuần là các kho git, và những gì AUR helper làm hay không làm thì maintainer của Arch không thể kiểm soát được
Nếu không muốn liệt kê toàn bộ các gói bị ảnh hưởng đã biết, thì ít nhất cũng nên khuyến nghị như một lập trường chính thức rằng ai dùng gói AUR phải đọc mọi tệp của mọi gói mình sử dụng
Điều đó cũng có lý. Tôi biết một số gói trong danh sách bị ảnh hưởng, chúng đã quá cũ và cả dự án upstream cũng không còn được duy trì nữa
Tôi không biết tổng số nạn nhân là bao nhiêu, nhưng có khả năng cao đội AUR có con số chính xác. Tôi nghĩ họ đang xử lý hết sức có thể tương xứng với mức độ ảnh hưởng
Kiểu sự việc này rốt cuộc đã trở nên không thể tránh khỏi, và nếu không có thay đổi thì có lẽ sẽ xảy ra thường xuyên hơn. Tôi rất thích hệ thống PKGBUILD của AUR, và cũng hay tận dụng nó khi tự viết gói
Vấn đề nghiêm trọng nhất mà cũng dễ sửa nhất là bất kỳ ai cũng có thể tiếp quản một gói mồ côi, nhưng người dùng cuối hoàn toàn không được báo về việc đó
Xóa gói thì công nhiều mà lợi ít, nên cách tối ưu để buông quyền kiểm soát lại là biến nó thành gói mồ côi. Tôi nghĩ điều này phải ngược lại. Ít nhất người dùng phải được biết rõ rằng gói đó đã trở thành gói mồ côi
Gánh nặng này có thể nằm nhiều hơn ở phía các AUR helper như paru hay yay, và tôi khuyến khích họ thực hiện thay đổi đó
Có một script đơn giản để quét các gói đã bị xâm phạm
https://cscs.pastes.sh/aurvulntest20260611.sh
Không phải script của tôi, nhưng khá dễ đọc và dễ hiểu. Tuyệt đối đừng pipe thẳng script vào bash
comm -1 -2 <(pacman -Qq | sort) <(curl -s https://gist.githubusercontent.com/quantenProjects/… | sort)Không bao giờ là thời điểm tệ để học
comm(1)Chắc là nếu giống tôi, đã một thời gian, vài tháng rồi chưa chạy
yay -Syu, thì có lẽ vẫn ổn nhỉ? …nhỉ?Làm ơn đừng bắt tôi phải cài lại Arch. Lần trước mất cả tuần
Cập nhật: archinstall ổn đấy. Khôi phục lại trong khoảng 15 phút
Lúc nào cũng phải kiểm tra PKGBUILD và mã nguồn. Nhìn chung AUR không phải thứ để tin cậy. Thậm chí còn ngạc nhiên hơn là kiểu vụ xâm phạm này lại không xảy ra sớm hơn
9 Junchỉ hoạt động với locale tiếng Anh hoặc các locale dùng định dạng tương tựSau khi chỉnh cho phù hợp với môi trường của tôi thì
jd-guibị phát hiện, nhưng thực ra tôi đã càijd-gui-binkhoảng hai tiếng trước khi vụ xâm phạm xảy ra. Có vẻ tôi đã gặp may vì tối hôm đó lười chờ biên dịch từ mã nguồn nên chọn gói-binCộng đồng Arch đang nhanh chóng đưa ra các script và công cụ.
Hiện tại, tiện ích tích hợp mới nhất để kiểm tra xem có bị lây nhiễm hay không là cái này:
https://github.com/lenucksi/aur-malware-check
Ngoài ra, trên danh sách thư aur-request cũng đang có rất nhiều yêu cầu xóa và chuyển thành gói mồ côi để hoàn tác các commit độc hại:
https://lists.archlinux.org/archives/list/aur-requests@lists...
Trong script đó có khá nhiều phần khó hiểu, nên chỉ đọc code thôi cũng không dễ đánh giá là có an toàn hay không.
Tôi vẫn mong chờ phản hồi hoặc giải pháp từ phía các nhà phát triển Arch chính thức.
Nó truyền tải rất rõ cảm giác cấp bách và mức độ nghiêm trọng gắn với một cuộc tấn công malware quy mô lớn như thế này.
Tôi nhớ khoảng 10 năm trước từng cài Mednafen, một trình giả lập, trên Arch Linux. Chương trình không chạy được vì nó được liên kết với một thư viện không có trên hệ thống của tôi.
Hóa ra maintainer đã build phần mềm trên hệ thống của chính họ, và một thư viện có sẵn trên máy đó đã được dùng nhưng không được ghi trong phần phụ thuộc.
Đó là một gói được bảo trì chính thức, và tôi luôn nghĩ những thứ như vậy được tạo trên máy chủ build chuyên dụng chứ không phải trên máy tính ở nhà hay bởi tình nguyện viên ngẫu nhiên. Tôi không biết Arch hiện giờ còn build theo cách đó không, nhưng chuyện đó đủ đáng sợ để khiến tôi đổi bản phân phối.
pkgctl build. Trường hợp làmakedepends=đã kéo một thư viện dùng chung vào môi trường build theo kiểu bắc cầu, nhưng nó lại bị thiếu trongdepends=.Có cảnh báo khi phát hiện phụ thuộc
.so, nhưng việc nhìn ra và xử lý nó vẫn là trách nhiệm của maintainer.Về mặt an toàn và bảo mật, Arch Linux là một trong những trụ cột dẫn dắt dự án reproducible builds, và phần lớn hệ điều hành có thể được xác minh độc lập xem các binary đó có thực sự được build từ mã nguồn hay không. Cơ chế kiểm toán cho các gói chính thức mạnh hơn NixOS và ở mức tương đương Debian:
https://reproducible.archlinux.org/
Tuy vậy, toàn bộ chuyện này hoàn toàn tách biệt với vụ AUR lần này.
pkgctl.Nếu là maintainer thì trước khi đăng lên nhất định phải dùng các công cụ như vậy.
Giải pháp cho vấn đề này là gì? Có phải nên cài những gói như thế này bên trong container Docker không có quyền truy cập mạng? Tôi không nghĩ có thể giả định chuyện này chỉ giới hạn ở AUR.
Đến năm 2026 thì phải nghi ngờ mọi nguồn phần mềm. Đặc biệt là khi vibe coding đang lan rộng, còn phần mềm đóng thì là hộp đen nên còn hỗn loạn hơn cả mã nguồn mở.
Có ai biết nếu thực sự chuyển sang thì thời lượng pin sẽ tệ đến mức nào không?
Đang có thêm tin tức liên quan xuất hiện.
https://www.phoronix.com/news/Arch-Linux-AUR-400-Compromised
Tôi từng nghĩ đến ý tưởng tạo một binary canary mà khi chạy sẽ chỉ gửi email hoặc hiện thông báo, rồi đặt tên nó là
npm.Ở thời điểm này, việc không đổi tên binary npm là một rủi ro lớn.