mdmx: (Default)
mdmx ([personal profile] mdmx) wrote2026-05-06 10:57 am

Красота, 15 лет

https://t.me/sysodmins/28827

15 лет с голой жопой. Как обычная запятая в OpenSSH давала root-права всем желающим.

Безопасники из компании Cyera раскопали (https://www.cyera.com/blog/a-15-year-gap-in-ssh-security---and-what-to-do-about-it) эпичный факап в самом сердце опенсорса. В коде OpenSSH нашли дыру (CVE-2026-35414), которая 15 лет позволяла получить рута через... банальную опечатку.

Баг благополучно жил в кодовой базе полтора десятилетия. Эксплойт позволяет любому юзеру с низкими привилегиями, имеющему валидный серт от доверенного центра сертификации, инстантно поднять свои права до root на целевом сервере

Для тех кто позабыл... SSH-сертификаты работают через principals (роли/имена), которые прописываются при подписи ключа утилитой ssh-keygen. Сервер при коннекте сверяет эти principals со своим локальным конфигом.

А теперь следите за руками разработчиков OpenSSH. Какой-то сумрачный гений 15 лет назад решил сэкономить время и заюзал для парсинга списка principals старую сишную функцию, которая изначально писалась для парсинга списков алгоритмов шифрования (в духе aes128-ctr,aes256-gcm).

Для этой функции запятая - это истинный разделитель массива. Что делает атакующий? Он просит у своего CA выпустить сертификат с принципалом, в имени которого тупо захардкожена запятая. Например deploy,root.

Что делает уязвимый OpenSSH-сервер? Он берет эту строку, прогоняет через кривой парсер, который сплитит её на два отдельных принципала: deploy и root. Дальше срабатывает логическая дыра... первая функция проверки видит совпадение по deploy (если такой юзер разрешен сервером) и пускает дальше, а вторая функция авторизации из-за конфликта переменных просто скипает дальнейшую валидацию и... выдает атакующему полноценный root. Epic Win! На написание рабочего эксплойта у исследователей ушло 20 минут.

Самая жопа заключается в том, что этот взлом физически невозможно отследить по логам. Поскольку сервер технически считает авторизацию легитимной (сертификат-то валидный, криптография сошлась, подпись CA верна), в /var/log/auth.log не падает никаких ошибок authentication failure. Никакие Fail2Ban, Wazuh и дорогущие SIEM-системы на это не триггернутся. В логах это выглядит как штатный, рутинный логин легального юзера

Патч уже выкатили в свежем релизе OpenSSH 10.3 (https://www.openssh.org/) (вышел в начале апреля). Так что, господа, идем чекать версии демонов sshd и обновляем пакеты. И заодно проверьте, кому ваш внутренний Vault/CA раздает серты, пока кто-нибудь не зашел на прод под логином user,root

[personal profile] frozen_cat 2026-05-06 08:39 am (UTC)(link)
Мда..
juan_gandhi: (Default)

[personal profile] juan_gandhi 2026-05-06 09:01 am (UTC)(link)
Забавно. Интересно это всё у них.

Я когда-то подбирал приличную библиотеку, чтоб использовать для "надёжной идентификации" Выяснил, что подпись заверяется чем-то вроде "мамой клянусь, это моя айдентити, я её сам подписал".

Но у Сейлсфорса всё было надёжно имплементировано.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2026-05-06 05:36 pm (UTC)(link)
Ну вообще-то, или Lean, или TLA+ могли бы помочь формально всё верифицировать. Но нужно исключить какое-либо доверие к библиотекам (или верифицировать и их).
brumka: (Default)

[personal profile] brumka 2026-05-06 06:30 pm (UTC)(link)
видимo, очень много работы (т.е. дорого) дабы настолько серьёзно подходить к проверкам. особенно, для opensource.
brumka: (Default)

[personal profile] brumka 2026-05-06 07:06 pm (UTC)(link)
Я думаю что первыми на это набросятся (скорее всего, уже давно набросились) всякие NSA, ФСБ, китайцы, иранцы и т.п.
vit_r: default (Default)

[personal profile] vit_r 2026-05-06 09:33 am (UTC)(link)
Очень похоже на закладку.
vit_r: default (Default)

[personal profile] vit_r 2026-05-06 04:09 pm (UTC)(link)
Хорошая закладка так и работает. Тут немножко недопроверили. Там немножко переповерили. Здесь передали без проверки.

И, кто знает, те в дыру ходят.

И так, чтобы по логам тоже виновных не установить было.
brumka: (Default)

[personal profile] brumka 2026-05-06 11:02 am (UTC)(link)
Как такое вообще нашли?.. обязательно почитаю попозже, спасибо
brumka: (Default)

[personal profile] brumka 2026-05-06 06:25 pm (UTC)(link)
ну, тада понятно. такие баги вылавливать традиционными методами практически нереально
kondybas: (Default)

[personal profile] kondybas 2026-05-06 11:50 am (UTC)(link)
бляяяя
cmpax_u_pagocmb: (Default)

[personal profile] cmpax_u_pagocmb 2026-05-06 12:20 pm (UTC)(link)
>>первая функция проверки видит совпадение по deploy (если такой юзер разрешен сервером) и пускает дальше, а вторая функция авторизации из-за конфликта переменных просто скипает дальнейшую валидацию и... выдает атакующему полноценный root.<<

Вот с этого места не понял. Почему она ему выдаёт полноценный root?