本次分享的论文”More Haste, Less Speed: Cache Related Security Threats in Continuous Integration Services”主题是持续集成服务(Continuous Integration,简称CI)的缓存安全。论文由奇安信技术研究院、清华大学和特拉华大学合作完成,被国际顶级网络安全会议S&P 2024接收,并做了专题分享报告。同时,这项工作也是该团队在软件供应链安全领域发表的第三篇学术论文,前两篇论文同样被S&P录用,并在S&P2023中进行了分享报告。
持续集成(CI)是一种响应代码变化,实现自动构建、自动测试、自动集成的软件开发实践。CI能够在降低开发成本的同时,显著提升开发效率。CI在软件开发团队中广泛使用:据统计,70%的软件开发团队使用了CI技术。为了提高CI任务的执行效率,CI平台广泛使用了缓存来存储和重用软件依赖包。然而,当跨信任边界共享缓存对象时,CI 缓存也会暴露新的攻击面。CI在软件开发中扮演了重要的角色,其向上连接了开发者和代码托管平台,向下则连接持续发布系统和制品托管平台。因此,CI系统的安全性对于确保软件开发过程安全、避免供应链攻击等安全风险至关重要。
论文第一次对CI缓存中的威胁进行系统研究,发现了其中可能存在安全风险的两大缓存机制。第一种为缓存共享:许多CI服务中,不同的仓库(可能来自不同的用户)之间允许共享同一个CI缓存。 一个仓库生成的缓存对象可能被另一个仓库使用。攻击者可以借此来进行缓存投毒攻击。另一种为缓存继承:一个克隆的仓库可以不加任何配置的条件下继承源仓库的缓存对象。尽管继承机制是只读的,但使攻击者可以利用克隆仓库的pull-request触发的CI任务来窃取源仓库缓存中的敏感信息。
论文对当前7个主流的CI平台中潜在的缓存威胁进行了系统分析,包括三个代码托管平台自带的CI服务:GitHub Actions, GitLab CI, Bitbucket Pipelines,以及4个独立的CI服务:CircleCI, TravisCI, TeamCity, Jenkins。论文重点分析这些CI平台的缓存认证、存储、隔离以及继承等机制,从中发现了4大类安全风险,并基于此提出了4种新的攻击向量。
论文发现7个CI平台的缓存隔离策略均存在问题。3个CI平台(即GitLab CI、CircleCI和TravisCI)提供了存在漏洞的官方缓存模版,其错误配置了缓存规则,导致敏感信息被缓存。下图展示了几个CI平台中缓存配置的示例,其中的缓存规则就代表将要被缓存的文件目录。论文还发现许多二进制工具(例如,docker,aws)、CI插件、以及CI任务中自定义的脚本会隐式地将隐私信息存储在缓存对象中。这些都导致了潜在的缓存泄漏风险。最后,论文还发现了TravisCI和CircleCI使用了越权的token,Tcache,其能够篡改缓存对象。攻击者可以通过pull-request请求来窃取Tcache,然后操作受害仓库的缓存对象。
基于发现的问题,论文提出了四种新的攻击方式。攻击者可以利用这些攻击访问未授权的资源,窃取token,在软件制品中注入恶意代码等。1)Cache Posioning Attack。攻击者对受害仓库的缓存进行投毒,其恶意代码可能会在软件构建过程中被嵌入软件中。2)Cache Leakage Attack。攻击者作为一名非法的pull request发起者或者仓库合作者,他们具有一定的仓库访问权限。因此他们能发起一次高风险的缓存泄漏攻击,窃取缓存中的隐私信息。3)Cache Privilege Escalation Attack。攻击者窃取越权的缓存token,并通过这些token来访问并篡改其不具备访问权限项目的缓存对象。4)Cache Backdoor Attack。攻击者在自己拥有的仓库缓存中添加后门,之后将仓库转移给其他用户。由于部分CI缓存机制在仓库所有者更改之后并未及时清除原有的缓存,即可导致新的所有者在启动CI任务时会遭受到后门攻击。
论文收集了自2017年1月到2023年1月所有公开的开启CI服务的代码仓库,并通过分析其中的CI配置文件内容来检测确认潜在的缓存威胁。论文通过实验发现,78个代码仓库在CI缓存中泄漏了高度敏感的隐私文件,例如软件登陆证书等。下表是一些受影响的代码仓库,部分仓库对应的软件下载量超过了100M。
论文将发现的问题反馈至7个CI平台及仓库的所有者,得到了确认,目前多个问题已经被修复。论文工作再次表明,软件供应链安全问题普遍存在,并且影响巨大,亟需引起软件开发过程各个环节参与者的关注和重视。
论文研究工作是奇安信技术研究院“天问”软件供应链安全分析平台相关研究的一部分,“天问”平台网址:https://tianwen.qianxin.com/