Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
public abstract Context createPackageContext (String packageName, int flags)
Phương thức createPackageContext
được dùng khi nhà phát triển muốn tạo một ngữ cảnh cho một ứng dụng khác trong ứng dụng của riêng họ.
Ví dụ: nếu nhà phát triển muốn lấy tài nguyên từ một ứng dụng bên thứ ba hoặc gọi các phương thức từ ứng dụng đó, họ sẽ sử dụng createPackageContext
.
Tuy nhiên, nếu một ứng dụng gọi createPackageContext
bằng cờ CONTEXT_IGNORE_SECURITY
và CONTEXT_INCLUDE_CODE
, sau đó gọi getClassLoader()
, thì điều này có thể khiến ứng dụng dễ bị một ứng dụng độc hại thực thi mã. Điều này có thể xảy ra, chẳng hạn như khi kẻ tấn công mạo danh tên gói chưa được xác nhận quyền sở hữu (lấy cắp gói) mà nhà phát triển dự kiến sẽ có trên thiết bị của người dùng.
Tóm tắt các tiêu chí phải đáp ứng để ứng dụng dễ bị loại hình tấn công này:
Ứng dụng dễ bị tấn công:
- Gọi
createPackageContext
bằngCONTEXT_IGNORE_SECURITY
vàCONTEXT_INCLUDE_CODE
. - Gọi
getClassLoader()
trên ngữ cảnh được truy xuất.
Ứng dụng độc hại:
- Có thể xác nhận quyền sở hữu tên gói mà ứng dụng dễ bị tấn công chuyển đến
createPackageContext
. - Xuất android:appComponentFactory.
Tác động
Khi một ứng dụng sử dụng createPackageContext theo cách không an toàn, điều này có thể dẫn đến việc một ứng dụng độc hại có thể thực thi mã tuỳ ý trong ngữ cảnh của ứng dụng dễ bị tấn công.
Giải pháp giảm thiểu
Đừng gọi createPackageContext
bằng CONTEXT_IGNORE_SECURITY
và CONTEXT_INCLUDE_CODE
trừ phi thực sự cần thiết.
Trong trường hợp không thể tránh khỏi, hãy nhớ triển khai một cơ chế để xác minh danh tính của gói mà bạn đang thực thi createPackageContext
(ví dụ: bằng cách xác minh chữ ký của gói).
Tài nguyên
- Tài liệu về createPackageContext
- Bài đăng trên blog OverSecured về việc thực thi mã createPackageContext