在阿里云云效平台上,只要登上账号,就能浏览到很多公司的“内部”代码。
记者|付艳翠
编辑|吴晋娜
张中南是一位网络安全方面的爱好者,同时也是上海一家科技公司的后端工程师。
近日,他向铅笔道爆料,半年前他发现,由于阿里云代码托管平台的项目权限设置存在歧义,导致开发者操作失误,造成至少40家以上企业的200多个项目代码泄露,其中涉及到万科集团、咪咕音乐、51信用卡旗下51足迹、百度无人车合作伙伴ecarx等知名企业,问题至今未完全解决。
注:本文内容主要来自铅笔道记者采访和网络公开信息,论据难免偏颇,不存在刻意误导。
发现了“不得了”的秘密
近日,作为网络安全方面的爱好者,上海一家科技公司的后端工程师张中南向铅笔道吐露了半年以来的这段经历。
去年8月下旬的一天,他在网上看到阿里云在推广云效平台,还出了一本书叫《阿里巴巴Java开发手册》。抱着学习的心态,他注册了一个阿里云平台账号。
“我是一个ruby工程师,java和php都是半吊子。在这里,我就像打开了新世界的大门。”他意外地发现,在阿里云效平台上,只要登上账号,能浏览到很多公司的“内部”代码。
最初,张中南以为这些代码是开源的。这个发现,让他在最初感到非常欣喜。“这些项目大多数是用java和php写的,看企业里面真正的项目,要比自己看书摸索要真实一些。”
一番研究过后,张中南猜测,之所以出现这种情况,可能是因为这些公司的程序员在给项目建库时操作不当,将项目权限设置成“平台公开”。
张中南解释,因为当时的阿里云代码托管业务还是全英文平台,可能很多企业在创建项目的时候会误选择“internal”,也就是“平台公开”。
他认为,“internal”的意思得因人而异。“如果是个人在使用代码托管,那么‘internal’的意义非常明确,就是使用这个平台的人都能访问。但如果是企业在使用代码托管,那么‘internal’的意义是‘对企业内的用户都公开’还是‘使用这个代码托管平台的人都能访问’呢?”
目前,阿里云云效平台建库操作页面为中文,默认权限为“私有”。
他开始担心,“如果这些信息被人发现并利用,迟早有一天要出事。”
张中南用一些他发现在阿里云平台上出现代码泄露的企业举例。比如,中国移动旗下咪咕音乐,泄漏后端代码及配置数据,包括访问高清曲库接口的密钥,访问中央音乐平台总线接口的密钥,支付密钥等。黑客可以根据代码逻辑和支付密钥,伪造支付成功请求。
又如,由金正大集团发起并控股的,由世界银行集团国际金融公司、华夏银行共同参与的金丰公社,泄漏代码为电商后端和CMS。其阿里云oss访问密钥也泄漏,该密钥可以访问金丰公社生产环境的文件系统,包括用户上传的图片和资源、内部系统的报表、服务器日志等。黑客如果用恶意app和网页替换掉oss中的原有项目,用户通过金丰公社升级app或访问特定页面时,便会被劫持。
此外,上海图聚智能科技有限公司的客户已经包括全国数百家医院和商场,以及高德地图等,它的代码近乎全部泄露。张中南称:“且不说其辛苦运营的数据如果被竞争对手全数获取会怎样,试想如果黑客把数据库中合作医院的地址改为某个‘不作为’的医院,后果也不堪设想。”
张中南介绍,虽然万科集团泄露代码不多,但生产环境oss密钥泄漏了出来。该密钥权限非常大,可以访问整个万科集团的线上oss,包括购房客户上传的身份证,各地销售人员报表等。而这些信息,对黑客来说,无疑是一个宝库。
感性战胜理智
知道了“代码秘密”的张中南,在接下来的几天,开始陷入是否要通知这些企业的犹豫中。“之所以犹豫,是因为之前世纪佳缘网白帽子事件。”
世纪佳缘网白帽子事件发生在2015年12月,在2016年6月,被白帽子父亲披露。
资料显示,知名第三方漏洞平台——乌云网的注册白帽子袁炜,在检测漏洞中发现了世纪佳缘的漏洞,并告诉了世纪佳缘该漏洞。几天后,世纪佳缘确认并修复了该漏洞,同时致谢乌云网和袁炜。
但在2016年1月,世纪佳缘报警称有4000余条实名注册信息被不法分子窃取。2016年3月8日,袁炜遭到警方刑事拘留,并于4月12日被批准逮捕。罪名是基于《刑法》285条第2款,入侵获取网络金融证券系统身份认证信息10条以上、一般系统500条以上,被认为情节严重。
虽然担心自己会有和袁炜一样的遭遇,但最终,张中南的感性战胜了理智。
在代码泄露的公司中,张中南打算挑一家互联网兼职平台试试水。“之所以选择这家公司,是因为他们有一位看起来很友善的年轻CEO。”
2018年9月4日,张中南给这家互联网兼职平台的几位研发人员发送了一封邮件,告知对方公司项目在阿里云托管平台的代码存在安全隐患,并将建议也一并发给对方。
张中南回忆,为了害怕有人已经离职,他特地给该公司多个一线研发发送了邮件。
张中南给互联网兼职平台发送的邮件截图(张中南提供)。
很快,张中南发现,泄露的项目就被“悄悄下掉”了,但他一直没有收到回信,“甚至连声感谢都没有”。
迟迟没有回复,也让张中南产生了犹豫。“毕竟当时是鼓起很大勇气才发邮件的,因为怕他们报警。”
但消沉几天后,张中南还是觉得应该去做些事情,继续将这个发现告诉涉事公司。
“前后忙活了十余个公司,效果还不错。但在联系这些公司人员时,大家其实一开始还是倾向于怀疑和不信任。”张中南感受到。
张中南联系泄露公司时的对话截图(张中南提供)。
这也让张中南开始期望与这些公司对话,引起公司上层重视。之后,张中南通过网站留言的方式,联系了代码同样泄露了的上海某科技公司。
多次沟通,问题未解
在考虑了哥哥的意见后,张中南决定找阿里云官方渠道,希望阿里云能够通过平台来解决这件事。
11月26日晚,张中南将51信用卡在阿里云code上托管的代码项目51足迹app,因为权限配置不当而泄漏的情况告知了云效客服。他并表明,希望阿里云能发个站内信告知这部分公司。
11月26日,张中南与阿里云客服对话截图(张中南提供)。
当时阿里云云效方面表示,张中南反馈的51信用卡旗下51足迹app后台的代码,仓库级别设置为了“internal”,需要通知客户改为“private”的问题,已经关联任务。
本以为事情可以圆满得到解决,因为张中南发现,在11月他与平台沟通之后,确实监测不到云效平台上再出现代码泄露项目的新公司了。然而,他发现,在11月之前监测过的代码泄露企业,依旧处于“裸奔”状态,这意味着阿里云并没有通知到代码泄露的企业。
今年1月31日,不甘心就这么算了的张中南再次联系了阿里云云效平台,并提供了几个大厂如咪咕音乐、百度无人车合作伙伴ecarx、51信用卡旗下的51足迹的泄露情况,希望事情得到处理。
这次,阿里云客服表示:“作为公有云的代码托管,我们无权扫描用户的代码,这一点公有和私有一样,仓库的开放性是用户自主的权利。”也就是说,阿里云作为代码服务平台,无权扫描用户代码。而代码不管是平台公开,还是私有,都是用户的权利。
1月31日,张中南与阿里云客服对话截图(张中南提供)。
这一次,张中南同样不知道阿里云是否通知了项目方。“虽然不知道阿里云是否联系了这些企业,但上述企业的代码泄露情况依然存在,可见它们并没有接到通知。”
在他看来,阿里云这样的知名云服务提供商,应该有告知代码泄露公司的义务。
在张中南提供的泄露代码公司的表格里,有28家公司、共235个项目的代码存在泄露风险。这里还不包括张中南此前自己联系过的10余家公司。
张中南表示,名单中还漏掉了很多企业,因为他写的爬虫代码不是很好。解析过程中,一些页面解析错误就漏掉了。
在此之前,用户数据泄露事件频繁发生,Facebook、Uber、华住、顺丰、万豪、陌陌等企业深陷其中。
阿里云:权限始终默认“私有”
李杰继续称,阿里云后来将页面从英文变更为中文,就可以看出它们做了很多优化。“大家都是开发者,对于面向开发者的平台来说,也无须苛求太多。”
当时之所以建站出错,李杰回忆,是因为在建站的时候,云效还是全英文平台,他记得当时权限控制默认确实是“internal”,“主要是程序员个人建库的时候疏忽了。”
对此,李杰称,这件事情发生在去年8月份,记忆有些模糊了。在当时,他一共建了3个项目,他在事后特别确认了一遍,当时的3个项目权限全部是平台“公开”的。“我建项目的时候,肯定不会把所有项目,专门都从‘私有’改成‘公开’。”
针对云效平台是否默认“私有”一事,张中南则回忆,印象中他开始注意到限制操作设置时已经是默认为“私有”,而更早之前注册并建库的项目开发者操作时是否默认为“公开”,他也不得而知。
然而,他认为,即使阿里云云效平台为开发者提供的是免费服务,且从一开始就把限制操作设置为“私有”,在这次泄露事件中也有责任。他认为,一方面,阿里云未能及时优化和解释有歧义的英文权限描述;另一方面,即使云效平台是免费服务平台,也有通知其用户预防风险的义务。
您当前使用的浏览器版本过低,导致网站不能正常访问,建议升级浏览器