LINUX.ORG.RU

Критическая уязвимость сразу во всех распространённых браузерах

 , ,


6

5

Компания Google опубликовала информацию и уже закрыла уязвимость в библиотеке libwebp, которая могла приводить к удалённому выполнению кода, когда пользовать просто открывает сайт. Библиотека libwebp используется во всех браузерах на движке Chromium, а также в приложениях на базе electron, в браузере Mozilla Firefox, Gimp, Inkscape, LibreOffice, Telegram, Thunderbird, ffmpeg и другом программном обеспечении. Затронуты также и другие операционные системы.

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

Всем пользователям рекомендуется обновиться как можно скорее.

>>> Подробности

★★★★★

Проверено: unfo ()
Последнее исправление: hobbit (всего исправлений: 4)

разве нельзя сделать компьютер или ОС где буфер не может быть переполнен, если можно то это проблема компьютера/ОС , так ведь любая программа будущая-новая или старая может это делать каждый раз заного всегда.

Gennadevich
()
Ответ на: комментарий от Gennadevich

разве нельзя сделать компьютер или ОС где буфер не может быть переполнен, если можно то это проблема компьютера/ОС , так ведь любая программа будущая-новая или старая может это делать каждый раз заного всегда.

Можно. Это называется Rust. На LOR его отрицают с пеной у рта. Видимо, на LOR любят когда хакеры пихают им в дыры свои экслоиты.

cumvillain
()
Ответ на: комментарий от cumvillain

Можно. Это называется Rust. На LOR его отрицают с пеной у рта.

Чего ты стрелки переводишь? Про гугл говори, как там отрицают.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Чего ты стрелки переводишь? Про гугл говори, как там отрицают.

Потому что Rust отрицают на LOR’е, яростно дроча на C. Не так яростно, как на opennet, но довольно-таки.

cumvillain
()
Ответ на: комментарий от cumvillain

Вопросы был: как не течь буфером. Ответ: Rust.

Ответ неправильный. Правильный ответ - умные указатели.

Skullnet ★★★★★
()
Ответ на: комментарий от Skullnet

Ответ неправильный. Правильный ответ - умные указатели.

Проблема в том, что в плюсах оставили совместимость с C, сишными дырами, и добавили UB по самые помидоры. Так что нет, умные указатели тебя не спасут :D

cumvillain
()
Ответ на: комментарий от superuser

Ну не буфера а стека

А зачем выходить за границы стека, если все самое интересное находится в его границах? Например, адрес возврата?

и если выйти за границы некоего буфера, то всёравно эксплоит хрен сделаеш

Так, этот эксплоиты только на картинках видел, следующий!

cumvillain
()
Ответ на: комментарий от superuser

Я уже понял что ты ничего не знаешь, проходи давай, тут очередь из защитников сишки.

cumvillain
()
Ответ на: комментарий от cumvillain

Потому что Rust отрицают на LOR’е, яростно дроча на C.

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

seiken ★★★★★
()
Ответ на: комментарий от seiken

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

Огромная. Тут огромная толпа ненавистников раста.

cumvillain
()
Ответ на: комментарий от Skullnet

Тогда уж контейнеры. Умные указатели просто гарантируют освобождение памяти при выходе из блока (std::unique_ptr) или когда не останется ни одного умного указателя, которые указывают на объект (std::shared_ptr).

zx_gamer ★★★
()
Ответ на: комментарий от superuser

А у условного Rust стек не ломается?

Попробуйте откомпилировать

fn main() {
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((
}

и таких скобочек например 1000 строчек. Вы удивитесь, но rustc, который написан на Rust, упадет, потому что стек кончится.

zx_gamer ★★★
()
Ответ на: комментарий от cumvillain

А почему нельзя просто сразу писать нормальный код, ведь уязвимость таки была закрыта, значит она закрываема, значит если внимательно писать код, тесты, или ревьюверу его внимательно проверять, то уязвимостей не будет, а если писать тяп-ляп, то тут и Rust не поможет. Как писал классик:

Что такое эта ваше «переполнение буфера»? Старуха с клюкой? Ведьма, которая выбила все стекла, потушила все мониторы? Да его вовсе не существует! Что вы подразумеваете под этим словом? – Это вот что: если я, вместо того, чтобы вдумчиво писать код, каждый вечер начну у себя в квартире пить смузи, у меня настанет переполнение буфера. Если я, программируя, начну, извините меня за выражение, опускать проверки входных данных на длину и то же самое будут делать тестировщик и ревьювер, в программе начнется переполнение буфера. Следовательно, переполнение буфера не в ЯП, а в головах. Значит, когда эти баритоны кричат «Ответ: Rust!» – я смеюсь.
mydibyje ★★★★
()
Ответ на: комментарий от mydibyje

Не путайте несовершенство с проф. непригодностью.

Не тролль нас настолько жирно, пожалуйста.

cumvillain
()
Ответ на: комментарий от cumvillain

А зачем выходить за границы стека, если все самое интересное находится в его границах? Например, адрес возврата?

У Эльбруса АФАИК отдельный стек вызовов, его нельзя модифицировать.

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

У Эльбруса АФАИК отдельный стек вызовов, его нельзя модифицировать.

Насколько я помню, у него тот же самый shadow stack, что у Intel. Я приводил ссылку выше, это уже поломали :D

cumvillain
()
Ответ на: комментарий от mydibyje

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

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

переполнения буфера быть не может, если использовать strncpy

void foo(const char* src, char* dst, size_t dst_size) {
  strncpy(dst, src,  dst_size * 2);
}
andreyu ★★★★★
()
Ответ на: комментарий от andreyu

И какой идиот будет так писать?

Кроме того:

и проверять все внешнеприходящие данные на размер и влезет ли оно в буфер.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

И какой идиот будет так писать?

Вы про умножение на 2? Ну так это искусственный пример для демонстрации того, что strncpy и прочее не является гарантией безопасности.

andreyu ★★★★★
()
Ответ на: комментарий от PPP328

Вы прочитали ровно половину комментария. Прочтите до конца

А так вы про «нужно писать правильно и не нужно писать неправильно». Я сделал допущение, что это знакомо не только вам, но и разработчикам в гугле.

andreyu ★★★★★
()
Ответ на: комментарий от mydibyje

ну а ты попробуй, вот возьми и напиши сразу нормальный код ядра, или браузера, или БД. Ченить посложнее хелоуворда. Пока ни у кого не получилось.

antech
()
Ответ на: комментарий от cumvillain

У Эльбруса совсем не shadow stack. У него отдельный стек адресов возврата, в который писать физически нельзя.

А то, что «поломали», на Си не работает.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от cumvillain

На Rust он легко может быть переполнен. Достаточно написать слово unsafe. И, с учётом того, что в Servo оно написано более полутора тысяч раз…

А если надо без переполнения, для Си есть MISRA. Или можно использовать нормальный язык типа Common Lisp или Racket. Вот там переполнения не бывает (если не передавать недоверенные данные во внешние библиотеки Си/Си++).

monk ★★★★★
()
Ответ на: комментарий от monk

Даже на Си++, для которого пример, переполнением не поломать. Нужен эксплоит, позволяющий записать данные по произвольному адресу памяти.

monk ★★★★★
()
Ответ на: комментарий от monk

Достаточно написать слово unsafe. […] Или можно использовать нормальный язык типа Common Lisp или Racket. Вот там переполнения не бывает

Хех. Там достаточно написать (eval (read)), но переполнения буфера не будет, да.

red75prim ★★★
()
Ответ на: комментарий от red75prim

Хех. Там достаточно написать (eval (read)), но переполнения буфера не будет, да.

Вот только, если в браузере на Rust более тысячи unsafe, то в браузере на Lisp ни одного eval.

monk ★★★★★
()
Ответ на: комментарий от cumvillain

А почему нельзя просто сразу писать нормальный код

Потому что люди несовершенны.

Прекращаем говорить за всех, ок?

BydymTydym ★★
()
Ответ на: комментарий от PPP328

и проверять все внешнеприходящие данные

Так только трусы поступают и параноики, место коим в больничке, в халате с длинными рукавчиками…

BydymTydym ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.