1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Nhiều commit độc hại đã được chèn vào AUR (Arch User Repository), gây ra một cuộc tấn công chuỗi cung ứng khi các gói bị sửa để chạy npm install atomic-lockfile trong quá trình cài đặt
  • Qua kết quả tìm kiếm trên mirror chỉ đọc, đã xác nhận cùng một lệnh độc hại trong các tệp PKGBUILD, .install.hook của khoảng 408 gói
  • Các commit độc hại sử dụng phương thức giả mạo commit bằng cách mạo danh tên và email của commit ngay trước đó để đóng giả maintainer hợp lệ, tách biệt với việc tài khoản có bị chiếm đoạt hay không
  • Phía Arch đang tiến hành reset/xóa các commit độc hạichặn tài khoản, đồng thời yêu cầu các gói độc hại bổ sung được gom báo cáo vào một luồng duy nhất
  • Các thành viên cộng đồng đang liên tiếp báo cáo commit của từng gói và triển khai ứng phó phối hợp, cho thấy đây là một sự cố quy mô lớn ảnh hưởng đến toàn bộ hệ sinh thái gói AUR

Tổng quan sự cố và yêu cầu ứng phó

  • Đã có thông tin chia sẻ về dấu hiệu nhiều commit độc hại bị chèn hàng loạt vào AUR, và công việc reset/xóa commit độc hại cùng chặn tài khoản đang được tiến hành
  • Nếu phát hiện thêm gói độc hại, có yêu cầu báo cáo bằng cách trả lời email này để các báo cáo được gom vào cùng một luồng
  • Điều phối viên phản hồi rằng đã kiểm tra toàn bộ báo cáo gửi đến và bày tỏ cảm ơn tới những người đã dành thời gian báo cáo

Mẫu mã độc — atomic-lockfile

  • Các gói bị sửa đổi đều có điểm chung là chạy npm install atomic-lockfile, sau đó kèm thêm tên các gói npm như ora, fast-glob, glob, minimist, axios, commander, execa, chalk, debug
  • Các loại tệp chứa lệnh độc hại
    • script cài đặt dạng *-deps.install
    • script cài đặt gói *.install
    • tệp *.hook — ví dụ: Exec = /bin/sh -c 'cd /tmp && npm install atomic-lockfile ... 2>/dev/null; exit 0', chạy trong /tmp, ẩn lỗi rồi thoát
    • một số trường hợp còn được chèn vào các tệp liên quan như install.sh
  • Trường hợp gói độc hại mới được tạo được báo cáo là exodus-wallet-bin, được xác nhận là gói mới xuất hiện chỉ khoảng 4 giờ trước tính từ commit đầu tiên

Phương pháp phát hiện và phạm vi ảnh hưởng

  • Việc phát hiện được thực hiện bằng cách kiểm tra trực tiếp mirror chỉ đọc
    • Sau git clone https://github.com/archlinux/aur.git, duyệt qua toàn bộ ref và chạy git grep 'atomic-lockfile'
    • Kết quả thu được một danh sách dài gồm khoảng 408 gói cài đặt atomic-lockfile, có thể dùng cho công việc dọn dẹp (cleanup) tự động
  • Ví dụ các gói được nhắc đến là bị ảnh hưởng
    • runescape-launcher, oracle-bin, tesseract-gui, python-starsessions, bitcoin-core-git, apple-music-desktop, exodus-wallet-bin, anythingllm-appimage, arm-linux-gnueabihf-binutils
    • Bao gồm cả các nhóm gói rất rộng như cutefish-*, python2-*, python-*
  • Khi lượng email tăng lên do báo cáo riêng lẻ hàng loạt, đã có khuyến nghị gộp nhiều mục vào một email; một danh sách gói tổng hợp cũng được chia sẻ riêng trên IRC

Cách thức mạo danh/giả mạo

  • Với các gói liên quan đến một tài khoản cụ thể (arojas), đã có nghi vấn liệu đây là chiếm đoạt tài khoản hay giả mạo commit
  • Sau đó được xác nhận rằng các commit độc hại dùng cách mạo danh (impersonate) tên và email của commit ngay trước đó — tức là giả mạo metadata của commit
  • Cũng có báo cáo cho biết một số gói khác của cùng người dùng đã được sửa xong

Tình hình ứng phó

  • Các commit gói bị báo cáo đã được xử lý lần lượt, và một số mục được phản hồi là đã xử lý xong (Done)
  • Khi các báo cáo bổ sung tiếp tục được gửi đến, điều phối viên đã kiểm tra toàn bộ và xử lý song song với công việc chặn tài khoản và reset đang diễn ra
  • Nhiều người tham gia đã báo cáo từng gói kèm liên kết commit, tạo thành một hình thức ứng phó phối hợp do cộng đồng dẫn dắt

1 bình luận

 
Ý kiến trên Lobste.rs
  • Vụ này có lẽ sẽ gần như chấm dứt chút niềm tin còn sót lại của cộng đồng vào các đóng góp ẩn danh, chưa được kiểm chứng
    Có cảm giác như đang nhìn niềm tin bị bào mòn theo thời gian thực

    • Nói thật thì đây là điều tốt, và lẽ ra đã phải xảy ra từ lâu. Ngành của chúng ta giờ cần phải tỉnh táo lại
      Chúng ta đang giao phó quá nhiều dữ liệu cá nhân và nhạy cảm cho máy tính, và chúng đã trở thành trung tâm của đời sống hiện đại. Nếu máy tính cá nhân bị nhiễm mã độc thì đó thực sự là một thảm họa, và điều tốt nhất có thể hy vọng là mình không đủ thú vị để hacker phải nhắm riêng đến mà quấy rối
      Ấy vậy mà bằng cách nào đó chúng ta đã bình thường hóa việc chạy mọi chương trình ngẫu nhiên với toàn bộ quyền hạn[1], rồi mỗi lần điều đó lộ ra là một ý tưởng tồi thì lại giả vờ ngạc nhiên
      [1] Tính theo quyền của người dùng hiện tại. Trong hầu hết cấu hình, root gần như chẳng còn nhiều ý nghĩa
    • KDE đã loại AUR khỏi pipeline build nội bộ của mình từ một tuần trước, có lẽ là để phản ứng với một phiên bản trước đó của cuộc tấn công này
    • Sẽ rất thú vị nếu áp dụng mô hình mạng lưới tin cậy cho việc rà soát gói AUR, kết hợp với thời gian chờ đối với các bản cập nhật gần đây
      Tôi hình dung một hệ thống đưa ra các lựa chọn như thế này khi cài đặt hoặc cập nhật gói AUR: nếu là gói vừa được cập nhật gần đây thì chờ 1 tuần cho nguội bớt, hoặc tự bỏ ra vài phút để rà soát gói rồi để lại đánh giá đã ký gắn với uy tín của mình, hoặc dựa vào các đánh giá đã ký của nhiều người khác đã tích lũy đủ độ tin cậy
      Thời gian chờ có thể không phù hợp về mặt kỹ thuật với chính sách của Arch là giữ mọi gói luôn ở trạng thái mới nhất cùng nhau. Nhưng dù sao các gói AUR vốn cũng không thuộc diện được hỗ trợ chính thức
  • Đã qua vài giờ mà gói NPM này vẫn chưa bị gỡ xuống: https://www.npmjs.com/package/atomic-lockfile

  • Nếu muốn kiểm tra xem các gói đã cài có bị ảnh hưởng không, có thể dùng script nhỏ này cùng với tệp aur_pkg_list.txt

    installed_pkgs="$(yay -Qq)";  
    grep refs aur_pkg_list.txt | awk -F/ '{print $4}' | tr -d ')' \  
    | while read -r pkg; do \  
        echo "$installed_pkgs" | grep "^$pkg\$"; \  
    done  
    

    Tôi đã thêm dấu chấm phẩy nên rất dễ biến nó thành lệnh một dòng :-)

    • Có vẻ nó bắt cả chuỗi con. Ví dụ ktea cũng khớp với kteatime
      Bản này có vẻ chạy đúng

      grep refs aur_pkg_list.txt | awk -F/ '{print $4}' | tr -d ')' | while read -r pkg; do  
         echo "$installed_pkgs" | grep "^$pkg\$";  
      done  
      
  • Có thể chuyện này đã diễn ra từ khá lâu. Email này từ 18 ngày trước cho thấy dường như đã dùng payload độc hại tương tự, nhưng commit độc hại có vẻ đã bị xóa hẳn khỏi kho

  • Nhân tiện, có tài liệu nào so sánh tốt về tư thế bảo mật chuỗi cung ứng của các bản phân phối Linux phổ biến không? Phần lớn những gì tôi tìm được đến giờ hoặc là marketing trá hình, hoặc trông như bài viết AI làm cẩu thả. Có lẽ tôi sẽ phải tự nghiên cứu thôi
    Phần đáng buồn là dù tôi thích lý tưởng phát triển dựa vào cộng đồng, nỗi lo về chuỗi cung ứng lại khiến tôi phải nhìn kỹ hơn vào các lựa chọn đóng, thậm chí cả phần mềm độc quyền