Một cuộc tấn công phụ thuộc cho phép thực thi mã tại PayPal, Microsoft, Apple, Netflix, Uber và 30 công ty khác

Vài ngày trước một phương pháp đơn giản đáng ngạc nhiên đã được phát hành cho phép tấn công các phụ thuộc trong các ứng dụng được phát triển bằng cách sử dụng kho gói nội bộ. Các nhà nghiên cứu đã xác định vấn đề họ đã có thể chạy mã của bạn trên các máy chủ nội bộ của 35 công ty, bao gồm PayPal, Microsoft, Apple, Netflix, Uber, Tesla và Shopify.

Các vụ tấn công được thực hiện như một phần của chương trình Bug Bounty, phối hợp với các công ty bị tấn công và thủ phạm đã nhận được 130.000 đô la tiền thưởng cho việc xác định các lỗ hổng.

Phương pháp dựa trên thực tế rằng nhiều công ty sử dụng sự phụ thuộc vào kho lưu trữ tiêu chuẩn của NPM, PyPI và RubyGems trong các ứng dụng nội bộ của họ, cũng như các phần phụ thuộc nội bộ không được phân phối công khai hoặc tải xuống từ kho lưu trữ của riêng chúng.

Vấn đề là các nhà quản lý gói như npm, pip và gem họ cố gắng tải xuống các phụ thuộc nội bộ của các công ty, ngay cả từ các kho lưu trữ công khai. Đối với một cuộc tấn công, chỉ cần xác định tên của các gói với các phụ thuộc nội bộ và tạo các gói của riêng bạn có cùng tên trong kho lưu trữ công khai của NPM, PyPI và RubyGems.

Vấn đề không phải riêng đối với NPM, PyPI và RubyGems, và nó cũng biểu hiện trên các hệ thống khác như NuGet, Maven và Yarn.

Ý tưởng cho phương pháp đề xuất được đưa ra sau khi một nhà nghiên cứu tình cờ nhận thấy rằng trong mã công khai được đăng trên GitHub, nhiều công ty không xóa đề cập đến các yếu tố phụ thuộc bổ sung khỏi tệp kê khai của họ được sử dụng trong các dự án nội bộ hoặc khi thực hiện các chức năng mở rộng. Các dấu vết tương tự đã được tìm thấy trong mã JavaScript cho các dịch vụ web, cũng như trong các dự án Node.JS, Python và Ruby của nhiều công ty.

Các rò rỉ chính liên quan đến việc nhúng nội dung từ các tệp package.json trong mã JavaScript có sẵn công khai trong quá trình xây dựng, cũng như với việc sử dụng các phần tử đường dẫn thực tế trong các lệnh gọi request (), có thể được sử dụng để đánh giá tên phụ thuộc.

Việc quét vài triệu tên miền công ty đã tiết lộ hàng nghìn tên gói JavaScript không có trong kho lưu trữ NPM. Sau khi biên soạn cơ sở dữ liệu tên gói nội bộ, nhà nghiên cứu quyết định tiến hành một thử nghiệm để hack cơ sở hạ tầng của các công ty tham gia chương trình Bug Bounty. Kết quả mang lại hiệu quả đáng ngạc nhiên và nhà nghiên cứu có thể chạy mã của mình trên nhiều máy tính phát triển và máy chủ chịu trách nhiệm xây dựng hoặc thử nghiệm dựa trên các hệ thống tích hợp liên tục.

Khi tải xuống các gói phụ thuộc, trình quản lý gói npm, pip và gem chủ yếu cài đặt các gói từ các kho lưu trữ công khai chính NPM, PyPI và RubyGems, được coi là ưu tiên cao hơn.

Sự hiện diện của các gói tương tự có cùng tên trong kho của các công ty tư nhân đã bị bỏ qua mà không hiển thị bất kỳ cảnh báo nào hoặc gây ra sự cố điều đó có thể thu hút sự chú ý của các quản trị viên. Trong PyPI, mức độ ưu tiên tải xuống bị ảnh hưởng bởi số phiên bản (bất kể kho lưu trữ, phiên bản mới nhất của gói đã được tải xuống). Trong NPM và RubyGems, mức độ ưu tiên chỉ phụ thuộc vào kho lưu trữ.

Nhà nghiên cứu đã đặt các gói trong kho chứa NPM, PyPI và RubyGems gạch chéo tên của các phụ thuộc nội bộ được tìm thấy, thêm mã vào tập lệnh chạy trước khi cài đặt (được cài đặt sẵn trong NPM) để thu thập thông tin về hệ thống và gửi thông tin nhận được đến máy chủ bên ngoài.

Để truyền tải thông tin về sự thành công của vụ hack, hãy vượt qua tường lửa chặn lưu lượng truy cập bên ngoài, phương pháp tổ chức thông tin liên lạc kênh bí mật qua giao thức DNS. Mã đang chạy đã giải quyết máy chủ trong miền tấn công dưới sự kiểm soát của miền tấn công, giúp thu thập thông tin về các hoạt động thành công trên máy chủ DNS. Thông tin về máy chủ, tên người dùng và đường dẫn hiện tại đã được thông qua.

75% của tất cả các lần thực thi mã được ghi lại có liên quan đến tải xuống gói NPM, chủ yếu do thực tế là có nhiều tên mô-đun JavaScript nội bộ hơn đáng kể so với tên phụ thuộc Python và Ruby.

Fuente: https://medium.com/


Để 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.