Khắc phục lỗ hổng PendingIntent ngầm

Thông tin này dành cho các nhà phát triển có (các) ứng dụng chứa lỗ hổng PendingIntent ngầm.

Hiện trạng

Ít nhất một ứng dụng của bạn có chứa một lỗ hổng PendingIntent ngầm ẩn. Có thể vấn đề này sẽ gây ra các mối đe doạ bảo mật dưới dạng sự cố từ chối dịch vụ, đánh cắp dữ liệu riêng tư chuyển lên cấp đặc quyền trái phép. Vui lòng xem các bước chi tiết dưới đây để khắc phục vấn đề này trong ứng dụng.  Bạn có thể tìm thấy (các) vị trí của (các) trường hợp sử dụng PendingIntent ngầm ẩn trong phần thông báo của Play Console cho ứng dụng của bạn. Nếu một vị trí kết thúc bằng “(trong đoạn mã được tải linh động)” thì tức là vị trí này sẽ nằm trong đoạn mã do ứng dụng hoặc do các thư viện được sử dụng trong ứng dụng đó tải theo phương thức linh động. Thường thì ứng dụng sử dụng đoạn mã được tải linh động thông qua chế độ phân phối tính năng theo yêu cầu, mặc dù cũng có một số kỹ thuật khác mà chúng tôi không đề xuất (một số kỹ thuật không được đề xuất cũng vi phạm Chính sách của Google Play và vì vậy không nên được áp dụng). Ngoài ra, chương trình đóng gói có thể biến đổi đoạn mã xử lý ứng dụng thành đoạn mã được tải linh động.

Bạn nên khắc phục vấn đề này nhưng không bắt buộc. Vấn đề này sẽ không ảnh hưởng đến trạng thái phát hành của ứng dụng.

Thông tin chi tiết bổ sung

Ứng dụng Android gửi tin nhắn giữa các thành phần bằng Ý định. Ý định có thể chỉ định thành phần mục tiêu (Ý định tường minh) hoặc liệt kê một hành động chung và cho phép hệ điều hành phân phối Ý định đó đến bất kỳ thành phần nào trên thiết bị đã đăng ký một Bộ lọc ý định khớp với hành động đó (Ý định ngầm ẩn).

PendingIntent (Ý định phân phối sau) là những Ý định được ủy quyền cho một ứng dụng khác để phân phối vào một thời điểm trong tương lai. Việc tạo một ý định ngầm ẩn được gói trong một PendingIntent sau là một lỗ hổng bảo mật có thể dẫn đến sự cố từ chối dịch vụ, đánh cắp dữ liệu riêng tư chuyển lên cấp đặc quyền trái phép. 

Bước tiếp theo

1. Cập nhật ứng dụng của bạn và khắc phục cảnh báo “PendingIntent ngầm” theo các bước được nêu bật dưới đây.

Xem lại ứng dụng của bạn để tìm vị trí nơi PendingIntent được tạo. Ví dụ: mã sau đây tạo ra một PendingIntent bọc một ý định ngầm: 

// Tạo một ý định ngầm rồi bọc ý định đó trong một PendingIntent

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

Nhà phát triển nên khắc phục lỗ hổng này bằng cách áp dụng một trong các biện pháp sau (hoặc tốt nhất là tất cả biện pháp cùng lúc):

  • Đảm bảo rằng các trường hành động, gói thành phần của Ý định cơ sở đều đã được thiết lập; 
  • Đảm bảo rằng PendingIntent chỉ được phân phối đến các thành phần đáng tin cậy; 
  • Sử dụng FLAG_IMMUTABLE (được bổ sung trong SDK 23) để tạo PendingIntent. Nhờ đó, các ứng dụng nhận được PendingIntent sẽ không điền dữ liệu vào các thuộc tính chưa có dữ liệu. Trong trường hợp ứng dụng cũng hoạt động trên các thiết bị chạy SDK 22 trở lên, nhà phát triển nên áp dụng các chế độ trước đó, đồng thời cải thiện thao tác tạo PendingIntent bằng mẫu sau:

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // Tạo một PendingIntent bằng FLAG_IMMUTABLE

} else {

  // Các mã hiện có tạo ra một PendingIntent

}

2. Gửi tệp APK đã cập nhật

Cách gửi gói ứng dụng hoặc tệp APK đã cập nhật:

  1. Chuyển đến Play Console.
  2. Chọn ứng dụng.
  3. Chuyển đến Trình khám phá gói ứng dụng.
  4. Chọn phiên bản ứng dụng của tệp APK/gói ứng dụng không tuân thủ trong trình đơn thả xuống ở trên cùng bên phải rồi ghi lại bản phát hành của phiên bản đó.
  5. Chuyển đến kênh có vấn đề về chính sách. Kênh đó sẽ là một trong 4 trang sau: Thử nghiệm Công khai/Khép kín/Nội bộ hoặc Chính thức.
  6. Ở gần phía trên cùng bên phải của trang, hãy nhấp vào Tạo bản phát hành mới. (Có thể bạn sẽ phải nhấp vào phần Quản lý kênh trước)
    • Nếu bản phát hành có tệp APK vi phạm đang ở trạng thái bản nháp, hãy hủy bản phát hành đó.
  7. Thêm phiên bản tuân thủ chính sách của gói ứng dụng hoặc tệp APK.
    • Đảm bảo rằng phiên bản gói ứng dụng hoặc tệp APK không tuân thủ phải thuộc phần Không được đưa vào của bản phát hành này. Để được hướng dẫn thêm, vui lòng xem phần "Không được đưa vào (gói ứng dụng và tệp APK)" trong bài viết này trên Trung tâm trợ giúp của Play Console.
  8. Chọn Lưu để lưu những thay đổi mà bạn thực hiện đối với bản phát hành.
  9. Sau khi chuẩn bị xong bản phát hành, hãy chọn Xem lại bản phát hành.

Nếu bạn phát hành tệp APK không tuân thủ trên nhiều kênh, hãy lặp lại các bước 5-9 trên mỗi kênh.

Trong thời gian này, ứng dụng mới hoặc bản cập nhật ứng dụng của bạn sẽ ở trạng thái đang xem xét cho đến khi yêu cầu của bạn được xem xét xong. Bạn sẽ vẫn thấy thông báo này khi chưa cập nhật ứng dụng đúng cách.

Chúng tôi sẵn lòng trợ giúp

Nếu có câu hỏi kỹ thuật về lỗ hổng bảo mật này, bạn có thể đăng lên Stack Overflow và gắn thẻ "android-security". Để hiểu rõ hơn về các bước cần thực hiện để giải quyết vấn đề này, bạn có thể liên hệ với nhóm hỗ trợ của chúng tôi.

Thông tin này có hữu ích không?

Chúng tôi có thể cải thiện trang này bằng cách nào?
false
Trình đơn chính
7230281632072783356
true
Tìm kiếm trong Trung tâm trợ giúp
true
true
true
true
true
5016068
false
false