Lỗ hổng Truyền tải qua đường dẫn

Thông tin này dành cho nhà phát triển có (các) ứng dụng chứa lỗ hổng Truyền tải qua đường dẫn.

Chuyện gì sẽ xảy ra

Kể từ ngày 16 tháng 1 năm 2018, Google Play đã bắt đầu chặn việc xuất bản mọi ứng dụng hoặc bản cập nhật mới có chứa lỗ hổng Path Traversal. Vui lòng tham khảo thông báo trên Play Console của bạn.Sau thời hạn hiển thị trong Play Console, chúng tôi có thể xóa mọi ứng dụng có lỗ hổng bảo mật chưa được khắc phục khỏi Google Play.

Hành động cần thiết

  1. Đăng nhập vào Play Console và chuyển đến phần Cảnh báo để xem những ứng dụng bị ảnh hưởng và thời hạn giải quyết những vấn đề này.
  2. Cập nhật các ứng dụng bị ảnh hưởng và khắc phục lỗ hổng.
  3. Gửi phiên bản cập nhật của các ứng dụng bị ảnh hưởng.

Sau khi bạn gửi lại, chúng tôi sẽ xem xét lại ứng dụng của bạn. Quá trình này có thể mất vài giờ. Nếu ứng dụng vượt qua quy trình xem xét và được xuất bản thành công thì bạn không cần thực hiện thêm hành động nào. Nếu ứng dụng không vượt qua được quy trình xem xét thì phiên bản ứng dụng mới sẽ không được xuất bản và bạn sẽ nhận được thông báo qua email.

Thông tin chi tiết bổ sung

Các cách triển khai openFile trong ContentProviders đã xuất có thể dễ bị tấn công nếu các cách này không xác thực thông số Uri đến một cách thích hợp. Một ứng dụng độc hại có thể cung cấp một Uri được tạo thủ công (ví dụ như một Uri có chứa "/../") để đánh lừa ứng dụng của bạn trả lại ParcelFileDescriptor cho một tệp nằm ngoài thư mục dự định và qua đó cho phép ứng dụng độc hại truy cập bất kỳ tệp nào có thể truy cập được từ ứng dụng của bạn.

Có hai chiến lược được đề xuất để loại bỏ lỗ hổng Truyền tải qua đường dẫn trong ContentProvider.

1. Nếu ContentProvider của bạn không cần phải hiển thị với các ứng dụng khác:

2. Nếu ContentProvider của bạn cần phải hiển thị với các ứng dụng khác:

Bạn phải đảm bảo chính xác rằng dữ liệu nhập vào openFile chứa ký tự truyền tải qua đường dẫn không được làm cho ứng dụng của bạn trả về tệp không mong muốn. Bạn có thể thực hiện việc này bằng cách kiểm tra đường dẫn chuẩn của tệp. Ví dụ:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Lưu ý : Xin lưu ý rằng việc gọi getLastPathSegment trên tham số Uri không an toàn. Ứng dụng độc hại có thể cung cấp đường dẫn Uri được mã hóa như %2F..%2F..path%2Fto%2Fsecret.txt, vì thế kết quả của getLastPathSegment sẽ là /../../path/to/secret.txt. Ví dụ: cách triển khai sau vẫn dễ bị tấn công.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

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

Nếu có câu hỏi kỹ thuật về lỗ hổng bảo mật, bạn có thể đăng lên Stack Overflow và sử dụng thẻ “android-security”. Để biết rõ các bước cần thực hiện nhằm giải quyết vấn đề này, bạn có thể liên hệ với nhóm hỗ trợ nhà phát triển 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
6692174419715378557
true
Tìm kiếm trong Trung tâm trợ giúp
true
true
true
true
true
5016068
false
false