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
- Đă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.
- Cập nhật các ứng dụng bị ảnh hưởng và khắc phục lỗ hổng.
- 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:
- Bạn có thể sửa đổi thẻ <provider> của ContentProvider bị ảnh hưởng trong tệp kê khai để đặt android:exported=”false”. Điều này sẽ ngăn các ứng dụng khác gửi Intents đến ContentProvider bị ảnh hưởng.
- Bạn cũng có thể đặt thuộc tính android:permission là một permission vớiandroid:protectionLevel=“signature” để ngăn các ứng dụng được viết bởi nhà phát triển khác gửi Intents đên ContentProvider bị ảnh hưởng.
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.