本周,我们将介绍几个高危漏洞,一个在Rubygems,另一个在Rsyslogs。我们还将讨论定义安全编码做法的重要性。
在Rubygems中未经授权的宝石接管
Rubygems是一个软件包注册表,用于为Ruby语言生态系统提供软件。由于yank操作中的一个错误,任何RubyGems.org的用户都有可能删除和替换某些宝石,即使该用户没有被授权这样做。
要想变得脆弱,需要一颗宝石:
- 其名称中有一个或多个破折号
- 攻击者控制的宝石,其名称在破折号之前
- 30天内创建或超过100天没有更新
缓解
根据Bundler团队的说法,在持续集成和部署过程中以-frozen或-deployment 模式使用Bundler将保证你的应用程序不会默默地切换到使用这个漏洞创建的版本。
要审计你的应用程序历史,以发现过去可能存在的漏洞,请查看你的Gemfile.lock,并寻找版本号没有变化但平台发生变化的宝石。例如,gemname-3.1.2更新为gemname-3.1.2-java可能表明该漏洞可能被滥用。RubyGems.org已经打了补丁,不再有这个问题的漏洞。
Rsyslogs中潜在的基于堆的缓冲区溢出
Rsyslog是一个用于日志处理的火箭般快速的系统。一些用于TCP syslog接收的模块在使用八位数框架时,会出现堆缓冲区溢出。在 "八位数 "构架中,每条信息都有实际信息长度的前缀,这样接收者就能准确地知道信息的结束位置。攻击者可以破坏堆值,导致数据完整性问题和可用性影响。远程代码执行不太可能发生,但并非不可能。8.2204.0及以下版本受此漏洞影响。
缓解
八位数成帧不是很常见。通常情况下,它需要在发送方特别启用。如果用户不需要它,他们可以对最重要的模块关闭它。这将减轻漏洞的影响。如何做到这一点,取决于模块的情况。关于受影响的模块和基于模块的配置细节,请参考这里。该补丁在8.2204.1版本中可用。
定义安全代码的重要性
安全编码是指熟练的开发人员从软件开发生命周期(SDLC)开始就编写没有漏洞的代码的做法。只有当这种做法被定义后,开发者社区才能朝着这个目标努力。安全代码勇士在2021年12月与埃文斯数据公司合作进行了2022年开发者驱动的安全状况调查,调查了全球1200名开发者,以了解安全编码实践时的技能、看法和行为,以及它们在SDLC中的影响和感知的相关性。
以下是调查中的一些重点:
- 在1200人中,只有14%的活跃软件开发人员将安全编码作为他们的首要任务。
- 调查中37%的开发者报告说,他们的代码中留下了已知的漏洞,因为紧迫的期限不允许有必要的时间来修复这些漏洞或从一开始就正确编码。
- 36%的调查对象还说,他们想从他们的代码中消除漏洞,但没有这样做的技能或知识。
- 在许多情况下,开发人员编写安全代码的问题是,他们工作的组织没有确定产生安全代码需要哪些最佳实践,也没有投入足够的资源来培训或使他们的开发人员达到这些目标。
因此,除了正确定义什么是安全编码实践外,组织还需要提供更长的期限,给开发人员足够的时间来正确编码,并提供实践培训,帮助他们有效地识别和修复代码漏洞。
你可以在这里获得更多关于该调查的详细信息。
注释