android:exported

Danh mục OWASP: MASVS-PLATFORM: Tương tác với nền tảng

Tổng quan

Thuộc tính android:exported xác định liệu các thành phần của ứng dụng khác có thể chạy một thành phần (hoạt động, dịch vụ, broadcast receiver, v.v.) hay không:

  • Nếu là true, mọi ứng dụng đều có thể truy cập vào hoạt động và chạy hoạt động đó theo tên lớp chính xác.
  • Nếu là false, chỉ các thành phần của cùng một ứng dụng, các ứng dụng có cùng mã nhận dạng người dùng hoặc các thành phần hệ thống đặc quyền mới có thể chạy hoạt động đó.

Logic phía sau giá trị mặc định của thuộc tính này đã thay đổi theo thời gian và khác nhau tuỳ thuộc vào loại thành phần cũng như phiên bản Android. Ví dụ: theo mặc định, trên API cấp 16 (Android 4.1.1) trở xuống, giá trị của các phần tử <provider> được đặt thành true. Việc không thiết lập thuộc tính này rõ ràng dẫn đến nguy cơ có các giá trị mặc định khác nhau giữa một số thiết bị.

Tác động

Trường hợp có các giá trị mặc định khác nhau nghĩa là bạn có thể vô tình tiết lộ các thành phần nội bộ của ứng dụng. Sau đây là một số ví dụ về hậu quả:

Các cuộc tấn công từ chối dịch vụ. Các ứng dụng khác truy cập trái phép vào các thành phần nội bộ để sửa đổi chức năng nội bộ của ứng dụng. Rò rỉ dữ liệu nhạy cảm. Quá trình thực thi mã trong ngữ cảnh của ứng dụng dễ bị tấn công.

Giải pháp giảm thiểu

Luôn đặt thuộc tính android:exported một cách rõ ràng. Vì vậy, bạn không được phép diễn giải và thể hiện rõ ý định của mình về khả năng hiển thị của một thành phần.