The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..., opennews (??), 24-Фев-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


9. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (9), 25-Фев-20, 00:26 
они что, не проверяют длину строки О_о?
Ответить | Правка | Наверх | Cообщить модератору

11. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Ivan_83 (ok), 25-Фев-20, 00:46 
Не нужно проверять длину строки, потому что это подразумевает strlen() над данными полученными извне, что легко даст результаты ещё хуже.
В данном случае нужно оперировать буферами, и размерами как буферов так и использованной в них части, потому что информация по наполнению буферов возращается теми же recv()/read() и ей можно доверять.
Ответить | Правка | Наверх | Cообщить модератору

13. "stdlib"  +3 +/
Сообщение от Аноним (13), 25-Фев-20, 01:34 
Как насчёт strnlen?
Ответить | Правка | Наверх | Cообщить модератору

19. "stdlib"  +/
Сообщение от leap42 (ok), 25-Фев-20, 03:01 
не думал что напишу такое, но Аноним дело говорит! а за strlen надо по рукам бить.
Ответить | Правка | Наверх | Cообщить модератору

96. "stdlib"  +/
Сообщение от Аноним84701 (ok), 25-Фев-20, 13:29 
> Как насчёт strnlen?

в котором n = размер буфера/возвращаемое значение recv (что вообще-то, по-моему и подразумевается под "… оперировать буферами, и размерами как …") ?

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

167. "stdlib"  +/
Сообщение от Ivan_83 (ok), 10-Мрт-20, 17:03 
Зачем!?
Если что, оно примерно эквивалентно (memchr(buf, 0x00, buf_size) - buf).
Если ты и так знаешь размер буфера и сколько там использовано то к чему это бесполезное действие?
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

17. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (-), 25-Фев-20, 01:44 
> Не нужно проверять длину строки

А что если атакуюший строку в 20 гигабайт накидает? Или такие подарки ловятся в другом месте?

Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

30. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  –2 +/
Сообщение от КО (?), 25-Фев-20, 08:43 
Благодаря наследству, чтобы узнать длину 0-terminated строки, надо сначала ее всю вычитать (в память, например,) и там может быть и 4TB. :)
Ответить | Правка | Наверх | Cообщить модератору

91. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (-), 25-Фев-20, 13:19 
> Благодаря наследству, чтобы узнать длину 0-terminated строки, надо сначала ее всю вычитать
> (в память, например,) и там может быть и 4TB. :)

Ну как бы доверять тому что декларирует ремота мы всяко не можем, наследство там или уж нет. Есть целый отдельный класс багов когда задекларено одно, а прислано другое, и совсем не факт что это лучше, потому что позволяет поприкалываться.

Однако получение данных вообще должно бы в какой-то момент рещить что слишком дофига для всего лишь строки, чтоли.

Ответить | Правка | Наверх | Cообщить модератору

142. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от пох. (?), 25-Фев-20, 21:45 
> Однако получение данных вообще должно бы в какой-то момент рещить что слишком дофига для всего
> лишь строки, чтоли.

и добавить в конец (пооверрайдив последний байт буфера) \0, что решает проблемы с бестолковым использованием strlen.

Кстати, вспоминая опять же openssh - _одна_ off-by-one error, за все время. _без_ использования strn*, которые могли запросто отсутствовать на половине систем, поддерживавшихся ssh1.

(и чудовищная с remote root в syslog, но это претензия к автору syslog() все же. Никто тогда не ожидал этой подставы, вляпались все, кроме использовавших sprintf с померянным буфером по каким-то вовсе другим соображениям)

Ответить | Правка | Наверх | Cообщить модератору

48. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +1 +/
Сообщение от Аноним (48), 25-Фев-20, 10:11 
не проблема совсем. вызову read передается дисриптор, указатель на буфер, размер элемента и максимальное кол-во элементов, которые можно поместить в буфер. если дескриптор готов вернуть больше, то read прочитает ровно по размеру буфера. а дальше приложение уже должно само решать - посылать такого толстого клиента нафиг или расширять буфер чтобы прочитать новые данные. и так после каждой операции чтения.
Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

92. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (-), 25-Фев-20, 13:26 
> нафиг или расширять буфер чтобы прочитать новые данные. и так после
> каждой операции чтения.

Вот мне и интересно что они сделали. Надуть именно read можно только если програмер совсем уж лох, а вот чего со строками делают в этом плане...

Ответить | Правка | Наверх | Cообщить модератору

166. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Ivan_83 (ok), 10-Мрт-20, 17:01 
Куда накидает!?
На приёме обычно примерно так (чуть упрощённо):
received = 0;
for (;received < buf_size;) {
  rv = recv(skt, (buf + received), (buf_size - received));
  received += rv;
}

ну вот больше buf_size у нормальных адекватных людей не примется данных.
А неадекваты конечно могут юзать strlen() и дальше на таких данных.
Я вообще не представляю куда тут strlen() можно пристроить будучи в адеквате.

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

99. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним84701 (ok), 25-Фев-20, 13:32 
> они что, не проверяют длину строки О_о?

А как тогда делают:
>> спользуемый для определения текста, устанавливается на байт, следующий за символом '\0'

?
Скорее "логическая ошибка" при обработке входных данных.

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

102. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (102), 25-Фев-20, 13:34 
У них просто хреновый парсер. Делают неявные предположения, не обрабатывают всех возможностей по ходу перебора байт буфера от первого и до терминирующего. Надеются, что входящий набор байтов будет таким, и никаким другим (и какой в тестах накидан). Типичная ошибка ничинающих.
Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

108. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним84701 (ok), 25-Фев-20, 13:58 
>  Надеются, что входящий набор байтов будет таким, и никаким другим (и какой  в тестах накидан). Типичная ошибка ничинающих.

*SCNR*
https://www.opennet.ru/opennews/art.shtml?num=45244
> Процесс PID 1 зависает на системном вызове pause() при поступлении в сокет уведомлений systemd сообщения нулевой длины
> Атака сводится к выполнению команды
> NOTIFY_SOCKET=/run/systemd/notify systemd-notify ""

Ответить | Правка | Наверх | Cообщить модератору

119. "Уязвимости в OpenSMTPD, позволяющие удалённо и локально полу..."  +/
Сообщение от Аноним (102), 25-Фев-20, 15:49 
А в systemd полно не просто начинающих, а вообще не начавших.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру