应用意图问题 |您的应用包含意图重定向漏洞

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 商店用户。

【讨论】:

以上是关于应用意图问题 |您的应用包含意图重定向漏洞的主要内容,如果未能解决你的问题,请参考以下文章

如何解决android原生应用程序中的意图重定向?

来自 Google Play 的通知 ||恶意行为或用户数据政策 ||意图重定向

如何在 webview 中捕获网站重定向

想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图

Android Studio:重定向到手机的谷歌地图应用程序,并预先填写了开始和结束地址

您的应用容易受到 Intent 重定向的影响