记者 | 付艳翠

编辑 | 吴晋娜

“能造成多大损失,那就要看你的想象力了。”说完,张中南通过微信发来几张用户手持身份证的照片。照片中,隐约可以看到用户的个人信息。这是张中南在阿里云公共代码托管平台上,浏览到的万科集团的用户“内部资料”。

张中南是一位网络安全方面的爱好者,同时也是上海一家科技公司的后端工程师。

近日,他向铅笔道爆料,半年前他发现,由于阿里云代码托管平台的项目权限设置存在歧义,导致开发者操作失误,造成至少40家以上企业的200多个项目代码泄露,其中涉及到万科集团、咪咕音乐、51信用卡旗下51足迹、百度无人车合作伙伴ecarx等知名企业,问题至今未完全解决。

面对可能会引发的一系列难以想象的网络安全灾难,这位工作不到3年、年仅24岁的小伙子,有些不知所措。期间,他曾怀着忐忑的心情,一边怕惹上官司,一边又自己通过电邮、微信等方式联系了其中的十余家公司。

他本寄希望于阿里云平台能帮忙一次性解决掉这些公司的安全隐患,经过多次沟通,他却发现依旧徒劳,让他百思不得其解的是,“阿里云只要向企业发个邮件、打个电话就能解决,有那么难吗?”

注:本文内容主要来自铅笔道记者采访和网络公开信息,论据难免偏颇,不存在刻意误导。

发现了“不得了”的秘密

近日,作为网络安全方面的爱好者,上海一家科技公司的后端工程师张中南向铅笔道吐露了半年以来的这段经历。

去年8月下旬的一天,他在网上看到阿里云在推广云效平台,还出了一本书叫《阿里巴巴Java开发手册》。抱着学习的心态,他注册了一个阿里云平台账号。

“我是一个ruby工程师,java和php都是半吊子。在这里,我就像打开了新世界的大门。”他意外地发现,在阿里云效平台上,只要登上账号,能浏览到很多公司的“内部”代码。

最初,张中南以为这些代码是开源的。这个发现,让他在最初感到非常欣喜。“这些项目大多数是用java和php写的,看企业里面真正的项目,要比自己看书摸索要真实一些。”

然而,张中南很快发现了“不对劲”的地方,这些代码内容很多都是不该出现在开源项目中的。比如,项目的数据库、账号、密码等。为此,抱着测试一下的态度,张中南登录了这些账号和密码。

张中南震惊地发现,竟然真的能见到一些公司生产环境的具体数据。虽然离最初发现时已过去半年,但他如今描述时还是感到难以置信。“这其中的很多企业,竟把数据库也抛在公网上,任凭谁,只要按照里面记录的账号密码登录,就能访问。

一番研究过后,张中南猜测,之所以出现这种情况,可能是因为这些公司的程序员在给项目建库时操作不当,将项目权限设置成“平台公开”。

张中南解释,因为当时的阿里云代码托管业务还是全英文平台,可能很多企业在创建项目的时候会误选择“internal”,也就是“平台公开”。

他认为,“internal”的意思得因人而异。“如果是个人在使用代码托管,那么‘internal’的意义非常明确,就是使用这个平台的人都能访问。但如果是企业在使用代码托管,那么‘internal’的意义是‘对企业内的用户都公开’还是‘使用这个代码托管平台的人都能访问’呢?”

目前,阿里云云效平台建库操作页面为中文,默认权限为“私有”。

他开始担心,“如果这些信息被人发现并利用,迟早有一天要出事

张中南用一些他发现在阿里云平台上出现代码泄露的企业举例。比如,中国移动旗下咪咕音乐,泄漏后端代码及配置数据,包括访问高清曲库接口的密钥,访问中央音乐平台总线接口的密钥,支付密钥等。黑客可以根据代码逻辑和支付密钥,伪造支付成功请求。

又如,由金正大集团发起并控股的,由世界银行集团国际金融公司、华夏银行共同参与的金丰公社,泄漏代码为电商后端和CMS。其阿里云oss访问密钥也泄漏,该密钥可以访问金丰公社生产环境的文件系统,包括用户上传的图片和资源、内部系统的报表、服务器日志等。黑客如果用恶意app和网页替换掉oss中的原有项目,用户通过金丰公社升级app或访问特定页面时,便会被劫持。

还有,基于微信的教育应用服务平台浙江小虫科技,泄漏代码为服务器监控中间件,代码中暴露出高权限生产环境数据库账号,可以直接登录查看线上数据。尝试登录阅览,其中一个数据库存储了36万条中小学生的姓名、手机号和学校。如果泄漏,后果不堪设想。

张中南通过电话联系了对方创始人,对方很快将代码泄漏情况全部处理。事后,张中南表示:“想想还蛮开心的,今天保护了几十万个小孩子的隐私。”

此外,上海图聚智能科技有限公司的客户已经包括全国数百家医院和商场,以及高德地图等,它的代码近乎全部泄露。张中南称:“且不说其辛苦运营的数据如果被竞争对手全数获取会怎样,试想如果黑客把数据库中合作医院的地址改为某个‘不作为’的医院,后果也不堪设想。

张中南介绍,虽然万科集团泄露代码不多,但生产环境oss密钥泄漏了出来。该密钥权限非常大,可以访问整个万科集团的线上oss,包括购房客户上传的身份证,各地销售人员报表等。而这些信息,对黑客来说,无疑是一个宝库。

感性战胜理智

知道了“代码秘密”的张中南,在接下来的几天,开始陷入是否要通知这些企业的犹豫中。“之所以犹豫,是因为之前世纪佳缘网白帽子事件。”

世纪佳缘网白帽子事件发生在2015年12月,在2016年6月,被白帽子父亲披露。

资料显示,知名第三方漏洞平台——乌云网的注册白帽子袁炜,在检测漏洞中发现了世纪佳缘的漏洞,并告诉了世纪佳缘该漏洞。几天后,世纪佳缘确认并修复了该漏洞,同时致谢乌云网和袁炜。

但在2016年1月,世纪佳缘报警称有4000余条实名注册信息被不法分子窃取。2016年3月8日,袁炜遭到警方刑事拘留,并于4月12日被批准逮捕。罪名是基于《刑法》285条第2款,入侵获取网络金融证券系统身份认证信息 10 条以上、一般系统 500 条以上,被认为情节严重。

虽然担心自己会有和袁炜一样的遭遇,但最终,张中南的感性战胜了理智。

在代码泄露的公司中,张中南打算挑一家互联网兼职平台试试水。“之所以选择这家公司,是因为他们有一位看起来很友善的年轻CEO。”

2018年9月4日,张中南给这家互联网兼职平台的几位研发人员发送了一封邮件,告知对方公司项目在阿里云托管平台的代码存在安全隐患,并将建议也一并发给对方。

张中南回忆,为了害怕有人已经离职,他特地给该公司多个一线研发发送了邮件。

张中南给互联网兼职平台发送的邮件截图(张中南提供)。

很快,张中南发现,泄露的项目就被“悄悄下掉”了,但他一直没有收到回信,“甚至连声感谢都没有”。

迟迟没有回复,也让张中南产生了犹豫。“毕竟当时是鼓起很大勇气才发邮件的,因为怕他们报警。

但消沉几天后,张中南还是觉得应该去做些事情,继续将这个发现告诉涉事公司。

这次,张中南找到了比邮件更好的方法:通过代码提交的记录,直接添加开发者的微信,再向他们告知。

前后忙活了十余个公司,效果还不错。但在联系这些公司人员时,大家其实一开始还是倾向于怀疑和不信任。”张中南感受到。

张中南联系泄露公司时的对话截图(张中南提供)。

这也让张中南开始期望与这些公司对话,引起公司上层重视。之后,张中南通过网站留言的方式,联系了代码同样泄露了的上海某科技公司。

“第二天,公司CTO就打来电话道谢。”说到这里,张中南显然很开心。因为他认为,这也证明他这么做下去是值得的。

多次沟通,问题未解

在11月底,张中南在和其哥哥通电话时,说了他正在做的事情。但之后其哥哥了解了情况后,专程给张中南打电话劝他不要管了,因为这种做法法律风险很大。

在考虑了哥哥的意见后,张中南决定找阿里云官方渠道,希望阿里云能够通过平台来解决这件事

11月26日晚,张中南将51信用卡在阿里云code上托管的代码项目51足迹app,因为权限配置不当而泄漏的情况告知了云效客服。他并表明,希望阿里云能发个站内信告知这部分公司。

11月26日,张中南与阿里云客服对话截图(张中南提供)。

当时阿里云云效方面表示,张中南反馈的51信用卡旗下51足迹app后台的代码,仓库级别设置为了“internal”,需要通知客户改为“private”的问题,已经关联任务。

本以为事情可以圆满得到解决,因为张中南发现,在11月他与平台沟通之后,确实监测不到云效平台上再出现代码泄露项目的新公司了。然而,他发现,在11月之前监测过的代码泄露企业,依旧处于“裸奔”状态,这意味着阿里云并没有通知到代码泄露的企业。

今年1月31日,不甘心就这么算了的张中南再次联系了阿里云云效平台,并提供了几个大厂如咪咕音乐、百度无人车合作伙伴ecarx、51信用卡旗下的51足迹的泄露情况,希望事情得到处理。

这次,阿里云客服表示:“作为公有云的代码托管,我们无权扫描用户的代码,这一点公有和私有一样,仓库的开放性是用户自主的权利。”也就是说,阿里云作为代码服务平台,无权扫描用户代码。而代码不管是平台公开,还是私有,都是用户的权利。

阿里云称,感谢张中南的反馈,会将其反馈到的信息给到其发现的几个仓库的维护者。但同时也建议张中南可以直接通过commit的邮箱与维护者进行提示。

1月31日,张中南与阿里云客服对话截图(张中南提供)。

这一次,张中南同样不知道阿里云是否通知了项目方。“虽然不知道阿里云是否联系了这些企业,但上述企业的代码泄露情况依然存在,可见它们并没有接到通知。”

在他看来,阿里云这样的知名云服务提供商,应该有告知代码泄露公司的义务。

在张中南提供的泄露代码公司的表格里,有28家公司、共235个项目的代码存在泄露风险。这里还不包括张中南此前自己联系过的10余家公司。

张中南表示,名单中还漏掉了很多企业,因为他写的爬虫代码不是很好。解析过程中,一些页面解析错误就漏掉了。

在此之前,用户数据泄露事件频繁发生,Facebook、Uber、华住、顺丰、万豪、陌陌等企业深陷其中。

2018年9月,华住旗下酒店汉庭、桔子、全季等开房数据泄露事件,就是华住程序员将数据库的用户名、密码,上传至公共代码托管平台导致的。据悉,泄露的房客信息包括名字、邮寄地址、邮箱地址、电话号码、护照号码、出生日期、性别、到达和离店信息等,已经构成一种完整意义上的个人大数据。

“现在阿里云面对的是几十家企业,几百个项目的代码泄露。而阿里云只要发个邮件、打个电话就能避免,打个电话那么难吗?”对于这个问题,张中南百思不得其解。他认为,阿里云这种不作为行为,会让这件事情有可能变得十分严重。

阿里云:权限始终默认“私有”

针对网友反应的问题,阿里云云效平台表示:“针对部分用户不那么熟悉此类平台,我们也会展开一些科普与使用规则提醒,确保大家对自己分享的代码有清晰的认知。”

为此,铅笔道采访了此前张中南联系过的一家公司,该公司研发人员李杰(化名)表示:“阿里云所说的向用户科普和使用规则,基本能够满足用户正常使用。但因人而异,因为我就没有过多的关注。”

李杰继续称,阿里云后来将页面从英文变更为中文,就可以看出它们做了很多优化。“大家都是开发者,对于面向开发者的平台来说,也无须苛求太多。”

当时之所以建站出错,李杰回忆,是因为在建站的时候,云效还是全英文平台,他记得当时权限控制默认确实是“internal”,“主要是程序员个人建库的时候疏忽了。”

针对李杰所说的云效平台此前默认操作是“平台公开”一事,阿里云云效平台表示:云效平台和github一样,从一开始就是默认的“私有”,但客户可以手动更改,相关的选项也都符合行业的通用规则,且完全由客户自己设置。

对此,李杰称,这件事情发生在去年8月份,记忆有些模糊了。在当时,他一共建了3个项目,他在事后特别确认了一遍,当时的3个项目权限全部是平台“公开”的。“我建项目的时候,肯定不会把所有项目,专门都从‘私有’改成‘公开’。”

针对云效平台是否默认“私有”一事,张中南则回忆,印象中他开始注意到限制操作设置时已经是默认为“私有”,而更早之前注册并建库的项目开发者操作时是否默认为“公开”,他也不得而知。

然而,他认为,即使阿里云云效平台为开发者提供的是免费服务,且从一开始就把限制操作设置为“私有”,在这次泄露事件中也有责任。他认为,一方面,阿里云未能及时优化和解释有歧义的英文权限描述;另一方面,即使云效平台是免费服务平台,也有通知其用户预防风险的义务。

“事实上,阿里云被动发现问题后,没有重视问题,也没有提出解决措施。”张中南表示,他之所以选择公开此事,只是想要引起企业对代码安全的关注,同时希望阿里云改善服务流程。

校对 | 林夕

声明:本文来自铅笔道,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。