先说结论:基本不可行
原理
Maven包中 groupId 字段是域名反写,比如你有一个 12345.com,就可以申请到 com.12345 的groupId。
很多开源项目都停止维护,但是很多人使用,这些团队可能忘记续费域名;同时目前Maven搜索引擎全部使用 groupId + artifactId(任意自定义)确定项目唯一性,就会将抢注的内容和之前正常内容代码混为一个项目展示,让人误以为新版本更新了,实际上只是加入了恶意代码。
估计正常碳基生物肯定不会求证每一个版本是不是官方发得,主要也没啥办法可求证...
我们需要做
找到一个开源项目,并且抢注它的域名。之后申请 groupId,之后上传一版代码,和之前的略有差别即可。
如果能够成功实现,表示我们成功;不能则表示失败。
找过期域名
我们的思路是注册便宜、续费贵的域名过期可能性更大。所以考虑便宜的域名,这里以 top 为例,注册价格约为 9 元/首年,续费26元/年
官方模糊查询接口:
https://search.maven.org/solrsearch/select?q=top.&rows=20&wt=json
万网域名查询是否注册接口:
https://panda.www.net.cn/cgi-bin/check.cgi?area_domain=xxxx.com
还是写个脚本自动查询吧,年纪大了...
很快就找到了一个(不到30个里面就有2个可注册,概率太高了)
给他注册一年:
通过查询能看到,这个域名之前还被注册过两次,都过期了
正好这个名下的储存库有代码可参考,直接申请groupId
之后就尴尬了:
会有要求原来的角色部署人在这个jira下评论才可以
获得评论
显然,目前已经卡死了,因为我们根本找不到原作者,只知道原作者的Github地址
倒是能够根据Github知道用户邮箱(大部分人都会展示在自己的主页)
其实肯定有社工库同时存在用户邮箱和密码的情况,不过此时可能就是运气成分更多了
由于这不是我们自己的测试账号,本着用户隐私原则我们不再进行后续查询
类似案例
援引自 腾讯安全应急响应中心(TSRC)的文章:
依赖包抢注,典型案例有:
2017年多款Python/Nodejs库包被爆存在恶意代码,主要利用名称相似性误导用户安装,数万主机误安装受到影响。
2020年国外安全研究员发现多家国际知名企业的内部私有包名在GitHub、Web页面泄露,随后在PyPI/NPM/RubyGems抢注并上传同名包,最终这些企业的内部服务器被迫安装恶意包受到影响。
后记
实际上之前就有国外网友讨论过,国内好像没人写类似的东西:https://news.ycombinator.com/item?id=26087489