Check that the encrypt input uris are not linked to our own internal storage (OKC-01-010)

This commit is contained in:
Dominik Schürmann
2015-09-25 01:02:21 +02:00
parent 9a6aa07089
commit b10b14d9bc

View File

@@ -18,6 +18,7 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
@@ -451,9 +452,29 @@ public class EncryptFilesFragment
} }
// prepares mOutputUris, either directly and returns false, or indirectly /**
// which returns true and will call cryptoOperation after mOutputUris has * Checks that the input uris are not linked to our own internal storage.
// been set at a later point. * This prevents the encryption of our own database (-> export of whole database)
*/
private void securityCheckInternalStorage() {
for (FilesAdapter.ViewModel model : mFilesAdapter.mDataset) {
File fileInput = new File(model.inputUri.getPath());
try {
// the canonical path of the file must not start with /data/data/org.sufficientlysecure.keychain/
if (fileInput.getCanonicalPath().startsWith(getActivity().getApplicationInfo().dataDir)) {
throw new RuntimeException("Encrypting OpenKeychain's private files is not allowed!");
}
} catch (IOException e) {
Log.e(Constants.TAG, "Getting canonical path failed!", e);
}
}
}
/**
* Prepares mOutputUris, either directly and returns false, or indirectly
* which returns true and will call cryptoOperation after mOutputUris has
* been set at a later point.
*/
private boolean prepareOutputStreams() { private boolean prepareOutputStreams() {
switch (mAfterEncryptAction) { switch (mAfterEncryptAction) {
@@ -529,6 +550,8 @@ public class EncryptFilesFragment
} }
securityCheckInternalStorage();
return actionsParcel; return actionsParcel;
} }