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.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- # Quản lý khoá {:#key-management}
- Chạy mã DEX nhúng ngay từ APK
- Tapjacking