LINUX.ORG.RU
ФорумTalks

Linux опять похвастался качеством кода

 ,


0

1

Все, что надо знать о качестве кода в Linux:

https://1.bp.blogspot.com/--SpB2lfBGpk/YEq0vAipK6I/AAAAAAAABgM/Ozwzp0JVKtUxxiSHzQ-z-fApaio4FigngCLcBGAsYHQ/s779/vuln.png

ну и эксплоит для локального повышения привилегий:

https://github.com/grimm-co/NotQuite0DayFriday/tree/trunk/2021.03.12-linux-iscsi

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

А сколько еще таких перлов припасено в Linux…

★★★★★

и что теперь, на винду всем переходить? или разрабатывать ОС с нуля каждый раз? на секундочку, наступая при этом на всё те же самые грабли.

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

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

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

А зачем? Хочется найти виноватого? Наклеить ярлык на бедного программиста?

seiken ★★★★★
() автор топика

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

Наверное, потому что ты не посмотрел, о зоркий глаз, мать твою ети.

А сколько еще таких перлов припасено в Linux…

Аудитни линуксца, умник!

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

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

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

Там в файле есть автор, коммит 15 лет назад был.

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

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

Shaman007 ★★★★★
()

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

А ты им заплатил за это

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

Я ждал этого коммента. Как в вашем расте создаются типизированные переменные из нетипизированного потока байт? Длину буфера в переменную боженька подсовывает?

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

Статический или статистический? Если первое, то уже проводили. И даже одной небезызвестной российской конторой.

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

Первое. Сорри за очепятки, устал уже. Хреново значит анализирует.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

вот же сраный язычёк. buf нельзя написать без указания размера и уже всю планету имеют через ширето.

system-root ★★★★★
()
Ответ на: комментарий от Harald

А давай подсчитаем, сколько денег на это надо, если по честному ? Дано : в ядре Линукс 30 миллионов строк. За сколько денег ты лично готов просмотреть и глубоко понять скажем 10 тысяч строк, и сколько времени тебе на это надо?

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)

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

Они в другой теме тусуются, где про дыры в виндах.

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

Я ждал этого коммента.

Я так и понял, что всё ради него и затевалось :)

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

Думаю довольно много где юзается ещё. FC дороговат для массового пользователя.

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

Пхахах. Они даже этот конкретный участок кода рассмотрели (см. «Путаница с enum») в статье, но на char* buf никто внимания не обратил. Ладно, не тот же самый, но почти.

@Andrey_Karpov_2020, как же так?

cocucka ★★★★☆
()
Последнее исправление: cocucka (всего исправлений: 2)
Ответ на: комментарий от andalevor

Не, это не то. С фиксированной строкой, заданной в исходнике на этапе компиляции компилятор знает, какой длины строка. Ты это сам ему указал закрывающейся кавычкой. Когда надо десериализовать данные в формате с переменной длиной, ты узнаешь длину только в рантайме когда прочтешь соотв. поле из потока.

seiken ★★★★★
() автор топика

Ну вот нашли же, а было бы закрытое поделие, так бы и осталось не обнаруженным.

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

Не, пивас-студия такое не ловит. См. их статью про «проверку» ядра на хабре. Там даже этот конкретный iscsi драйвер проверяли, может даже тот же участок, просто код с того момента слегка поменялся.

cocucka ★★★★☆
()

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

ты уверен что он не исправлен ?

https://elixir.bootlin.com/linux/v5.10.23/source/drivers/scsi/libiscsi.c#L3333

https://elixir.bootlin.com/linux/v5.10.23/source/fs/sysfs/file.c#L721

spbob
()

Уже сишку все отпинали? Только c++. Сколько можно оттягивать неизбежное. Завернули бы указатель и размер в один объект и передавали бы куда надо. Ничего бы не забыли.

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

О господи, зачем для этого C++, когда можно обойтись сишной структурой… Опять пинают C без разбора.

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

Вектор Vec<T> и слайсы &[T], &mut [T]. Вектор ты наверяка знаешь что такое. Слайсы - это структуры вида

struct Slice<T> { 
    ptr: *const T, 
    size: usize
}

и

struct SliceMut<T> {
    ptr: *mut T,
    size: usize
}

с проверкой на выход за пределы, эдакие «указатели» со вшитым размером. Случайно забыть размер не выйдет, выход за пределы приведёт к панике. Реально накосячить можно только создавая свою собственную реализацию подобия вектора. Но что-то мне подсказывает, что столь популярная структура просто не смогла бы оказаться дырявой в ядре. Более того можно даже не изобретать колесо, а сделать имплементацию глобального аллокатора на основе vmalloc/vfree и использовать уже готовое, оттестированное.

anonymous-angler ★☆
()
Последнее исправление: anonymous-angler (всего исправлений: 1)

для локального повышения привилегий

Уязвимость не в системе, а в людях

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

индусов.

Mike Christie authored and James Bottomley committed on Jun 29, 2006

До того файл трогали Al Viro, David Howells, Pete Wyckoff и Or Gerlitz.

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

Мой ник вообще-то читается как «dog», но можно просто ди-ноль-девять, если хочется. И чего нормально не кастанул?)

d09
()

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

d09
()
Ответ на: комментарий от seiken
use std::io;

fn main() {
  let mut len = String::new();
  io::stdin().read_line(&mut len).unwrap();
  let len: usize = len.trim().parse().unwrap();
  let mut v: Vec<u8> = Vec::new();
  v.resize(len, 0);
  f(&v[..]);
}

fn f(buf: &[u8]) {
  println!("{}", buf.len());
}
andalevor ★★
()
Ответ на: комментарий от andalevor

read_line

Вот в этом месте, прежде чем ваши векторы и слайсы попадут в уютненький мирок безопасных типов раста, за кулисами драйвер клавиатуры и более высокие уровни абстракции осуществляют всё те же небезопасные операции, от которых ваш безопасный код отгородился, как ребенок, кричащий «я в домике!» во время игры в салочки.

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

Всегда так странно, когда человек говорит,как есть,но с сарказмом

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

Мдаа. Вообще, драйвер клавиатуры тоже может быть написан на Rust. Но вообще изначально вы интересовались передаётся ли длина буфера, я показал. Вот и всё. Ну в контексте озвученной уязвимости, да, её можно было бы избежать.

andalevor ★★
()

Все, что надо знать о качестве кода в Linux:

Чего ты такой токсичный то?

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

Да, и нашли эту дыру.

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

Завернули бы указатель и размер в один объект и передавали бы куда надо. Ничего бы не забыли.

Если ты этот объект снаружи получаешь, то упс и ах. Так делать не надо.

hateyoufeel ★★★★★
()

Просто лишний раз напомню, что написанная на Си программа не должна светиться в сеть — и проблем никаких не возникнет. По факту «наличие шелла в системе на Linux» = «рутовый доступ». Конечно, можно играть в перегонки с хакерами, надеясь, что патч к дырке в вашем друшлаге подгонят быстрее, чем уязвимость заэксплойтят — но это путь вникуда. Хостеры уже давно поняли это и дают доступ только к виртуалке или конкретному сервису.

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