
开发安全的议题随着资安意识擡头浮上檯面,避免在开发过程曝露重要的系统帐密资料,是相当重要的一环,一旦这类资料曝光,有可能导致极为严重的后果。
例如,上週资安业者JFrog揭露不慎外洩的GitHub令牌(Token)事故,那就是PyPI套件共享平台管理者不慎外洩GitHub使用者帐号的个人存取令牌,JFrog特地为此发文警告,表示差点发生史上最严重的供应链攻击。因为一旦有人取得,就有机会得到Python、PyPI、Python软件基金会(Python Software Foundation,PSF)的GitHub管理者权限。PyPI资安团队接获通报后,随即注销此令牌,并进一步进行检查,确认尚未出现滥用的迹象。
这个令牌能存取91个Python持有的GitHub储存库、55个Python Packaging Authority(PyPA)的储存库、42个Python软件基金会的储存库,以及21个PyPI的储存库。
研究人员特别提及这个令牌曝光可能带来的后果,有可能影响整个Python基础设施,并导致供应链攻击。
其中一种手法是将恶意程序码埋藏于名为CPython的基础程序库储存库当中,这是以C语言打造的Python直译器,一旦有人这么做,形同在各式Python程序植入后门。
另一种可能滥用令牌的攻击手法,则是将恶意程序码植入PyPI的仓库(Warehouse)程序码,由于这种程序码的功能是管理PyPI套件管理器,这么做攻击者就有机会操纵热门PyPI套件,并能埋入恶意程序码。
而对于这起事故发生的经过,研究人员表示,他们使用自家公司开发的身分凭证扫描引擎进行侦测,结果在其中一个公开的Docker Hub储存库发现重大问题,因为在当中的容器找到前述的私有存取令牌(Personal Access Token,PAT),而这个令牌存在于已经完成编译的Python执行档里。
究竟为何开发人员造成这样的情况,研究人员推测,开发者只是单纯的想要将PAT纳入原始码,并执行Python指令码将原始码编译成PYC二进位档,然后清除了原始码当中的PAT,最终将原始码及二进位档一併推送到Docker映像档。
研究人员指出,这起事故代表了开发人员已留意原始码是否存在相关机密,并透过IDE或是其他开发工具进行检测来避免外洩,但这样的情况无法确认已编译的文件是否曝险。对此,他们呼吁开发人员应採用新版的GitHub令牌,并限缩能够存取的应用程序及资源範围。
对此,PyPI也公布事故发生的经过。他们在6月28日接获JFrog的通报,随即注销令牌并展开调查,这个令牌在去年建立,曾在去年3月3日、7月20日因推送PYC文件到Docker Hub而曝光,后来到了今年6月21日因为某些原因才移除相关文件。
曝光令牌的开发人员Ee Durbin表示,他在开发cabotage-app专案部分程序码基础(codebase)的时候,面临GitHub的API限速的情况,因而偷懒将自己的PAT加入本机文件,并不慎在PYC文件纳入机密。由于本机应用程序在共享磁区的Docker环境执行,含有PAT的PYC文件因特定配置文件未过滤而流出。