Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

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

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

01.11.2026 12:04 (MSK)

Выявлена возможность создания любых вычислимых функций при помощи конструкций в файлах конфигурации утилиты 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 уровнями для защиты от бесконечной рекурсии.

  1. Главная ссылка к новости (https://www.reddit.com/r/progr...)
  2. OpenNews: Построение полной по Тьюрингу вычислительной среды при помощи утилит GNU find и mkdir
  3. OpenNews: Язык программирования Birb, состоящий только из emoji-значков птиц
  4. OpenNews: В CVE опубликованы отчёты о ложных уязвимостях в curl, PostgreSQL и других проектах
  5. OpenNews: AI-модель Claude Mythos не продемонстрировала особых достижений при поиске уязвимостей в Curl
  6. OpenNews: Проект Curl на месяц прекратит приём отчётов об уязвимостях
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66589-curl
Ключевые слова: curl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (15) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним10084 и 1008465039 (?), 12:13, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/–
    Избегайте смоляной ямы Тьюринга, в которой реализуемо всё что угодно, но ничего разумного не реализуемо легко!
     
     
  • 2.6, A.Stahl (ok), 12:32, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Смола денег стоит. Где эта твоя яма? Сейчас реализуем...
     

  • 1.2, Аноним (2), 12:14, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/–
    В конфигурационных файлах curl случайно реализован AGI.
     
  • 1.3, Аноним (3), 12:14, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/–
    А потому удивляются, почему так много дыр в ПО ;-)
     
     
  • 2.7, Аноним (7), 12:41, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Почему?
     
     
  • 3.10, Аноним (3), 12:49, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Дают пользователю заряженный пистолет без предохранителя, который стреляет автоматически просто при сжатии рукоятки и надеяться, что он не выстрелит, если пользователь прочитает инструкцию. Казалось бы, что может пойти не так? :-)
     
     
  • 4.12, kusb reg (ok), 13:02, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Мне кажется реализовать такую полноту относительно легко и она может быть много где не таким и сложным путём. Из-за этого мне также кажется, что может быть что-то более маленькое вместо транзисторов используемое как они.
     
  • 3.16, Аноним10084 и 1008465039 (?), 13:19, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Если с теоретической точки зрения подходить, то опасность полноты по Тьюрингу в том, что для программы на Тьюринг-полном языке неразрешима проблема останова, т.е. мы по тексту не сможем сказать, остановиться ли когда-нибудь ее выполнение. Так что получается, что зловредный или бажный конфиг в Тьюринг-полном языке конфигурации может выполняться вечно (ну или, реалистично говоря, зависания и падения провоцировать)
     

  • 1.8, Аноним (8), 12:41, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/–
    а для чего нужен curl? это ядро калькулятора?
     
     
  • 2.9, Аноним (9), 12:48, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Да.
     

  • 1.11, kusb reg (ok), 12:58, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/–
    Поздравим создателей нового языка программирования.
     
  • 1.13, Аноним (13), 13:12, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    слишком -жирно- полно. привет, новая дисциплина спецолимпиады!
     
  • 1.14, Аноним (14), 13:14, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Мы случайно полноту по Тьюрингу.
     
     
  • 2.17, Аноним (17), 13:19, 01/11/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Не толстый, а полный по Тьюрингу
     

  • 1.15, Аноним (15), 13:16, 01/11/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Ждём Doom на конфигах курла
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг: