Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram
Поднимем Devuan на вершину Distrowatch! Просто перейдите по ссылке один раз в день.

В конфигурационных файлах curl случайно реализована полнота по Тьюрингу

Новости собранные из разных RSS источников
Аватара пользователя
root:#
Site Admin
Сообщения: 2575
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 62 раза
Поблагодарили: 28 раз

В конфигурационных файлах curl случайно реализована полнота по Тьюрингу

Сообщение root:# »

В конфигурационных файлах curl случайно реализована полнота по Тьюрингу
Выявлена возможность создания любых вычислимых функций при помощи конструкций в файлах конфигурации утилиты Curl. Данная особенность проявляется только в версиях Сurl с 8.12-8.16 и вызвана непреднамеренной реализацией полноты по Тьюрингу, позволяющей создавать машины Тьюринга, используя возможность извлекать байтовые диапазоны из значений переменных и неограниченную глубину вложенности при подключении внешних конфигурационных файлов. В качестве примера при помощи Curl организована симуляция работы двухсчетчиковой регистровой машины (машины Минского) для сложения чисел и реализации программы "99 бутылок пива", используемой при обучении работы с циклами. Для запуска программы, запрограммированной через файлы конфигурации curl, достаточно распаковать архив и выполнить команду "curl -q -s -K 99_bottles/main.conf". Регистровая машина симулируется через представление значения счетчика в виде строки из "n" символов "x". Операции инкремента и декремента реализованы через конкатенацию и усечение строк (синтаксис "[0-0]" для оставление первого байта и "[1-]" для оставления всего содержимого кроме первого байта), а переходы между состояниями управляются директивой "expand-config", которая динамически подгружает следующий файл конфигурации, используя его имя в качестве метки перехода. Операция INC(R) в регистровой машине реализуется как 'expand-variable = "r={{r}}x"' в файле конфигурации Curl, DEC(R) - как 'expand-variable = "r[1-]={{r}}"', а JMP(S) - как 'expand-config = "S.conf"'. Например, код для вычисления 2 + 3:
Изображение
На практике реализуемые через файлы конфигурации вычислительные возможности ограничены размером стека, так как каждый шаг выполнения программы требует загрузки нового вложенного файла конфигурации. При стеке в 8 МБ переполнение возникает примерно после 922 шагов. На возможности также влияет ограничение на размер раскрываемых переменных (параметр MAX_EXPAND_CONTENT выставлен в 10 МБ) и большое потребление памяти из-за сохранения всех старых версий переменных. Несмотря на то, что выявленная возможность не является уязвимостью в версиях начиная с curl 8.17 рассматриваемый трюк уже не сработает из-за ограничения глубины вложенности файлов конфигурации 5 уровнями для защиты от бесконечной рекурсии.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66589