安全分析报告: Shadowrocket v10.8.5

安全分数


安全分数 51/100

风险评级


等级

  1. A
  2. B
  3. C
  4. F

严重性分布 (%)


隐私风险

3

用户/设备跟踪器


调研结果

高危 2
中危 21
信息 2
安全 2
关注 7

高危 应用程序使用带PKCS5/PKCS7填充的加密模式CBC。此配置容易受到填充oracle攻击。

应用程序使用带PKCS5/PKCS7填充的加密模式CBC。此配置容易受到填充oracle攻击。
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#identifying-insecure-andor-deprecated-cryptographic-algorithms-mstg-crypto-4

Files:
com/v2cross/shadowrocket/util/AES256.java, line(s) 39,24

中危 应用程序数据可以被备份

[android:allowBackup=true]
这个标志允许任何人通过adb备份你的应用程序数据。它允许已经启用了USB调试的用户从设备上复制应用程序数据。

中危 Activity (com.v2cross.shadowrocket.ui.ScSwitchActivity) 未被保护。

[android:exported=true]
发现 Activity与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Activity (com.v2cross.shadowrocket.ui.SwitchProfileActivity) 未被保护。

[android:exported=true]
发现 Activity与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Broadcast Receiver (com.v2cross.shadowrocket.receiver.WidgetProvider) 未被保护。

[android:exported=true]
发现 Broadcast Receiver与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Service (com.v2cross.shadowrocket.service.QSTileService) 受权限保护, 但是应该检查权限的保护级别。

Permission: android.permission.BIND_QUICK_SETTINGS_TILE [android:exported=true]
发现一个 Service被共享给了设备上的其他应用程序,因此让它可以被设备上的任何其他应用程序访问。它受到一个在分析的应用程序中没有定义的权限的保护。因此,应该在定义它的地方检查权限的保护级别。如果它被设置为普通或危险,一个恶意应用程序可以请求并获得这个权限,并与该组件交互。如果它被设置为签名,只有使用相同证书签名的应用程序才能获得这个权限。

中危 Activity (com.v2cross.shadowrocket.ui.TaskerActivity) 未被保护。

[android:exported=true]
发现 Activity与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Broadcast Receiver (com.v2cross.shadowrocket.receiver.TaskerReceiver) 未被保护。

[android:exported=true]
发现 Broadcast Receiver与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Broadcast Receiver (com.google.firebase.iid.FirebaseInstanceIdReceiver) 受权限保护, 但是应该检查权限的保护级别。

Permission: com.google.android.c2dm.permission.SEND [android:exported=true]
发现一个 Broadcast Receiver被共享给了设备上的其他应用程序,因此让它可以被设备上的任何其他应用程序访问。它受到一个在分析的应用程序中没有定义的权限的保护。因此,应该在定义它的地方检查权限的保护级别。如果它被设置为普通或危险,一个恶意应用程序可以请求并获得这个权限,并与该组件交互。如果它被设置为签名,只有使用相同证书签名的应用程序才能获得这个权限。

中危 Service (androidx.work.impl.background.systemjob.SystemJobService) 受权限保护, 但是应该检查权限的保护级别。

Permission: android.permission.BIND_JOB_SERVICE [android:exported=true]
发现一个 Service被共享给了设备上的其他应用程序,因此让它可以被设备上的任何其他应用程序访问。它受到一个在分析的应用程序中没有定义的权限的保护。因此,应该在定义它的地方检查权限的保护级别。如果它被设置为普通或危险,一个恶意应用程序可以请求并获得这个权限,并与该组件交互。如果它被设置为签名,只有使用相同证书签名的应用程序才能获得这个权限。

中危 Broadcast Receiver (androidx.work.impl.diagnostics.DiagnosticsReceiver) 受权限保护, 但是应该检查权限的保护级别。

Permission: android.permission.DUMP [android:exported=true]
发现一个 Broadcast Receiver被共享给了设备上的其他应用程序,因此让它可以被设备上的任何其他应用程序访问。它受到一个在分析的应用程序中没有定义的权限的保护。因此,应该在定义它的地方检查权限的保护级别。如果它被设置为普通或危险,一个恶意应用程序可以请求并获得这个权限,并与该组件交互。如果它被设置为签名,只有使用相同证书签名的应用程序才能获得这个权限。

中危 Service (com.google.android.play.core.assetpacks.AssetPackExtractionService) 未被保护。

[android:exported=true]
发现 Service与设备上的其他应用程序共享,因此可被设备上的任何其他应用程序访问。

中危 Broadcast Receiver (androidx.profileinstaller.ProfileInstallReceiver) 受权限保护, 但是应该检查权限的保护级别。

Permission: android.permission.DUMP [android:exported=true]
发现一个 Broadcast Receiver被共享给了设备上的其他应用程序,因此让它可以被设备上的任何其他应用程序访问。它受到一个在分析的应用程序中没有定义的权限的保护。因此,应该在定义它的地方检查权限的保护级别。如果它被设置为普通或危险,一个恶意应用程序可以请求并获得这个权限,并与该组件交互。如果它被设置为签名,只有使用相同证书签名的应用程序才能获得这个权限。

中危 文件可能包含硬编码的敏感信息,如用户名、密码、密钥等

文件可能包含硬编码的敏感信息,如用户名、密码、密钥等
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#checking-memory-for-sensitive-data-mstg-storage-10

Files:
coil/memory/MemoryCache.java, line(s) 121
coil/memory/MemoryCacheService.java, line(s) 39
coil/request/Parameters.java, line(s) 148
com/drake/net/exception/NoCacheException.java, line(s) 22
com/v2cross/shadowrocket/BuildConfig.java, line(s) 12
com/v2cross/shadowrocket/dto/V2rayConfig.java, line(s) 3079,1584,1478
com/v2cross/shadowrocket/response/UserInfoResponse.java, line(s) 253
com/v2cross/shadowrocket/util/VpnEncrypt.java, line(s) 16
io/github/g00fy2/quickie/content/QRContent.java, line(s) 161
io/grpc/internal/DnsNameResolver.java, line(s) 74,72,73,75
io/grpc/internal/TransportFrameUtil.java, line(s) 33
org/solovyev/android/checkout/ConcurrentCache.java, line(s) 88,66,37,41,32,52,63

中危 应用程序创建临时文件。敏感信息永远不应该被写进临时文件

应用程序创建临时文件。敏感信息永远不应该被写进临时文件


Files:
coil/decode/SourceImageSource.java, line(s) 131

中危 IP地址泄露

IP地址泄露


Files:
com/v2cross/shadowrocket/AppConfig.java, line(s) 13,14
com/v2cross/shadowrocket/service/V2RayVpnService.java, line(s) 167,261,165,187,261
com/v2cross/shadowrocket/ui/UserAssetActivity.java, line(s) 221
com/v2cross/shadowrocket/util/Utils.java, line(s) 436
com/v2cross/shadowrocket/util/V2rayConfigUtil.java, line(s) 223,482,622
com/v2cross/shadowrocket/util/V2rayConfigUtilForTest.java, line(s) 210
io/grpc/okhttp/OkHttpClientTransport.java, line(s) 249
io/grpc/okhttp/OkHttpServerTransport.java, line(s) 599,605,611,696

中危 应用程序可以读取/写入外部存储器,任何应用程序都可以读取写入外部存储器的数据

应用程序可以读取/写入外部存储器,任何应用程序都可以读取写入外部存储器的数据
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#external-storage

Files:
com/v2cross/shadowrocket/util/LogRecorder.java, line(s) 342,345
com/v2cross/shadowrocket/util/Utils.java, line(s) 518

中危 应用程序使用不安全的随机数生成器

应用程序使用不安全的随机数生成器
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#weak-random-number-generators

Files:
io/grpc/internal/DnsNameResolver.java, line(s) 33
io/grpc/internal/ExponentialBackoffPolicy.java, line(s) 5
io/grpc/internal/RetriableStream.java, line(s) 23
io/grpc/okhttp/OkHttpClientTransport.java, line(s) 70
io/grpc/util/OutlierDetectionLoadBalancer.java, line(s) 26
io/grpc/util/RoundRobinLoadBalancer.java, line(s) 22

中危 MD5是已知存在哈希冲突的弱哈希

MD5是已知存在哈希冲突的弱哈希
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#identifying-insecure-andor-deprecated-cryptographic-algorithms-mstg-crypto-4

Files:
com/drake/net/utils/FileUtilsKt.java, line(s) 33

中危 应用程序使用SQLite数据库并执行原始SQL查询。原始SQL查询中不受信任的用户输入可能会导致SQL注入。敏感信息也应加密并写入数据库

应用程序使用SQLite数据库并执行原始SQL查询。原始SQL查询中不受信任的用户输入可能会导致SQL注入。敏感信息也应加密并写入数据库
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04h-Testing-Code-Quality.md#injection-flaws-mstg-arch-2-and-mstg-platform-2

Files:
com/drake/net/cookie/PersistentCookieJar.java, line(s) 6,7,79

中危 应用程序包含隐私跟踪程序

此应用程序有多个3隐私跟踪程序。跟踪器可以跟踪设备或用户,是终端用户的隐私问题。

中危 此应用可能包含硬编码机密信息

从应用程序中识别出以下机密确保这些不是机密或私人信息
AdMob广告平台的=> "com.google.android.gms.ads.APPLICATION_ID" : "@string/admob_appid"
"google_crash_reporting_api_key" : "AIzaSyBkTnKSO3yg2WLOPL-bjFsAGTcBlkPypWU"
"google_api_key" : "AIzaSyBkTnKSO3yg2WLOPL-bjFsAGTcBlkPypWU"
"firebase_database_url" : "https://shadowrocket-ca1e0.firebaseio.com"
"key_success" : "Success"
"key_success" : "Sucesso"
"com.google.firebase.crashlytics.mapping_file_id" : "00000000000000000000000000000000"
"key_success" : "Erfolg"
8007E3F02B7D0FF4BA3788FD36149623
68045985735653d087f9a379adf7e6d2
56ecaf7357aad567cecc8622ea165128
30e3cf73579bd567ce998616eb165388
32AD6ABCBEE1BD97585265625BFD9BC9
a3482e88-686a-4a58-8126-99c9df64b7bf

信息 应用程序记录日志信息,不得记录敏感信息

应用程序记录日志信息,不得记录敏感信息
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#logs

Files:
com/drake/net/Net.java, line(s) 471
com/drake/net/log/LogRecorder.java, line(s) 161,234
com/tbruyelle/rxpermissions3/RxPermissionsFragment.java, line(s) 92,49
com/v2cross/iplocationlib/IPAddressUtils.java, line(s) 72,77,226,382,403,411,416
com/v2cross/iplocationlib/Util.java, line(s) 19
com/v2cross/shadowrocket/service/V2RayServiceManager$stopV2rayPoint$1.java, line(s) 41
com/v2cross/shadowrocket/service/V2RayServiceManager.java, line(s) 188,218,247,259,286,324,331
com/v2cross/shadowrocket/service/V2RayTestService$onStartCommand$1$1.java, line(s) 91
com/v2cross/shadowrocket/service/V2RayVpnService$sendFd$1.java, line(s) 52,71
com/v2cross/shadowrocket/service/V2RayVpnService.java, line(s) 278,283,286,298
com/v2cross/shadowrocket/ui/DonateActivity.java, line(s) 254
com/v2cross/shadowrocket/ui/MainActivity$checkFreeServers$1.java, line(s) 85
com/v2cross/shadowrocket/ui/MainActivity$checkUpdate$1.java, line(s) 85,110
com/v2cross/shadowrocket/ui/MainActivity$copyAssets$1.java, line(s) 60
com/v2cross/shadowrocket/ui/MainActivity$tryBindAd$1.java, line(s) 58,72,104
com/v2cross/shadowrocket/ui/MainActivity.java, line(s) 904,910,919,944,947,1441,1321,1323
com/v2cross/shadowrocket/ui/OpenActivity$onCreate$1.java, line(s) 59
com/v2cross/shadowrocket/ui/PerAppProxyActivity$selectProxyApp$1.java, line(s) 97
com/v2cross/shadowrocket/ui/PerAppProxyActivity.java, line(s) 318,337,324,343
com/v2cross/shadowrocket/ui/ShareActivity$checkUpdate$1.java, line(s) 109
com/v2cross/shadowrocket/ui/SubSettingRecyclerAdapter.java, line(s) 206
com/v2cross/shadowrocket/util/AngConfigManager.java, line(s) 740
com/v2cross/shadowrocket/util/MmkvManager.java, line(s) 118,315,391
com/v2cross/shadowrocket/util/SpeedtestUtil.java, line(s) 114
com/v2cross/shadowrocket/util/Utils.java, line(s) 463,470,520,526,168,176
com/v2cross/shadowrocket/util/V2rayConfigUtil.java, line(s) 152,162
com/v2cross/shadowrocket/util/V2rayConfigUtilForTest.java, line(s) 147,157
com/v2cross/shadowrocket/viewmodel/MainViewModel$testAllLocation$3$1.java, line(s) 117
com/v2cross/shadowrocket/viewmodel/MainViewModel$testAllTcping$2$1.java, line(s) 57
com/v2cross/shadowrocket/viewmodel/MainViewModel.java, line(s) 308
com/v2cross/shadowrocket/viewmodel/SettingsViewModel.java, line(s) 58,45
io/grpc/okhttp/internal/Platform.java, line(s) 74
me/drakeet/support/toast/SafeToastContext.java, line(s) 65,73,68
org/solovyev/android/checkout/DefaultLogger.java, line(s) 41,76,20,55,34,69,48,83,27,62
org/solovyev/android/checkout/Security.java, line(s) 24,36,39,52,55,58,61,64

信息 此应用程序将数据复制到剪贴板。敏感数据不应复制到剪贴板,因为其他应用程序可以访问它

此应用程序将数据复制到剪贴板。敏感数据不应复制到剪贴板,因为其他应用程序可以访问它
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04b-Mobile-App-Security-Testing.md#clipboard

Files:
com/v2cross/shadowrocket/util/Utils.java, line(s) 4,131,145,146

安全 此应用程序使用SSL Pinning 来检测或防止安全通信通道中的MITM攻击

此应用程序使用SSL Pinning 来检测或防止安全通信通道中的MITM攻击
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05g-Testing-Network-Communication.md#testing-custom-certificate-stores-and-certificate-pinning-mstg-network-4

Files:
com/drake/net/utils/HttpsKt.java, line(s) 60,28,58,58
com/v2cross/shadowrocket/http/SSLHelper.java, line(s) 203,55,201,201
io/grpc/okhttp/OkHttpChannelBuilder.java, line(s) 419,420,507,433,505,505
io/grpc/okhttp/OkHttpServerBuilder.java, line(s) 264,265,278
io/grpc/util/AdvancedTlsX509TrustManager.java, line(s) 109,99,107,107,125

安全 此应用程序可能具有Root检测功能

此应用程序可能具有Root检测功能
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05j-Testing-Resiliency-Against-Reverse-Engineering.md#testing-root-detection-mstg-resilience-1

Files:
com/v2cross/shadowrocket/ui/MainActivity.java, line(s) 960

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (jihulab.com) 通信。

{'ip': '27.36.125.147', 'country_short': 'CN', 'country_long': '中国', 'region': '广东', 'city': '佛山', 'latitude': '23.026770', 'longitude': '113.131477'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (raw.gitcode.com) 通信。

{'ip': '27.36.125.147', 'country_short': 'CN', 'country_long': '中国', 'region': '北京', 'city': '北京', 'latitude': '39.907501', 'longitude': '116.397102'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (firebase-settings.crashlytics.com) 通信。

{'ip': '180.163.150.162', 'country_short': 'CN', 'country_long': '中国', 'region': '上海', 'city': '上海', 'latitude': '31.224333', 'longitude': '121.468948'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (pagead2.googlesyndication.com) 通信。

{'ip': '180.163.150.38', 'country_short': 'CN', 'country_long': '中国', 'region': '上海', 'city': '上海', 'latitude': '31.224333', 'longitude': '121.468948'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (gitea.com) 通信。

{'ip': '18.166.250.135', 'country_short': 'HK', 'country_long': '中国', 'region': '香港', 'city': '香港', 'latitude': '22.285521', 'longitude': '114.157692'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (app-measurement.com) 通信。

{'ip': '180.163.150.161', 'country_short': 'CN', 'country_long': '中国', 'region': '上海', 'city': '上海', 'latitude': '31.224333', 'longitude': '121.468948'}

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (gitee.com) 通信。

{'ip': '180.76.198.77', 'country_short': 'CN', 'country_long': '中国', 'region': '北京', 'city': '北京', 'latitude': '39.907501', 'longitude': '116.397102'}

安全评分: ( Shadowrocket 10.8.5)