当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-066578

漏洞标题:安全诟病之一无秘网络边界可被绕过 成功进入内网

相关厂商:秘密

漏洞作者: 猪猪侠

提交时间:2014-06-28 21:11

修复时间:2014-08-12 21:12

公开时间:2014-08-12 21:12

漏洞类型:网络敏感信息泄漏

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-28: 细节已通知厂商并且等待厂商处理中
2014-06-29: 厂商已经确认,细节仅向厂商公开
2014-07-09: 细节向核心白帽子及相关领域专家公开
2014-07-19: 细节向普通白帽子公开
2014-07-29: 细节向实习白帽子公开
2014-08-12: 细节向公众公开

简要描述:

无觅网网络边界可被绕过 成功进入内网也就代表能够接触到大量的服务器和数据
测试过程读了一些开发历史文档,发现用户的手机号码信息是被不可逆算法加密的,就算获取到数据库,也无法还原秘密究竟是出自哪个手机号。
貌似每个手机号都对应一个固定的加密值,给所有13*,15*,18*的手机号码段生成一个固定的彩虹表(http://baike.baidu.com/view/2143893.htm),毕竟手机号资源是有限的(也就几百亿条),找出秘密出自谁手又好像不是那么难,具体实现方法有兴趣的可自行研究.

详细说明:

#1 漏洞之前
用户数据泄露一直是如今互联网世界的一个焦点,不重视或者遗忘这个教训将给各大互联网公司、企业未来的安全造成严重的威胁, 服务商和黑客之间在用户数据这个舞台上将一直进行一场旷日持久的攻防战。
#2 企业 2013 年最高的 10 个信息安全威胁是哪些?
http://www.zhihu.com/question/21596439
本次无秘网网络边界存在的安全威胁来自(A2-互联网泄密事件/撞库攻击):

以大量的用户数据为基础,利用用户相同的注册习惯(相同的用户名和密码),尝试登陆其它的网站。2011年,互联网泄密事件引爆了整个信息安全界,导致传统的用户+密码认证的方式已无法满足现有安全需求。
泄露数据包括:天涯:31,758,468条,CSDN:6,428,559条,微博:4,442,915条,人人网:4,445,047条,猫扑:2,644,726条,178:9,072,819条,嘟嘟牛:13,891,418条,7K7K:18,282,404条,Adobe:1.5亿,Cupid Media:4200万,QQ数据库:大于6亿,福布斯:100万,接近9亿多条


#3 针对已泄露的数据进行数据挖掘
获取到无秘网多个员工、开发人员的邮箱密码、LDAP密码
(提交漏洞之前已和无秘的创始人反馈了这个问题,且涉及安全问题的人员密码已修改!)

Shulin Ni <shulin@wumii.com>
Chuangang Cai <ccg@wumii.com>
De Lin <linde@wumii.com>
Wanzhu Zhou <zhouwanzhu@wumii.com>


pass_haschange_2.jpg


pass_haschange.jpg


#4 进入开发人员邮箱,发现大量敏感信息(包括OPENVPN的证书)

openvpn_mail.jpg


openvpn_连接.jpg


#5 利用获取到的证书,成功接入无秘的办公内网、服务器机房内网(证书4年了,都还有效)

.jpg


#6 发现多个内部系统
https://phabricator.wumii.net
// Phabricator 是 Facebook 內部的線上協作開發工具,无秘的源代码+数据库配置信息全在上面,可以实现留个后门接口什么的。
https://shenzhen.wumii.net/reviewboard/
// Review Board,ReviewBoard是一款基于WEB的代码审查工具,里面存在大量涉及无秘运营方面的相关信息(服务器配置、中间件配置、代码优化等等)。
admin-1.wumii.net // 秘密的后台地址
https://mimi.wumii.net/admin // 在开发的新版mimi
https://shenzhen.wumii.net/mediawiki/index.php // 内部WIKI
https://shenzhen.wumii.net/jenkins/login // 版本发布系统
等等...,这里就不列出来了

漏洞证明:

#1 数据库链接信息,带连接密码的,仅仅测试,并未有拖库行为

<property name="jdbcUrl" value="jdbc:postgresql://db-1.wumii.net:5432/simnet?stringtype=unspecified"/>
<property name="jdbcUrl" value="jdbc:postgresql://db-pgxc.wumii.net:5432/wumii?stringtype=unspecified"/>
+ <bean id="clusterDataSourceBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
+ <property name="user" value="wumii***"/>
+ <property name="password" value="wumii***"/>
+ <property name="maxPoolSize" value="1"/>
+ <property name="maxIdleTime" value="7200"/>


#2 LDAP,内部各种系统通用验证模式,秘密的后台管理员也是通过ldap方式来认证的
<property name="url" value="ldaps://ldap.wumii.net"/>

mysql –u simnet –p –f simnet < alter-tables2.sql


http://10.0.0.53/phpmyadmin/
http://10.0.0.53/wordpress
admin
liuqian6000


mysqldump -h 10.0.0.2 -P 3307 -u simnetro -pwumiiro --opt --skip-lock-tables simnet | mysql -h localhost -P 3306 -u root -p**** -c simnet
mqttc.username_pw_set("nagios", "na9io$")
office-cluster-3.wumii.net [10.0.0.103]


虚拟机已经迁移到服务器上了。kvm和virtualbox都不太理想,所以我们还是用vmware server。地址是
https://dev.wumii.net:8333/
因为用户验证有一些问题,我们用一个公用账号,用户名 vmware,密码 wumiivm。


@Service
public class AdCampaignService {
private AdCampaignDao adCampaignDao;
private AdStatisticsDao adStatisticsDao;
+ private AdvertisementDao advertisementDao;
+ private AdClickDao adClickDao;
+ private AdShowDao adShowDao;
@Autowired
public AdCampaignService(AdCampaignDao adCampaignDao,
- AdStatisticsDao adStatisticsDao) {
+ AdStatisticsDao adStatisticsDao,
+ AdvertisementDao advertisementDao,
+ AdClickDao adClickDao,
+ AdShowDao adShowDao) {
+
this.adCampaignDao = adCampaignDao;
this.adStatisticsDao = adStatisticsDao;
+ this.advertisementDao = advertisementDao;
+ this.adClickDao = adClickDao;
+ this.adShowDao = adShowDao;
}
public AdCampaign getAdCampaign(long adCampaignId) {
@@ -50,9 +67,33 @@
public List<AdCampaignReport> getSummaryReports(AdAccount account) {
List<AdCampaignReport> reports = new ArrayList<>();
for (AdCampaign adCampaign : adCampaignDao.getCampaigns(account)) {
- reports.add(new AdCampaignReport(adCampaign,
- adStatisticsDao.getAdStatisticses(adCampaign)));
+ List<AdStatistics> adStats = adStatisticsDao.getAdStatisticses(adCampaign);
+ Date latest = DateUtils.truncate(Util.now(), Calendar.DATE);
+
+ if (!adStats.isEmpty()) {
+ latest = Collections.max(Util.transformList(adStats, new Util.Transformer<AdStatistics, Date>() {
+ @Override
+ public Date transform(AdStatistics object) {
+ return object.getStatDate();
}
+ }));
+ // since the latest is the begin time of the last statistic day,
+ // add 1 day to get the real latest time
+ latest = DateUtils.addDays(latest, 1);
+ }
+ AdCampaignReport report = new AdCampaignReport(adCampaign, adStats);
+ List<Long> adIds = advertisementDao.getAdIds(adCampaign.getId());
+ adClickDao.completeRecentClicks(report, adIds, latest);
+ adShowDao.completeRecentShows(report, adIds, latest);
+ reports.add(report);
+ }
+
+ Collections.sort(reports, new Comparator<AdCampaignReport>() {
+ @Override
+ public int compare(AdCampaignReport o1, AdCampaignReport o2) {
+ return Long.compare(o2.getAdCampaign().getId(), o1.getAdCampaign().getId());
+ }
+ });
return reports;
}
diff -r 341c01a45079 src/main/resources-prod/spring-stage-context.xml
--- a/src/main/resources-prod/spring-stage-context.xml Tue Jun 25 20:32:09 2013 +0800
+++ b/src/main/resources-prod/spring-stage-context.xml Wed Jun 26 18:41:55 2013 +0800
@@ -46,6 +46,11 @@
<property name="jdbcUrl" value="jdbc:postgresql://db-1.wumii.net:5432/simnet?stringtype=unspecified"/>
</bean>
+ <bean id="clusterDataSource" parent="clusterDataSourceBase">
+ <property name="driverClass" value="org.postgresql.Driver"/>
+ <property name="jdbcUrl" value="jdbc:postgresql://db-pgxc.wumii.net:5432/wumii?stringtype=unspecified"/>
+ </bean>
+
<bean id="hibernateProperties" parent="hibernatePropertiesBase">
<property name="properties">
<props merge="true">
diff -r 341c01a45079 src/main/resources/spring-common.xml
--- a/src/main/resources/spring-common.xml Tue Jun 25 20:32:09 2013 +0800
+++ b/src/main/resources/spring-common.xml Wed Jun 26 18:41:55 2013 +0800
@@ -37,6 +37,13 @@
<property name="preferredTestQuery" value="SELECT 1"/>
</bean>
+ <bean id="clusterDataSourceBase" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
+ <property name="user" value="wumii***"/>
+ <property name="password" value="wumii***"/>
+ <property name="maxPoolSize" value="1"/>
+ <property name="maxIdleTime" value="7200"/>
+ </bean>
+
<bean id="hibernatePropertiesBase" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
@@ -53,6 +60,7 @@
</bean>
<bean class="com.wumii.model.DataAccessConfiguration"/>
+ <bean class="com.wumii.model.cluster.DataAccessConfiguration"/>
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldaps://ldap.wumii.net"/>


mimi1.jpg


mimi2.jpg

修复方案:

#1 这是一个安全诟病,需要持续抗争,安全意识需要培训到每个人
#2 安全是一个整体,保证安全不在于强大的地方有多强大,而在于真正薄弱的地方在哪里
#3 有敏感信息出现的地方,尽量做到密码独立唯一

版权声明:转载请注明来源 猪猪侠@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-29 16:30

厂商回复:

无秘技术人员在获知消息后立即联系猪猪侠,并且于30分钟内完成修复。微博消息给部分用户造成误解,目前所知数据库没有泄漏,没有用户有受到影响。同时数据库敏感信息均经过不可逆加密,只有获取了用户的手机才能确切知道秘密的发布者。无秘对信息安全非常重视,如有进一步消息将持续更新。

最新状态:

暂无