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