Họ đã phát hiện ra một lỗ hổng trong RubyGems.org cho phép thay thế các gói

Gần đây tin tức đã phá vỡ rằng Một lỗ hổng nghiêm trọng đã được xác định trong kho lưu trữ gói rubygems.org (lỗ hổng bảo mật đã được lập danh mục theo CVE-2022-29176), cho phép không có sự cho phép thích hợp, thay thế gói của người khác trong kho lưu trữ bằng cách giật một gói hợp pháp và tải lên một tệp khác có cùng tên và số phiên bản ở vị trí của nó.

Nó được đề cập rằng lỗ hổng bảo mật là do một lỗi trong trình xử lý hành động "yank", xử lý một phần của tên sau dấu gạch ngang là tên nền tảng, điều này giúp bạn có thể bắt đầu xóa các gói bên ngoài khớp với phần của tên với ký tự gạch nối.

Đặc biệt, trong mã điều khiển của hoạt động "yank", cuộc gọi 'find_by! (full_name: "# {rubygem.name} - # {slug}")' được sử dụng để tìm kiếm các gói, trong khi tham số "slug" được chuyển cho chủ sở hữu gói để xác định phiên bản cần xóa.

Chủ sở hữu của gói "rails-html" có thể đã chỉ định "sanitizer-1.2.3" thay vì phiên bản "1.2.3", điều này sẽ khiến thao tác áp dụng cho "rails-html-sanitizer-1.2.3" gói ″ từ người khác. »

Một lời khuyên bảo mật cho Rubygems.org đã được xuất bản ngày hôm qua.

Lời khuyên liên quan đến một lỗi cho phép người dùng độc hại khai thác một số viên ngọc nhất định và tải lên các tệp khác nhau có cùng tên, số phiên bản và nền tảng khác nhau.

Chúng ta hãy xem xét sâu hơn để xem điều gì đã xảy ra trong quá trình trích xuất. Như một cái cớ, chúng ta hãy tưởng tượng một tình huống trong đó chúng tôi tạo ra một viên ngọc có tên "rails-html" với mục đích có được quyền truy cập trái phép vào viên đá quý "rails-html-sanitizer" được sử dụng rộng rãi.

Nó được đề cập rằng ba điều kiện phải được đáp ứng, để khai thác thành công lỗ hổng này:

  • Cuộc tấn công chỉ có thể được thực hiện trên các gói có ký tự gạch nối trong tên của chúng.
  • Kẻ tấn công sẽ có thể đặt một gói đá quý với một phần của tên lên đến ký tự gạch nối. Ví dụ: nếu cuộc tấn công chống lại gói "rails-html-sanitizer", thì kẻ tấn công phải đưa gói "rails-html" của riêng chúng vào kho lưu trữ.
  • Gói bị tấn công phải được tạo trong 30 ngày qua hoặc không được cập nhật trong 100 ngày.

Vấn đề được xác định bởi một nhà nghiên cứu bảo mật là một phần của chương trình tiền thưởng HackerOne để tìm kiếm các vấn đề bảo mật trong các dự án mã nguồn mở đã biết.

Vấn đề cố định tại RubyGems.org vào ngày 5 tháng XNUMX và theo các nhà phát triển, chưa xác định được dấu vết khai thác về lỗ hổng bảo mật trong nhật ký trong 18 tháng qua. Đồng thời, cho đến nay mới chỉ thực hiện một cuộc đánh giá hời hợt, và một cuộc đánh giá chuyên sâu hơn sẽ được lên kế hoạch trong tương lai.

Hiện tại, chúng tôi cho rằng lỗ hổng này vẫn chưa được khai thác.

RubyGems.org gửi email đến tất cả chủ sở hữu đá quý khi phiên bản đá quý được phát hành hoặc gỡ bỏ. Chúng tôi chưa nhận được bất kỳ email hỗ trợ nào từ các chủ sở hữu đá quý cho biết rằng đá quý của họ đã được khai thác mà không được phép.

Một cuộc kiểm tra các thay đổi về đá quý trong 18 tháng qua không tìm thấy ví dụ nào về việc sử dụng lỗ hổng này một cách độc hại. Việc kiểm tra thêm để biết bất kỳ trường hợp nào có thể sử dụng khai thác này không tìm thấy trường hợp nào về việc khai thác này được sử dụng để chiếm lấy một viên ngọc mà không có sự cho phép trong lịch sử của RubyGems. Chúng tôi không thể đảm bảo rằng nó sẽ không bao giờ xảy ra, nhưng có vẻ như nó không có khả năng xảy ra.

Để xác minh các dự án của bạn, bạn nên phân tích lịch sử hoạt động trong tệp Gemfile.lock Hoạt động độc hại được thể hiện khi có các thay đổi có cùng tên và phiên bản hoặc thay đổi nền tảng (ví dụ: khi gói xxx-1.2.3 . 1.2.3 được cập nhật thành xxx-XNUMX-xxx).

Như một giải pháp chống lại việc giả mạo các gói ẩn trong các hệ thống tích hợp liên tục hoặc khi xuất bản các dự án, Các nhà phát triển được khuyến nghị sử dụng Bundler với các tùy chọn “–frozen” hoặc “–deployment” để xác nhận các phụ thuộc.

Cuối cùng, nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết theo dõi.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.