Các cấu hình sai của SendBird chưa kể

Trong một lần hợp tác săn lỗi ngẫu nhiên với nhóm của tôi ( thaivu , lamscun , thefool45 , fergustr4n ), chúng tôi đã đụng phải một mục tiêu riêng tư ngẫu nhiên như thường lệ. Trong quá trình khai thác mục tiêu, tôi phát hiện ra rằng mục tiêu của chúng tôi đã triển khai tính năng trò chuyện bằng dịch vụ từ nền tảng của bên thứ ba. Sau khi tìm kiếm google dork, tôi thấy rằng tính năng trò chuyện của mục tiêu của chúng tôi là một sản phẩm của SendBird— “nền tảng API tương tác hàng đầu được các ứng dụng kỹ thuật số hiện đại như Paypal, Yahoo, Reddit, Delivery Hero và Hinge tin cậy để dễ dàng nhúng trò chuyện, thoại và video thời gian thực vào ứng dụng của họ”. Nó thu hút sự quan tâm của tôi và tôi quyết định nghiên cứu thêm về cách thức hoạt động của nó để xem liệu có bất kỳ hành động ẩn nào mà tôi có thể thực hiện hoặc các cấu hình ẩn mà các nhà phát triển có thể bỏ sót hay không…
Thứ nhất — Tìm hiểu các sản phẩm và tài liệu của bên thứ ba
Tôi đã truy cập thẳng vào Trang web chính của SendBird để biết mình sẽ phải đối mặt với điều gì. SendBird Developer Portal cung cấp cho các nhà phát triển các tài liệu rất rõ ràng và hữu ích cho từng loại sản phẩm (hướng dẫn sử dụng, API mẫu, Ghi chú, Khuyến nghị,…).
Có một vài ghi chú thú vị vào thời điểm tôi bắt đầu nghiên cứu của mình ( Một số có thể đã lỗi thời khi bạn đọc blog này ):
- Máy chủ của Ứng dụng SendBird của Khách hàng sẽ ở dạng “https://api-{application_id}.sendbird.com”
- Sendbird cung cấp các tùy chọn kiểm soát truy cập khác nhau và một số tùy chọn được bật theo mặc định để tránh các lỗi không mong muốn khi tạo ứng dụng mẫu.
- Khách hàng không thể tự thay đổi cài đặt Access Control List. Chỉ một thành viên trong nhóm Kỹ thuật giải pháp của Sendbird mới có thể thay đổi cài đặt ACL .
- Theo mặc định, Cài đặt bảo mật ứng dụng SendBird dành cho “ người dùng không có mã thông báo truy cập ” là “Đọc & Viết” — trò chuyện và “Gọi & Trả lời” — gọi.
Sau khi có cái nhìn tổng quan về cách thức hoạt động của SendBird, tôi quay lại mục tiêu sử dụng của mình, tìm hiểu các chức năng để xác minh với những gì tôi đã đọc ở trên. Tôi đã xác nhận rằng có các API với máy chủ có cùng mẫu với “api-{application_id}.sendbird.com” và có các đường dẫn giống như tôi đã thấy trong tài liệu. Sau đó, tôi nhanh chóng sử dụng phiên API hiện tại để thử các API khác nhau trong tài liệu API. Một cách ngẫu nhiên, tôi đã chọn một API liệt kê người dùng trong Ứng dụng SendBird “GET /v3/users/” và thật ngạc nhiên, máy chủ đã phản hồi lại với tất cả người dùng được liệt kê !!! Vui mừng nhảy cẫng lên, tôi bảo các đồng đội đến kiểm tra.

Chúng tôi đã thử và biết rằng phiên của người dùng có thể gọi nhiều API khác nhau và thực hiện nhiều hành động đối với người dùng, kênh, tin nhắn, … trong Ứng dụng SendBird của các mục tiêu của chúng tôi. Đó chắc chắn là một điều khiển truy cập bị hỏng lớn do cấu hình sai của ACL !!!
Tuy nhiên, có một điều mà chúng tôi không thể hiểu được đó là “Khóa phiên” đến từ đâu và nó được tạo ra như thế nào vì chúng tôi không thể thấy giá trị “Khóa phiên” trong bất kỳ phản hồi nào?

Quay lại Tài liệu SendBird để đọc thêm và làm nhiều hơn, chúng tôi biết thêm một số điều:
- “Theo mặc định, máy chủ Sendbird có thể xác thực người dùng chỉ bằng một ID người dùng duy nhất”
- “Nếu không tìm thấy ID người dùng phù hợp, máy chủ sẽ tạo một tài khoản người dùng mới với ID người dùng đó”
- “Xác thực người dùng có thể được thực hiện chỉ với ID người dùng của riêng họ, nhưng cũng có thể bằng mã thông báo truy cập hoặc mã thông báo phiên”
- Mục tiêu của chúng tôi là ClientApp có thể đã được xác thực với Máy chủ SendBird qua WebSocket với định dạng URL Nâng cấp WebSocket là: “ wss://ws-{application_id}.sendbird.com/?user_id={user_id}&ai={application_id}&access_token={access_token }”
- Máy khách SendBird của mục tiêu của chúng tôi được xác thực với máy chủ SendBird thông qua WebSocket.
- “Khóa phiên” sẽ được gửi tới máy khách qua Tin nhắn WebSocket sau khi máy khách gọi Nâng cấp URL WebSocket như trên
- Ứng dụng khách SendBird của mục tiêu của chúng tôi chỉ có thể xác thực bằng ID người dùng với “ access_token=null”
- Chúng tôi cũng đã tìm thấy một API ẩn để xác thực chỉ qua USER ID dưới dạng cách WebSocket trong tệp JS: “ POST https://api-{application_id}.sendbird.com/v3/users/{user_id}/login — body: {“ app_id”:”<application_id>”} ”
Thứ 3 — Cách thực hiện kiểm tra lỗ hổng lớn trên các Phiên bản SendBird khác trong các mục tiêu khác nhau
- Chúng tôi phải xác nhận rằng các mục tiêu của chúng tôi triển khai SendBird trong các ứng dụng của họ bằng cách thu thập thông tin, thực hiện khám phá nội dung trên các mục tiêu và grep cho từ “sendbird” và biểu thức chính quy của ID ứng dụng của SendBird “ [0–9A-F]{8}-[0– 9A-F]{4}-[0–9A-F]{4}-[0–9A-F]{4}-[0–9A-F]{12} ”
- Sau khi đã xác nhận các mục tiêu triển khai SendBird và lấy ID ứng dụng SendBird, chúng tôi kiểm tra xem Cài đặt bảo mật ứng dụng SendBird cho “người dùng không có mã thông báo truy cập” có bị định cấu hình sai hay không bằng cách thực hiện đăng nhập/tạo người dùng ẩn danh bằng các cách sau:
- wss://ws-{application_id}.sendbird.com/?user_id={user_id}&ai={application_id}&access_token={access_token}
- ĐĂNG https://api-{application_id}.sendbird.com/v3/users/{user_id}/login — nội dung: {“app_id”:”<application_id>”}
- https://www.postman.com/sendbird/workspace/sendbird-platform-api/overview
- https://sendbird.com/docs
- Rò rỉ thông tin nhạy cảm của người dùng
- Tạo kênh trò chuyện (không tạo giải đấu mới)
- Quản lý kênh trò chuyện
- Cập nhật hồ sơ trò chuyện của người dùng
- Cập nhật cấu hình kênh nhóm
- Trò chuyện với bất kỳ người dùng nào
- Kẻ tấn công có thể chỉnh sửa/xóa tin nhắn của bất kỳ người dùng nào khi đang đóng vai trò điều hành kênh tự tạo.
- Kẻ tấn công có thể cập nhật thông tin chi tiết, cấu hình của kênh khi đang là thành viên của bất kỳ kênh nào.
- Theo tài liệu, một Người dùng SendBird chỉ có thể tham gia giới hạn 2000 kênh nhóm, kẻ tấn công có thể tạo 2000 kênh nhóm và thêm tất cả người dùng trong Ứng dụng SendBird vào các kênh đó. Do đó, tất cả người dùng không thể tham gia bất kỳ kênh SendBird nào sau đó, điều này có thể gây ra Từ chối dịch vụ.
- …
- SendBird có nhiều tài liệu hơn về các khuyến nghị bảo mật, đặc biệt là về ACL.
- SendBird hiện cho phép khách hàng của họ tự thay đổi ACL.
4. Nếu bước số 2 không thành công, chúng tôi sẽ thực hiện thủ công các chức năng trên mục tiêu, nhận Phiên người dùng SDK theo cách thông thường mà mục tiêu thực hiện và kiểm tra cấu hình sai của ACL như bước 3.
5. Tự động hóa tất cả!
Tài liệu tham khảo cho API SendBird để kiểm tra:

Sau khi đã kiểm tra các lỗ hổng trên các Ứng dụng SendBird khác nhau, hầu hết chúng đều dễ bị cấu hình sai ACL. Tuy nhiên, dựa trên các ứng dụng khác nhau với các yêu cầu và tác động kinh doanh khác nhau, mức độ nghiêm trọng cũng phải được coi là khác nhau (từ Trung bình - Nghiêm trọng).
Các tác động rất đa dạng:





Hợp tác ăn ý với thaivu , lamscun , thefool45, fergustr4n $$$$

### Cập nhật từ SendBird