mdmx: (Default)
[personal profile] mdmx
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

mdmx: (Default)
mdmx

May 2026

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 6th, 2026 06:39 pm
Powered by Dreamwidth Studios