The OpenNET Project / Index page

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



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

"Уязвимость в cups-filters, позволяющая выполнить код на сервере"  +/
Сообщение от opennews (?), 22-Май-23, 22:50 
В пакете cups-filters, включающем компоненты для организации работы сервиса печати,  найдена уязвимость (CVE-2023-24805), позволяющая удалённо выполнить произвольные команды на сервере печати через отправку специально оформленного задания вывода на печать. В настоящее время исправление доступно в виде патча. Проследить за выпуском обновлений пакетов в дистрибутивах можно на страницах Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59181

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

Оглавление

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


1. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –4 +/
Сообщение от Анонин (?), 22-Май-23, 22:50 
> beh.c
> char scheme[1024]
> '\0'

Действительно, что же могло пойти не так //_-

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

17. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +4 +/
Сообщение от Ivan_83 (ok), 23-Май-23, 00:27 
Так развивай мысль дальше, что там не так?

  scheme[0] = '\0';
  strncat(scheme, uri, sizeof(scheme) - 1);
вот это можно было заменить на
snprintf(scheme, sizeof(scheme),"%s", uri);
и всё.

А исправление:
https://github.com/OpenPrinting/cups-filters/commit/8f274035...
оно совсем про другое.

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

25. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +2 +/
Сообщение от Аноним (-), 23-Май-23, 01:59 
> "';/usr/bin/id;'' #.pdf".

Вообще-то это system() многострадальный - к си относится только тем что из си это можно использовать. Так стреляют пятки и на многих других ЯП которые вывешивают system() или сравнимый "упрощенный" интерфейс пуска программ.

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

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

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

30. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (30), 23-Май-23, 11:36 
Как будто, из самого правильного языка невозможно вызвать эту злосчастную system().
Ответить | Правка | Наверх | Cообщить модератору

37. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 23-Май-23, 19:38 
Собственно исходники на сях имеет смысл прицельно сканировать на наличие вызова system и сильно думать насколько оно легитимно и безопасно в том или ином случае. Для сетевой программы, с параметрами от пользователя это одна из самых глупых идей. По тем же причинам шелскриптам не стоит давать параметры от недоверяемого ремотного пользователя. Слишком много специальной трактовки разных символов - и это вообще-то к шеллу, что он так работает, со стороны сей тут никаких проблем нет - что дали то и выполнили. А то что для шелла эти закорюки имели специальные значения - ну и вот при чем тут си, если это шелл вообще специальной трактовкой символов на@#$вается? Классика жанра.
Ответить | Правка | Наверх | Cообщить модератору

43. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Ivan_83 (ok), 24-Май-23, 13:24 
А причём тут С?
Отсутствие/недостаточная фильтрация входных данных - частая болезнь в разных продуктах на разных языках.
Даже там где есть готовые функции для такой проверки/очистки - их периодически забывают вызывать.

Помимо system() нефильтрованный ввод ещё попадает в *printf*() и *SQL*() и там тоже нехило разносит всё.
Частая ошибка передавать такое в open(), все вебсервера через это проходили.
Подозреваю даже что openat() могло появится только ради этого ))))

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

44. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 24-Май-23, 22:36 
> А причём тут С?

Только при том что я его знаю, поэтому знаю что для него сканировать надо :). Вот прямо system. Лучше poison'ом его gcc'шным, или типа того. Если в программе вызовы system() есть это уже повод напрячься в общем случае. Особенно если оно что-то делает с внешними данными при этом. Легитимных и безопасных поводов для system() в коде вообще не так уж много. Шелл очень капризная пакость чтобы ему внешние данные скармливать вообще.

А как это делать в каком-нибудь ruby, java или чем там еще - пусть специалисты в них и разбираются. И, если хотят, тут и пишут.

И да, разумеется, чтобы не скучать есть еще SQL-инъекции. Или вон даже directory traversal обыкновенный. Вот тут кстати стандартизаторы подгадили - все эти ../../etc/passwd довольно канительно и грабельно отфильтровывать так то. Ну вот буквально каждый второй вебсервер норовит все и вся отсервировать по первости, например.

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

2. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –4 +/
Сообщение от Аноним (2), 22-Май-23, 23:00 
Сишники и строки, том 2023, глава 24805.
Ответить | Правка | Наверх | Cообщить модератору

3. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –4 +/
Сообщение от Аноним (3), 22-Май-23, 23:13 
Купс это что-то из набора штатных бэкдоров, как и гхостскрипт. Сишники тут ни при чём.
Ответить | Правка | Наверх | Cообщить модератору

4. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –1 +/
Сообщение от Герострат (?), 22-Май-23, 23:14 
Канеш ни при чём, они всегда ни при чём
Ответить | Правка | Наверх | Cообщить модератору

8. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (3), 22-Май-23, 23:53 
> Канеш ни при чём, они всегда ни при чём

Смотри кто автор.

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

26. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (26), 23-Май-23, 02:05 
Код в котором встречается system() вообще особого доверия не заслуживает. Если кто видит в коде system() - есть нехилый шанс что там вулн, если параметры подконтрольны пользователю. Это касается вообще любого яп где это или нечто сравнимое есть.
Ответить | Правка | Наверх | Cообщить модератору

38. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 23-Май-23, 19:39 
Он в этом случае виноват только тем что шелл вызвал. Шелл на#$%лся на хитром эскейпинге. И вопросы тут к шеллу и его синтаксису так то на самом деле. А к сишнику вопрос только "нафига это было?"
Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

14. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +10 +/
Сообщение от Ivan_83 (ok), 23-Май-23, 00:23 
Чувак, причём тут С и строки?
Автор кода получил строку по сети и отправил её в system(), не проведя никаких проверок и очисток.
Можно на джаве, го, расте написать тоже самое.

На пхп постоянно так делают и там SQL инекции случаются, именно это близкий аналог данной ошибки.

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

34. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (2), 23-Май-23, 15:16 
Действительно, можно такое написать на чём угодно, но написано на Си. И все эти проблемы с санитизацией ввода растут из отсутствия вменяемых способов работы со строками в Си. Как следствие, сишники не воспринимают строки иначе, чем массив байтов. Неназванное не может быть познано.
Ответить | Правка | Наверх | Cообщить модератору

36. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +1 +/
Сообщение от Ivan_83 (ok), 23-Май-23, 16:23 
Нет.
Вы сами себе придумали строки а потом жалуетесь что с ними нечем работать.
Почти все веб сервера написаны на С и как то справились с очисткой входных данных.
Есть куча всяких кодеков и пр что работает с бинарными данными и обработки там намного сложнее.

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

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

40. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (2), 23-Май-23, 20:19 
> Вы сами себе придумали строки а потом жалуетесь что с ними нечем работать

Вот именно про это я и говорю: неназванное. Очень уж напоминает языки некоторых примитивных племён, где нет слов для определённых цветов и — о чудо — носители языка эти цвета не различают.

> Почти все веб сервера написаны на С и как то справились с очисткой входных данных

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

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

42. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Ivan_83 (ok), 24-Май-23, 13:19 
Вы синтаксический сахар нужный для обработки строк возводите в мастхэв максимум.
На практике же всё сводится к тому чтобы найти уже готовое решение которое где то имплементировано и оттестировано.
Ответить | Правка | Наверх | Cообщить модератору

46. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 24-Май-23, 22:42 
Интересно за какой он синтаксический сахар топит? Кто-то заморочился позатыкать проблемы шелла на уровне либы? И если да - это для каких шеллов работает? Потому что шелл так то тоже не мировая константа. А какой-нибудь bash при необдуманном вызове позволяет и еще стрельнуть по пяткам добавочными способами. Рут по DHCP подтвердит.
Ответить | Правка | Наверх | Cообщить модератору

39. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 23-Май-23, 20:12 
Если вызвать шелл с вон теми закорючками из другого ЯП - результат будет тот же самый. Чем тут си виноват? Что шелл позволяет вызывать чтоли? И кто из ЯП так уж прямо заморачивается санитизацией параметров для вот именно posix shell например?
Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

41. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (2), 23-Май-23, 20:20 
Если… Эх, вот только если… Но вызвали из Си и получили то, что получили.
Ответить | Правка | Наверх | Cообщить модератору

45. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (-), 24-Май-23, 22:38 
Есть полно случаев когда вызывают и не из си, получая то же самое по смыслу. Вот прям таким же эксплойтом.

А си в этой схеме что предъявляется? Что он шелл запускать видите ли умеет по простому? Ну охренеть вулн :)

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

5. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Герострат (?), 22-Май-23, 23:16 
Я правильно понимаю, у них критическая ошибка в обработчике ошибок? 😄
Ответить | Правка | Наверх | Cообщить модератору

6. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (6), 22-Май-23, 23:23 
а вы думали что просто так оно жепой в интернет смотрит?
Ответить | Правка | Наверх | Cообщить модератору

31. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (30), 23-Май-23, 11:37 
И кто его жепой в инет выставляет? Список в студию!
Ответить | Правка | Наверх | Cообщить модератору

7. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –3 +/
Сообщение от хрю (?), 22-Май-23, 23:51 
в сях (да и в плюсах) работа со строками одно мучение.
Поэтому меня всегда так радуют описания нововведений в сях и плюсах, то сё, пятое десятое, а нормальной удобной стандартной библиотеки для строк нет. А уж про utf и заикаться не надо - каждый как черепашка тащит свою реализацию ... куцую и убогую.
Ответить | Правка | Наверх | Cообщить модератору

9. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –3 +/
Сообщение от Аноним (3), 22-Май-23, 23:59 
> в сях (да и в плюсах) работа со строками одно мучение.
> Поэтому меня всегда так радуют описания нововведений в сях и плюсах, то
> сё, пятое десятое, а нормальной удобной стандартной библиотеки для строк нет.
> А уж про utf и заикаться не надо - каждый как
> черепашка тащит свою реализацию ... куцую и убогую.

Есть только ICU. В принципе есть только ICU, если ты хочешь юникод. ICU не куцая, ICU блотварь. Какие твои проблемы, всё прекрасно со строками в плюсах? В си нет строк, есть asciiz, что вполне себе неплохо и эффективно на практике. Не драматизируй, это всё вопрос привычки.

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

13. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от хрю (?), 23-Май-23, 00:21 
>>Не драматизируй, это всё вопрос привычки.

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

>>вполне себе неплохо и эффективно на практике.

эффективно нужно там где, надо. а в других местах, должно быть удобно для программирования. какая разница сколь эффективно формируется строка запроса к капс? а по коду там огород из str func. "эффективность" во всех дырах привела к преждевременной языковой смерти :-)))

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

18. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (18), 23-Май-23, 00:29 
> есть asciiz, что вполне себе неплохо и эффективно на практике

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

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

10. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +2 +/
Сообщение от ИмяХ (?), 22-Май-23, 23:59 
Чем для тебя std::string и std:string_view ненормальны и неудобны?
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

11. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –3 +/
Сообщение от хрю (?), 23-Май-23, 00:13 
Это настолько же удобно, насколько удобны жигули. Так ездите на жигулях[/w][/w][/w] используйте std:string сами.
Ответить | Правка | Наверх | Cообщить модератору

16. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (16), 23-Май-23, 00:26 
Это не ответ на вопрос. Так чем неудобны то?
Ответить | Правка | Наверх | Cообщить модератору

35. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  –1 +/
Сообщение от BorichL (ok), 23-Май-23, 15:29 
Тем, что большинство современных писак програмят по принципу:
"Хочу играть на гитаре, но учиться не хочу, хочу чтоб само!" (с)
Ответить | Правка | Наверх | Cообщить модератору

28. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (28), 23-Май-23, 09:13 
Недостатком доступных методов для работы со строками. Жить можно, но неудобно.
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

29. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Челик с гитлаба (?), 23-Май-23, 09:48 
Тем, что они не позволяют адекватно сделать посимвольный проход по строке. ASCII - ок, всё остальное это боль, мучения и тонна костылей. Попробуйте просто вывести строку "ОпенNet" посимвольно и посмотрите на кракозябры.
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

12. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +1 +/
Сообщение от Ivan_83 (ok), 23-Май-23, 00:21 
Самое очевидное на что не хватает ума хейтерам - это понять что никаких строк в С нет.
Есть выделенная область памяти, есть её размер и есть размер данных в ней - вот простое правило для работы с данными которые нужно интепретировать как строки.

Но в данном случае ошибка вообще про другое: данные от пользователя не достаточно проверяются/экранируются и это отдаётся в system() - те на запуск.
У пхп програмистов такое сплошь и рядом встречается, хотя строки там типа совсем безопасные.
В общем то на любом языке такая ошибка возможна, потому что никакой компелятор мамкиному кодеру не подскажет что надо данные полученные неведомо откуда перед вызовом system() проверять.

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

15. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от хрю (?), 23-Май-23, 00:24 
> Самое очевидное на что не хватает ума хейтерам - это понять что
> никаких строк в С нет.

да-да. формировать текстовые строки на сях нельзя, ведь их нет. поэтому придётся извращаться на радость почитателям и формировать отсутствующие строки недо str функциями. в миллионных раз изобретая велосипед.

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

21. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Ivan_83 (ok), 23-Май-23, 00:36 
В чём претензия то?
Язык низкоуровневый, если вам охота обмазыватся сахаром и не думать о таких мелочах - выбирайте другой язык.

Меня лично всё устраивает, о строках я забыл лет 15 назад и счастливо живу, контролируя и размер буфера и размер данных в нём.
Всякие strn*(), strlcpy() - юзаю не часто, snprintf() всё сам делает что мне надо.

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

27. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (27), 23-Май-23, 09:08 
О, еще один. У одного "ничего никогда не падало", а у этого "никогда за пределы буфера не выходит"
Прямо слет пиноккио-программеров))
Ответить | Правка | Наверх | Cообщить модератору

22. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (18), 23-Май-23, 00:43 
> Есть выделенная область памяти, есть её размер и есть размер данных в ней - вот простое правило

Но тут вдруг на данные простые вводные накладывается техника работы с завершающим нулем, унаследованная со времен бедности (когда диды-хакеры каждый байт экономили). И правила становятся непростыми, а решения - глючными и медленными. Нет чтобы хотя бы как в паскале, выделили в языке отдельные специализированные "области памяти" и хранили рядышком с каждой кол-во символов и счетчик ссылок на строку. Ведь памяти уже не 640 килобайт. Но нет, чтобы посчитать длину строки, мы будем всю ее сканировать в поисках нуля, которого может и не быть из-за разгильдяйства, это ведь так быстро.

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

23. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +1 +/
Сообщение от Ivan_83 (ok), 23-Май-23, 01:05 
Нет, правила не меняются.

Хотите абстракции - да на здоровье, ищите/пишите либу которая вам строки как угодно будет представлять и обрабатывать.
Я себе давно написал такое: https://github.com/rozhuk-im/liblcb/blob/master/include/util...
и использую это в основном на данных получаемых/отправляемых по сети/диск.
Для не частых операций со строками проще руками проконтролировать без таких абстракций.

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

32. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (32), 23-Май-23, 11:49 
>Но тут вдруг на данные простые вводные накладывается техника работы с завершающим нулем

Оу, а потом программисту поступает задача из Азии, он узнаёт про unicode, UTF-16, UTF-32,  и у него начинает подгорать про завершающий нуль. А затем подгорать в кошельке.

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

19. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от YetAnotherOnanym (ok), 23-Май-23, 00:32 
> а привычной для меня библиотеки для строк, как в том языке, на котором я кодил раньше, нет.

Пофиксил.

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

33. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (30), 23-Май-23, 12:08 
Вылезай! С++20 : std::u8string
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

20. Скрыто модератором  +/
Сообщение от Аноним (-), 23-Май-23, 00:33 
Ответить | Правка | Наверх | Cообщить модератору

24. "Уязвимость в cups-filters, позволяющая выполнить код на серв..."  +/
Сообщение от Аноним (24), 23-Май-23, 01:25 
Debian уже пофиксил
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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