0

高危漏洞

4

中危漏洞

2

低危漏洞

3

警告

文件名 yitaicrm.apk
上传者 admin
文件大小 3.4030895233154MB
MD5 3a86f1d9656ee312b0df90e2c0d2f75f
包名 com.ficent.yitaicrm
Main Activity com.ficent.yitaicrm.LoginActivity
Min SDK 10
Target SDK 16

权限列表

# 名称 说明 提示
0 android.permission.ACCESS_FINE_LOCATION 访问精准的位置源,例如手机上的全球定位系统(如果有)。恶意应用程序可能会借此确定您所处的位置,并可能消耗额外的电池电量。 注意
1 android.permission.ACCESS_FINE_LOCATION 访问精准的位置源,例如手机上的全球定位系统(如果有)。恶意应用程序可能会借此确定您所处的位置,并可能消耗额外的电池电量。 注意
2 android.permission.READ_PHONE_STATE 允许应用程序访问设备的手机功能。有此权限的应用程序可确定此手机的号码和序列号,是否正在通话,以及对方的号码等。 注意
3 android.permission.ACCESS_NETWORK_STATE 允许应用程序查看所有网络的状态。 提示
4 android.permission.ACCESS_WIFI_STATE 允许应用程序查看有关WLAN状态的信息。 提示
5 android.permission.CHANGE_WIFI_STATE 允许应用程序连接到WLAN接入点以及与WLAN接入点断开连接,并对配置的WLAN网络进行更改。 提示
6 android.permission.INTERNET 允许程序访问网络. 提示
7 android.permission.KILL_BACKGROUND_PROCESSES 无论内存资源是否紧张,都允许应用程序结束其他应用程序的后台进程。 提示
8 android.permission.RESTART_PACKAGES 允许程序自己重启或重启其他程序 提示
9 android.permission.WRITE_EXTERNAL_STORAGE 允许应用程序写入SD卡。 提示

四大组件

组件名称

com.ficent.yitaicrm.LoginActivity
com.ficent.yitaicrm.DateWidget
com.ficent.yitaicrm.NewOrderActivity
com.ficent.yitaicrm.NewOrderItemsActivity
com.ficent.yitaicrm.MainActivity
com.ficent.yitaicrm.NewOrderPlanActivity
com.ficent.yitaicrm.NewOrderContractActivity
com.ficent.yitaicrm.ContractSearchActivity
com.ficent.yitaicrm.ContractListActivity
com.ficent.yitaicrm.ContractDetailActivity
com.ficent.yitaicrm.ContractOrderDetailActivity
com.ficent.yitaicrm.StockPartnerSearchActivity

第三方库

# 库名 介绍

静态扫描发现风险点

风险等级 风险名称

中危

检测到当前标志被设置成true或没设置,这会导致adb调试备份允许恶意攻击者复制应用程序数据,造成数据泄露。

中危

该app需要移除大部分日志打印代码。
经扫描该包仍存在大量打日志代码,共发现45处打日志代码.(此处扫描的日志打印代码,是指调用android.util.Log.* 打印的.)
详情如下:

位置: classes.dex
com.sybase.afx.ulj.DBManager;->getConnection(Lcom/sybase/afx/ulj/Profile;)Lcom/ianywhere/ultralitejni12/Connection;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mobile.CertificateChallengeListener;->isServerTrusted([Lcom/sybase/persistence/SSOCertManager$CertInfo;)Z==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.NetworkUtil;->isNetworkAvailable(Landroid/content/Context;)Z==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.persistence.UpgradeUtil;->upgradeSchema(Lcom/sybase/sup/client/persistence/DatabaseDelegate;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.traveler.persist.TmServerKeys;->getKeysFromStore(Lcom/sybase/messaging/traveler/persist/TmServerKeys;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.persistence.MessageListenerImpl;->onMessage(Lcom/sybase/afx/json/JsonMessage;)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SupConnection;->closeConnection()Z==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.ClientConfigDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.pim.ContactsManager$PimTrackingDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.persistence.PrivateVaultDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.NetworkUtil;->pingHost(Ljava/lang/String;)Ljava/lang/String;==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.ulj.SqlTrace;->logIndent(Lcom/sybase/persistence/ConnectionProfile; Ljava/lang/String;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.persistence.MessageListenerImpl;->handleMBSMessage(Lcom/sybase/afx/json/JsonMessage;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.ulj.SqlTrace;->log(Lcom/sybase/persistence/ConnectionProfile; Ljava/lang/String;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mo.MoNoCopyByteArrayOutputStream;->growBuffer()V==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.persistence.UpgradeUtil;->persistSchemaVersionToDb(Lcom/sybase/persistence/ConnectionWrapper; I)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SupConnection;->closeConnection()Z==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.traveler.persist.TmServerKeys;->verifyServerKey(Ljava/lang/String;)Z==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.ulj.DBManager;->getLocalConnection()Lcom/ianywhere/ultralitejni12/Connection;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.ulj.SqlTrace;->writeTrace(Lcom/sybase/persistence/ConnectionProfile; Ljava/lang/String;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afaria.SeedDataAPI;->getSeedDataURL()Ljava/lang/String;==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.json.JsonStreamInputStream;->read()C==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.mbs.RegistryUtil;->getCid()I==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afx.json.JsonStreamInputStream;->read([C I I)I==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SupConnection;->synchronize()Z==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mo.MocaLog;->logMessage(Ljava/lang/String; Lcom/sybase/mo/MocaLog$eMocaLogLevel;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.DateWidget;->onCreate(Landroid/os/Bundle;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.MocaClientQueueDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.Android.Afaria.RPCTest.SharedPrefsContentProvider;->query(Landroid/net/Uri; [Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)Landroid/database/Cursor;==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SupConnection;->openConnection()Z==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.MoDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.persistence.DatabaseDelegate;->generateEncryptionKey()V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.persistence.MbsEntityDelegate;->streamImportHandler(Lcom/sybase/afx/json/JsonStreamParser;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.afaria.SeedDataAPI;->getAppServerIP()Ljava/lang/String;==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.ServerKeysDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.EntityListItem;->print()V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.sup.client.persistence.MbsDatabaseDelegate;->deleteDatabase()V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.Android.Afaria.remote.SharedPrefsContentProvider;->query(Landroid/net/Uri; [Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)Landroid/database/Cursor;==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SyncResult;->setErrorMessage(Ljava/lang/String;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mo.MocaLog;->logMessage(Ljava/lang/String; Lcom/sybase/mo/MocaLog$eMocaLogLevel;)V==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.MocaServerQueueDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.ficent.yitaicrm.BLL.SupConnection;->openConnection()Z==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.messaging.common.AppLogDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mo.DataEncryption$DataEncryptionDatabase;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase; I I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.sybase.mo.TestCallBackService;->onChange(Lcom/sybase/mo/MocaConnectionConditions$eConnectStatus;)V==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I

中危

检测到3条敏感明文信息,建议移除。

位置: classes.dex
'file:///store/home/user/' used in: Lcom/sybase/mo/Brand;->()V
'http://frontline.sybase.com/support' used in: Lcom/sybase/mo/Brand;->()V
'http://www.sybase.com' used in: Lcom/sybase/mo/Brand;->()V

中危

检测到8使用全局可读写操作文件。

位置: classes.dex
com.Android.Afaria.remote.SharedPrefsContentProvider;->insert(Landroid.net.Uri; Landroid.content.ContentValues;)Landroid.net.Uri;===>getSharedPreferences
com.Android.Afaria.remote.SharedPrefsContentProvider;->query(Landroid.net.Uri; [Ljava.lang.String; Ljava.lang.String; [Ljava.lang.String; Ljava.lang.String;)Landroid.database.Cursor;===>getSharedPreferences
com.sybase.sup.client.mbs.RegistryUtil;->remove(Ljava.lang.String;)V===>getSharedPreferences
com.sybase.mo.MocaLog;->copyLog(Ljava.lang.String;)V===>openFileOutput
com.Android.Afaria.RPCTest.SharedPrefsContentProvider;->query(Landroid.net.Uri; [Ljava.lang.String; Ljava.lang.String; [Ljava.lang.String; Ljava.lang.String;)Landroid.database.Cursor;===>getSharedPreferences
com.Android.Afaria.RPCTest.SharedPrefsContentProvider;->insert(Landroid.net.Uri; Landroid.content.ContentValues;)Landroid.net.Uri;===>getSharedPreferences
com.sybase.sup.client.mbs.RegistryUtil;->store(Ljava.lang.String; Ljava.lang.String;)V===>getSharedPreferences
com.sybase.sup.client.mbs.RegistryUtil;->load(Ljava.lang.String;)Ljava.lang.String;===>getSharedPreferences

在使用getDir、getSharedPreferences(SharedPreference)或openFileOutput时,如果设置了全局的可读权限,攻击者恶意读取文件内容,获取敏感信息。在设置文件属性时如果设置全局可写,攻击者可能会篡改、伪造内容,可以能会进行诈骗等行为,造成用户财产损失。建议:
(1)使用MODE_PRIVATE模式创建内部存储文件。
(2)加密存储敏感数据。
(3)避免在文件中存储明文和敏感信息。

参考案例:
http://wooyun.org/bugs/wooyun-2010-047172
http://wooyun.org/bugs/wooyun-2010-054438
http://wooyun.org/bugs/wooyun-2010-0151270

参考资料:
https://jaq.alibaba.com/blog.htm?id=56
https://jaq.alibaba.com/blog.htm?id=58
http://wolfeye.baidu.com/blog/global-rw-of-file
http://wolfeye.baidu.com/blog/global-rw-of-sharepreference/

低危

非debug包,需要通过打包平台proguard脚本,移除大部分系统输出代码。
经扫描该包仍存在大量系统输出代码,共发现17处系统输出代码.(此处扫描的系统输出代码,是指调用System.out.print*输出的,本应在打包平台移除的系统输出代码.)
各个bundle系统输出代码详情如下:

位置: classes.dex
com.sybase.sup.pim.ContactsManager;
com.sybase.afx.ulj.DBManager;
com.sybase.reflection.ClassMetaData;
com.sybase.messaging.common.MocaTestHelper;
com.sybase.afx.util.ConsoleUtil;
com.ficent.yitaicrm.BLL.ContractItemListAdapter;
com.sybase.messaging.common.PlatformUtils;
com.sybase.mo.MocaLog;
com.sybase.messaging.http.HttpsTrustManager;
com.sybase.mo.SupHandlerMo;
com.sybase.sup.client.mbs.SupHandler;
com.sybase.mo.TestCallBackService;
com.sybase.mo.MocaClientAgent;
com.sybase.messaging.common.MocaTestHelper$ClearLowStorageThread;
com.sybase.mo.SupHandler;
com.ficent.yitaicrm.BLL.Util;
com.sybase.messaging.http.CookieJar;

低危

检测到1处主机名弱校验检测漏洞。

位置: classes.dex
com.sybase.messaging.http.HttpsTrustManager$HttpsHostnameVerifier;->verify(Ljava.lang.String; Ljavax.net.ssl.SSLSession;)Z

自定义HostnameVerifier类,却不实现其verify方法验证域名直接返回true,直接接受任意域名。建议:
对SSL证书进行强校验,包括签名CA是否合法、证书是否是自签名、主机域名是否匹配、证书是否过期等。

参考资料:
http://drops.wooyun.org/tips/3296
https://www.91ri.org/12534.html

警告

检测到2个导出的组件接收其他app的消息,这些组件会被其他app引用并导致dos攻击。

activity com.ficent.yitaicrm.DateWidget
activity com.ficent.yitaicrm.StockPartnerSearchActivity

建议:
(1)最小化组件暴露。对不会参与跨应用调用的组件建议显示添加android:exported="false"属性。
(2)设置组件访问权限。对provider设置权限,同时将权限的protectionLevel设置为"signature"或"signatureOrSystem"。
(3)组件传输数据验证。对组件之间,特别是跨应用的组件之间的数据传入与返回做验证和增加异常处理,防止恶意调试数据传入,更要防止敏感数据返回。

参考案例:
http://www.wooyun.org/bugs/wooyun-2010-0169746
http://www.wooyun.org/bugs/wooyun-2010-0104965

参考资料:
http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.Wz4OeC&id=55
《Android安全技术解密与防范》

警告

检测到13处IvParameterSpec的使用。

位置: classes.dex
com.sybase.afaria.SeedDataAPI;->getServerIV(Ljava.security.interfaces.RSAPublicKey; Ljava.security.interfaces.RSAPrivateKey;)Ljavax.crypto.spec.IvParameterSpec;
com.sybase.afx.util.DataEncryption;->()V
com.sybase.afx.util.DataEncryption;->initialData([B)V
com.sybase.messaging.common.Cryptographer;->getSymmetricDecryptor(Ljava.io.InputStream; [B)Ljava.io.InputStream;
com.sybase.messaging.common.Cryptographer;->getSymmetricEncryptor(Ljava.io.OutputStream; [B)Ljava.io.OutputStream;
com.sybase.mo.DataEncryption;->decrypt([B Ljavax.crypto.SecretKey;)[B
com.sybase.mo.DataEncryption;->encrypt([B Ljavax.crypto.SecretKey;)[B
com.sybase.mo.DataEncryption;->getDecryptorStream(Ljava.io.InputStream; Ljavax.crypto.SecretKey;)Ljava.io.InputStream;
com.sybase.mo.DataEncryption;->getEncryptorStream(Ljava.io.OutputStream; Ljavax.crypto.SecretKey;)Ljava.io.OutputStream;
com.sybase.persistence.PrivateDataVault;->decrypt([B Ljavax.crypto.SecretKey;)[B
com.sybase.persistence.PrivateDataVault;->encrypt([B Ljavax.crypto.SecretKey;)[B
com.sybase.persistence.SharedDataVault;->decrypt([B Ljavax.crypto.SecretKey;)[B
com.sybase.persistence.SharedDataVault;->encrypt([B Ljavax.crypto.SecretKey;)[B

使用IVParameterSpec函数,如果使用了固定的初始化向量,那么密码文本可预测性高得多,容易受到字典攻击等。建议禁止使用常量初始化矢量构造IVParameterSpec,使用聚安全提供的安全组件。

参考资料:
http://drops.wooyun.org/tips/15870
https://developer.android.com/training/articles/keystore.html
http://wolfeye.baidu.com/blog/weak-encryption/
http://www.freebuf.com/articles/terminal/99868.html

警告

检测到7处使用了加解密算法。密钥处理不当可能会导致信息泄露。

位置: classes.dex
com.sybase.messaging.common.Cryptographer;->getSymmetricDecryptor(Ljava.io.InputStream; [B)Ljava.io.InputStream;
com.sybase.afx.util.DataEncryption;->getInstance([B Z)Lcom.sybase.afx.util.DataEncryption;
com.sybase.messaging.common.Cryptographer;->getSymmetricEncryptor(Ljava.io.OutputStream; [B)Ljava.io.OutputStream;
com.sybase.mo.DataEncryption;->getNewAESKey(Ljava.lang.String; Ljava.lang.String;)Ljavax.crypto.spec.SecretKeySpec;
com.sybase.persistence.PrivateDataVault;->getAESKeyForVault(Ljava.lang.String; Ljava.lang.String; Ljava.lang.String;)Ljavax.crypto.spec.SecretKeySpec;
com.sybase.afaria.SeedDataAPI;->retrieveCertificate(Ljava.security.interfaces.RSAPublicKey; Ljava.security.interfaces.RSAPrivateKey; Ljava.lang.String; Ljava.lang.String; Lcom.sybase.afaria.SeedDataCredentials;)Ljava.security.cert.X509Certificate;
com.sybase.persistence.SharedDataVault;->getAESKeyForVault(Ljava.lang.String; Ljava.lang.String; Ljava.lang.String;)Ljavax.crypto.spec.SecretKeySpec;

参考案例:
http://www.wooyun.org/bugs/wooyun-2010-0105766
http://www.wooyun.org/bugs/wooyun-2015-0162907
http://www.wooyun.org/bugs/wooyun-2010-0187287

参考资料:
http://drops.wooyun.org/tips/15870
https://developer.android.com/training/articles/keystore.html


动态扫描发现风险点

风险等级 风险名称

服务端分析

风险等级 风险名称

警告

检测到?处XSS漏洞。
开发中...

警告

检测到?处XSS跨站漏洞。
开发中...

应用证书