应用意图问题 |您的应用包含意图重定向漏洞
Posted
技术标签:
【中文标题】应用意图问题 |您的应用包含意图重定向漏洞【英文标题】:App Intent Problem | Your app contains an Intent Redirection vulnerability 【发布时间】:2022-01-21 23:16:50 【问题描述】:我在 Play 控制台中更新应用后收到此消息。正如谷歌所建议的那样,我正在共享错误所在的方法的代码。我从未更新过这部分代码,也从未出现过任何问题。我不确定为什么它向我显示错误。我需要更新保存文件的方式吗?我希望在这里找到解决方案。
public void saveDocument(ScannedDocument scannedDocument)
Mat doc = (scannedDocument.processed != null) ? scannedDocument.processed : scannedDocument.original;
Intent intent = getIntent();
String fileName;
boolean isIntent = false;
Uri fileUri = null;
if (intent.getAction().equals("android.media.action.IMAGE_CAPTURE"))
fileUri = ((Uri) intent.getParcelableExtra(MediaStore.EXTRA_OUTPUT));
Log.d(TAG, "intent uri: " + fileUri.toString());
try
fileName = File.createTempFile("onsFile", ".jpg", this.getCacheDir()).getPath();
catch (IOException e)
e.printStackTrace();
return;
isIntent = true;
else
String folderName = mSharedPref.getString("storage_folder", FOLDER_NAME);
File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
+ "/" + folderName);
if (!folder.exists())
folder.mkdirs();
Log.d(TAG, "wrote: created folder " + folder.getPath());
fileName = folder.getAbsolutePath()
+ "/DOC-"
+ new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date())
+ ".jpg";
Mat endDoc = new Mat(Double.valueOf(doc.size().width).intValue(),
Double.valueOf(doc.size().height).intValue(), CvType.CV_8UC4);
Core.flip(doc.t(), endDoc, 1);
Imgcodecs.imwrite(fileName, endDoc);
endDoc.release();
try
ExifInterface exif = new ExifInterface(fileName);
exif.setAttribute("UserComment", "Generated");
String nowFormatted = mDateFormat.format(new Date().getTime());
exif.setAttribute(ExifInterface.TAG_DATETIME, nowFormatted);
exif.setAttribute(ExifInterface.TAG_DATETIME_DIGITIZED, nowFormatted);
// exif.setAttribute("Software", "OpenNoteScanner " + BuildConfig.VERSION_NAME + "");
exif.saveAttributes();
catch (IOException e)
e.printStackTrace();
if (isIntent)
InputStream inputStream = null;
OutputStream realOutputStream = null;
try
inputStream = new FileInputStream(fileName);
realOutputStream = this.getContentResolver().openOutputStream(fileUri);
// Transfer bytes from in to out
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0)
realOutputStream.write(buffer, 0, len);
catch (FileNotFoundException e)
e.printStackTrace();
return;
catch (IOException e)
e.printStackTrace();
return;
finally
try
inputStream.close();
realOutputStream.close();
catch (IOException e)
e.printStackTrace();
animateDocument(fileName, scannedDocument);
Log.d(TAG, "wrote: " + fileName);
if (isIntent)
new File(fileName).delete();
setResult(RESULT_OK, intent);
finish();
else
addImageToGallery(fileName, this);
refreshCamera();
【问题讨论】:
【参考方案1】:Google 在Mitigating Intent Redirection vulnerabilities 上有一个页面,您应该仔细阅读。
简而言之,该漏洞可能1被恶意应用利用以允许其访问私有应用组件或文件。
该文档解释了缓解此漏洞的三种可能方法。不幸的是,没有足够的上下文来确定这三个中的哪一个最适合您的应用程序。但是,第一个很简单:
“如果受影响的应用组件不需要从其他应用接收 Intent,那么您可以通过在 Manifest 中设置 `android:exported="false" 来将该应用组件设为私有。” p>
我从未更新过这部分代码,也从未出现过任何问题。
这可能意味着这是一种相对较新的 Android 漏洞,或者自您上次发布应用以来,Google 检测它的方法变得更加严格。
我需要更新保存文件的方式吗?
可能是的。或者可能有一种缓解措施就足够了。
希望能在这里找到解决办法。
在我链接到的 Google 文档中有一些可能的解决方案。
1 - 如果实际上可以利用您应用程序中的漏洞,则没有实际意义。关键是 Google Play 商店的扫描/分析/测试方法发现了他们认为是问题。他们的目标是保护 Play 商店用户。
【讨论】:
以上是关于应用意图问题 |您的应用包含意图重定向漏洞的主要内容,如果未能解决你的问题,请参考以下文章
来自 Google Play 的通知 ||恶意行为或用户数据政策 ||意图重定向
想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图