缓冲区溢出,许可证违规以及坏代码:FreeBSD 13的近期电话

2021-03-26 20:08:03

乍一看,马修梅西似乎是一个完全合理的选择Winoguard进入FreeBSD内核。 Wioguard是一个加密的点对点隧道协议,大多数人认为是A&#34的一部分; VPN。" FreeBSD是一种像UNIX的操作系统,将来自思科和瞻博网络的所有内容带到Netflix' S网络堆栈中,并且媒体在其开发团队中有大量的经验,包括在多个网络驱动程序上工作。因此,当Netgate的首席执行官Jim Thompson,这使得FreeBSD驱动器路由器决定是FreeBSD享受相同水平的Linux所做的内核Wineuard支持的时候,他伸出款提供梅西的合同。 Macy将Winoguard港口进入FreeBSD内核,其中网格可以在公司中使用它' S流行的PFSense路由器分发。合同没有截止日期或里程碑;梅西只是为了完成自己的时间表完成的工作。

与Macy'在核心编码和网络堆栈中的级别 - 这个项目看起来像一个垃圾扣篮。但事情几乎立即出现了。 Tweoguard创始人Jason Donenfeld Didn' T关于该项目,直到它在FreeBSD邮件列表中浮出水面,莫斯特没有在Donenfeld'在提供的帮助下感兴趣。经过大约九个月的兼职发展,Macy致力于他的港口 - 主要是未录制的,并且直接测试到FreeBSD' S代码存储库的头部部分,在那里计划成于FreeBSD 13.0-Release。

这一意外的提交提出了Donenfeld的赌注,其项目最终将根据建议院名称下的任何生产释放的质量来判断。 Donenfeld确定了莫景的众多问题' s代码,而不是对象来到端口' s发布,Donenfeld决定解决问题。他与FreeBSD开发商Kyle Evans合作,并使用Matt Dunwoodie,这是一个在Wineoard的OpenBSD开发人员进行那个操作系统。这三者几乎替换了几乎所有的Macy'在疯狂的一周冲刺中。

与网络数据师一起越来越差,赞助梅西和工作。 Netgate已经采取了梅西级' S博士代码来自FreeBSD 13释放候选人,并将其放入PFSense' s 2.5.0发行版中。 Donenfeld和合作者执行的叉车升级 - 以及Donenfeld' Syacy的尖锐表征'代码为本公司呈现出严重的PR问题。

Netgate'答案包括对&#34的指控;非理性偏见对抗Mmacy和Netgate" &#34的不负责任的披露;一些零点漏洞利用" - 近同时宣言,没有存在实际漏洞的近同时声明。

来自网络的这种良好的响应提高了许多来源的审查,其中发现了令人惊讶的梅西奇怪的元素'他自己的过去。他和他的妻子尼科尔于2008年被逮捕了两年后,试图非法撤销一座小型旧金山公寓楼的租户。

哦,我的上帝写了pfsense wioguard代码的人是这个家伙https://t.co/e3m2etlv2c

- Matthew Garrett(@ MJG59)3月16日,2021年3月16日

macys'试图迫使他们的租户在落地支撑床上包括锯切,以使建筑物不适合人类居住,直接穿过租户的楼层锯切洞'公寓,并锻造极度威胁的电子邮件出现在租户本身。这对夫妇逃到了意大利,避免起诉,但最终被引渡回美国 - 他们对减少一套重罪有罪,每四年和四个月服务。

梅西奇怪的历史作为房东,不出所料,顽固地守护着他的专业 - 这导致了他自己缺乏关注被注定的WioGuard港口。

"我甚至想做这项工作,"梅西最终告诉我们。 "我被烧毁了,在covid综合征的情况下花了很多个月......我患有多年的口头滥用来自非行家和半非行者的辱骂,其一个大的一个大人物我是他们aren' t felons。我有机会在12月离开项目......我只是感到道德义务,让[Wioguard Port]通过终点线获得[Wioguard Port]。所以你'如果我的最终努力有点半,我必须原谅我。"

此录取答案为什么这样的经验丰富的合格开发人员可能会产生劣质代码 - 但它对FreeBSD核心委员会本身内的过程和程序提出了更大的问题。

这么多的子标准是如何进入一个主要的开源操作系统?代码审查应该停止哪些代码审查?为什么FreeBSD核心团队和网络网似乎更加专注于代码脱离的事实,而不是其实际质量?

第一个问题是Macy' S代码实际上存在重大问题。 Donenfeld表示,它确认了许多主要问题:

但网络数据师认为Donenfeld与他的负面评估一起过世。他们争辩的原始媒体代码根本并不那么糟糕。

尽管没有任何内核开发人员,但ARS能够直接验证Donenfeld的一些索赔,迅速,无需外部援助。例如,查找验证函数,这些功能只是返回了加密循环深度深入的True-and Printf语句 - 无需比Grep更复杂。

为了确认或否认一个始终&#34的空验证函数的索赔 - 返回真实"而不是实际验证传递给它的数据 - 我们搜索了Macy' s if_wg代码中的返回真实或返回(true)的实例,如freebsd 13.0-head。

这是一个足够的返回数量易于审核,所以我们使用grep找到相同的数据,但是每次返回之前都会立即到达三行代码:

在返回true的有效用途中,我们发现了一个空验证函数,模块/ module.c:

它可能值得一提的是,这个空验证功能没有埋在庞大的代码模块底部的底部,因为写入仅仅是863总数的代码。

我们没有进一步追逐这种功能的使用,但它似乎旨在检查数据包' s源和/或目的地是否属于wioguard' s允许的-ips列表,这决定了什么可以将数据包路由到给定的Wiguard隧道。