Ва FreeBSD 13 ледзь не аказалася халтурная рэалізацыя WireGuard з парушэннем ліцэнзіі і ўразлівасцямі

З кодавай базы, на аснове якой фармаваўся рэліз FreeBSD 13, быў са скандалам выдалены код з рэалізацыяй пратаколу VPN WireGuard, распрацаванай па замове кампаніі Netgate без кансультацый з распрацоўнікамі арыгінальнага WireGuard, і ўжо ўключанай у стабільныя выпускі дыстрыбутыва pfSense. Пасля праверкі кода Джэйсанам Даненфілдам (Jason A. Donenfeld), аўтарам арыгінальнага WireGuard, высветлілася, што прапанаваная для FreeBSD рэалізацыя WireGuard ўяўляла сабой узор нізкагатунковага кода, багатага перапаўненнямі буфера і парушаючага ліцэнзію GPL.

У рэалізацыі былі знойдзены катастрафічныя агрэхі ў кодзе крыптаграфіі, была прапушчана частка пратакола WireGuard, прысутнічалі памылкі, якія прыводзілі да краху ядра і абыходу метадаў абароны, для ўваходных дадзеных выкарыстоўваліся буферы фіксаванага памеру. Аб якасці кода шмат кажа наяўнасць заглушак замест праверак, заўсёды якія вяртаюць значэнне "true", а таксама забытыя адладкавыя printf з высновай параметраў, выкарыстоўваных для шыфравання, і ўжыванне функцыі sleep для прадухілення станаў гонкі.

Некаторыя часткі кода, такія як функцыя crypto_xor, у парушэнне ліцэнзіі GPL, былі перанесены з рэалізацыі WireGuard, распрацаванай для Linux. У выніку Джэйсан Даненфілд разам з Кайлам Эвансам (Kyle Evans) і Мэтам Данвудзі (Matt Dunwoodie, аўтар порта WireGuard для OpenBSD), узяліся за пераробку праблемнай рэалізацыі і за тыдзень цалкам замянілі ўвесь код распрацоўніка, нанятага Netgate. Перароблены варыянт выпушчаны асобным наборам патчаў, размешчаны ў рэпазітары праекту WireGuard і пакуль не ўвайшоў у склад FreeBSD.

Цікава, што першапачаткова нішто не прадвяшчала бяды, кампанія Netgate, якая жадала атрымаць магчымасць выкарыстання WireGuard у дыстрыбутыве pfSense, наняла Мэцью Мэйсі (Matthew Macy), добра які разбіраецца ў ядры і сеткавым стэку FreeBSD, які ўдзельнічае ў выпраўленні памылак і мае дадзенай аперацыйнай сістэмы. Мэйсі быў прадстаўлены свабодны графік без дэдлайнаў і прамежкавых праверак. Распрацоўнікі, якія перасякаліся з Мэйсі пры працы над FreeBSD, характарызавалі яго як таленавітага і прафесійнага праграміста, які дапушчае не больш памылак чым іншыя і адэкватна што рэагуе на крытыку. Жаласная якасць кода рэалізацыі WireGuard для FreeBSD стала для іх нечаканасцю.

Пасля 9 месяцаў працы ў снежні мінулага года Мэйсі без завяршэння рэцэнзавання і тэсціравання іншымі ўдзельнікамі дадаў сваю рэалізацыю ў галінку HEAD, якая выкарыстоўвалася для фарміравання рэлізу FreeBSD 13. Распрацоўка была выканана без сувязі з распрацоўшчыкамі арыгінальнага WireGuard і партоў для OpenBSD і NetBSD. У лютым кампанія Netgate інтэгравала WireGuard у стабільны выпуск pfSense 2.5.0 і пачала пастаўку ў міжсеткавых экранах на яго аснове. Пасля выяўлення праблем код WireGuard быў выдалены з pfSense.

У дададзеным кодзе былі выяўлены крытычныя ўразлівасці, якія былі скарыстаны ў 0-day эксплоітах, але Netgate першыя часы не прызнавала наяўнасць уразлівасцяў і спрабавала абвінаваціць распрацоўніка арыгінальнага WireGuard у нападках і прадузятасці, што негатыўна адбілася на яе рэпутацыі. Распрацоўнік порта спачатку адпрэчваў прэтэнзіі да якасці кода і лічыў іх перабольшанымі, але пасля дэманстрацыі памылак, звярнуў увагу на тое, што сапраўды важнай праблемай з'яўляецца адсутнасць належнага рэцэнзавання якасці кода ва FreeBSD, бо праблемы заставаліся не заўважанымі шматлікія месяцы (прадстаўнікі Netgate паказалі, што публічнае рэцэнзаванне было запушчана яшчэ ў жніўні 2020 гады, але асобныя распрацоўнікі FreeBSD адзначылі, што ў Phabricator рэцэнзаванне было зачынена Мэйсі без выканання і з ігнараваннем каментароў). Каманда FreeBSD Core Team адрэагавала на інцыдэнт абяцаннем мадэрнізаваць працэсы праверкі кода.

Мэцью Мэйсі, распрацоўшчык праблемнага порта для FreeBSD, пракаментаваў сітуацыю тым, што здзейсніў вялікую памылку узяўшыся за працу, быўшы не гатовым рэалізаваць дадзены праект. Атрыманы вынік Мэйсі тлумачыць эмацыйным выгараннем і вынікам праблем, якія ўзніклі з-за постковідного сіндрому. Пры гэтым Мэйсі не знайшоў рашучасці адмовіцца ад ужо ўзятых на сябе абавязацельстваў і паспрабаваў давесці праект да канца.

На стан Мэйсі таксама мог паўплываць нядаўні турэмны тэрмін, які ён атрымаў за незаконныя дзеянні ў спробе высялення жыхароў з набытага ім дома, якія не жадаюць з'язджаць добраахвотна. Замест з жонкай яны падпілавалі бэлькі перакрыцця і праламалі адтуліны ў падлогах, каб зрабіць хату непрыдатнай для пражывання, а таксама спрабавалі запалохаць жыхароў, узламалі заселеныя кватэры і вывезлі наяўныя рэчы (дзеянне было кваліфікавана як крадзеж з узломам). Для таго, каб пазбегнуць адказнасці за здзейсненыя дзеянні, Мэйсі з жонкай збег у Італію, але быў экстрадаваны ў ЗША і адсядзеў больш за чатыры гады ў турме.

Крыніца: opennet.ru

Дадаць каментар