createPackageContext
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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ị thực thi mã bởi một ứng dụng độc hại. Đ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:
Ứ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
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-26 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-26 UTC."],[],[],null,["# createPackageContext\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\n public abstract Context createPackageContext (String packageName, int flags)\n\nThe method [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) is used when a developer wants to create\na context for another application in their own application.\n\nFor example, if developers want to get resources from a 3rd-party application or\ncall methods from it, they would use `createPackageContext`.\n\nHowever, if an application calls `createPackageContext` with the\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) flags, and then\ncalls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()), this could result in making the application\nvulnerable to code execution by a malicious application. This can occur, for\nexample, when an attacker impersonates an unclaimed package name (package\nsquatting) that the developer had expected to be present on the user's device.\n\nTo summarize the criteria that have to be met to make an application vulnerable\nto this kind of attack:\n\nVulnerable App:\n\n- Calls [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with [`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE).\n- Calls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()) on the retrieved context.\n\nMalicious App:\n\n- Is able to claim the package name that the vulnerable app passes to [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)).\n- Exports android:appComponentFactory.\n\nImpact\n------\n\nWhen createPackageContext is used in an insecure way by an application, this can\nlead to a malicious application being able to gain arbitrary code execution in\nthe context of the vulnerable application.\n\nMitigations\n-----------\n\nDon't call [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) unless absolutely necessary.\n\nIn cases where this is unavoidable, make sure to implement a mechanism to verify\nthe identity of the package you are executing [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) on (e.g. by verifying the package's signature).\n\nResources\n---------\n\n- [createPackageContext Documentation](/reference/android/content/Context#createPackageContext(java.lang.String,%20int))\n- [OverSecured blog post on createPackageContext code execution](https://blog.oversecured.com/Android-arbitrary-code-execution-via-third-party-package-contexts)"]]