Skip to content

Commit 1194a5c

Browse files
authored
Merge pull request #10544 from nextcloud/fix/upload-external-uri-internal-path
Prevent URI uploads from external apps that target private storage
2 parents acd8003 + 64ddaf4 commit 1194a5c

File tree

5 files changed

+227
-213
lines changed

5 files changed

+227
-213
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.owncloud.android.ui.helpers
2+
3+
import android.net.Uri
4+
import androidx.test.core.app.launchActivity
5+
import com.nextcloud.client.TestActivity
6+
import com.owncloud.android.AbstractIT
7+
import com.owncloud.android.files.services.FileUploader
8+
import org.junit.Assert
9+
import org.junit.Test
10+
11+
class UriUploaderIT : AbstractIT() {
12+
13+
@Test
14+
fun testUploadPrivatePathSharedPreferences() {
15+
launchActivity<TestActivity>().use { scenario ->
16+
scenario.onActivity { activity ->
17+
val packageName = activity.packageName
18+
val path = "file:///data/data/$packageName/shared_prefs/com.nextcloud.client_preferences.xml"
19+
testPrivatePath(activity, path)
20+
}
21+
}
22+
}
23+
24+
@Test
25+
fun testUploadPrivatePathUserFile() {
26+
launchActivity<TestActivity>().use { scenario ->
27+
scenario.onActivity { activity ->
28+
val packageName = activity.packageName
29+
val path = "file:///storage/emulated/0/Android/media/$packageName/nextcloud/test/welcome.txt"
30+
testPrivatePath(activity, path)
31+
}
32+
}
33+
}
34+
35+
private fun testPrivatePath(activity: TestActivity, path: String) {
36+
val sut = UriUploader(
37+
activity,
38+
listOf(Uri.parse(path)),
39+
"",
40+
activity.user.orElseThrow(::RuntimeException),
41+
FileUploader.LOCAL_BEHAVIOUR_MOVE,
42+
false,
43+
null
44+
)
45+
val uploadResult = sut.uploadUris()
46+
Assert.assertEquals(
47+
"Wrong result code",
48+
UriUploader.UriUploaderResultCode.ERROR_SENSITIVE_PATH,
49+
uploadResult
50+
)
51+
}
52+
}

app/src/main/java/com/owncloud/android/files/services/FileUploader.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -467,11 +467,6 @@ private void startNewUpload(
467467
OCFile file,
468468
boolean disableRetries
469469
) {
470-
if (file.getStoragePath().startsWith("/data/data/")) {
471-
Log_OC.d(TAG, "Upload from sensitive path is not allowed");
472-
return;
473-
}
474-
475470
OCUpload ocUpload = new OCUpload(file, user);
476471
ocUpload.setFileSize(file.getFileLength());
477472
ocUpload.setNameCollisionPolicy(nameCollisionPolicy);

app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import android.view.MenuInflater;
4848
import android.view.MenuItem;
4949
import android.view.View;
50+
import android.view.ViewGroup;
5051
import android.view.WindowManager.LayoutParams;
5152
import android.widget.AdapterView;
5253
import android.widget.AdapterView.OnItemClickListener;
@@ -164,7 +165,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
164165

165166
private final static Charset FILENAME_ENCODING = Charset.forName("UTF-8");
166167

167-
private NestedScrollView mEmptyListContainer;
168+
private ViewGroup mEmptyListContainer;
168169
private TextView mEmptyListMessage;
169170
private TextView mEmptyListHeadline;
170171
private ImageView mEmptyListIcon;

app/src/main/java/com/owncloud/android/ui/helpers/UriUploader.java

Lines changed: 0 additions & 207 deletions
This file was deleted.

0 commit comments

Comments
 (0)