CVE-2023-28131 Expo Framework Oauth flaw leads to credential leak​​​​​​​​​​​​​​

Severity: Critical

CVSSv3 Score: 9.6

Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Mô tả:

Expo là một nền tảng nguồn mở để hỗ trợ phát triển các ứng dụng phổ biến cho Android, iOS và web bằng JavaScript và React.

Ngày 18 tháng 2 năm 2023, tổ chức nghiên cứu bảo mật Salt Labs thông báo cho Expo về một lỗ hổng bảo mật trong framework expo.io, cho phép kẻ tấn công chiếm quyền tài khoản và đánh cắp thông tin đăng nhập của user trên các ứng dụng/website có sử dụng dịch vụ Oauth (Expo AuthSession Redirect Proxy) của Expo Framework.

Theo đó, kẻ tấn công có thể khai thác lỗ hổng bằng cách chặn và thay đổi luồng dữ liệu Expo để gửi thông tin đăng nhập của người dùng đến một website độc hại thay vì đích đến ứng dụng ban đầu. Cụ thể, kẻ tấn công sẽ đánh lừa người dùng để truy cập vào một liên kết độc hại, liên kết này có thể được gửi cho nạn nhân qua nhiều cách khác nhau (bao gồm email, tin nhắn văn bản, website do kẻ tấn công kiểm soát, v.v.). Sau khi người dùng bấm vào link sẽ chuyển hướng đăng nhập vào nhà cung cấp xác thực bên thứ ba (Facebook, Google, Apple, Twitter) và cuối cùng thông tin xác thực từ bên thứ ba sẽ được trả về địa chỉ của attacker như đã cấu hình từ trước.

Lỗ hổng tồn tại do trước đây auth.expo.io lưu trữ URL callback của ứng dụng mà không cần sự xác nhận của người dùng về URL callback đó. Sau bản vá nhanh, Expo đã yêu cầu người dùng xác nhận sự tin tưởng với các URL callback, sau đó mới gửi thông tin xác thực về các địa chỉ này. Hiện tại Expo đã không còn chạy dịch vụ Expo AuthSession Redirect Proxy - auth.expo.io này nữa và có các khuyến nghị thay thế cho developers. Ngày 24/4, lỗ hổng được định danh CVE-2023-28131.

Cách khắc phục

Developers cần cấu hình ứng dụng để điều hướng xác thực tới nhà cung cấp xác thực bên thứ ba trực tiếp thay vì sử dụng dịch vụ Expo AuthSession Redirect Proxy theo hướng dẫn chi tiết tại https://github.com/expo/fyi/blob/main/auth-proxy-migration.md :

  • Sử dụng development builds thay vì Expo Go, hỗ trợ custom URL schemes: (https://docs.expo.dev/develop/development-builds/introduction/?redirected )
     
  • Redirect trực tiếp từ authentication provider tới ứng dụng: cấu hình deep link trong app URL scheme
     
  • Không sử dụng Expo AuthSession Redirect Proxy: cấu hình useProxy với giá trị false khi gọi promptAsync method.


Tham khảo

  1. https://salt.security/blog/a-new-oauth-vulnerability-that-may-impact-hundreds-ofonline-services
     
  2. https://www.darkreading.com/endpoint/oauth-flaw-in-expo-platform-affects-hundredsof-third-party-sites-apps
     
  3. https://blog.expo.dev/security-advisory-for-developers-using-authsessions-useproxyoptions-and-auth-expo-io-e470fe9346df
     
  4. https://github.com/expo/fyi/blob/main/auth-proxy-migration.md
     
  5. https://docs.expo.dev/develop/development-builds/introduction/?redirected