В curl нашли скрытую машину Тьюринга — конфиги могли выполнять произвольные вычисления

Нежданчик

В curl нашли скрытую машину Тьюринга — конфиги могли выполнять произвольные вычисления

В версиях curl с 8.12 по 8.16 конфигурационные файлы могли выполнять вычисления, по сложности сопоставимые с универсальной машиной Тьюринга. 

Это стало возможным благодаря двум функциям: обработке частей строковых переменных и подключению других конфигов без ограничения глубины вложенности.

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

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

Читают прямо сейчас:

Самые интересные и необычные винтажные компьютеры — что такое машина Тьюринга и почему такой простой модели хватает для любых вычислений

Как тестируют API: разбираемся на примере REST API — как отправлять запросы с помощью curl и читать ответ сервера

Командная строка: что это такое и как её открыть — что такое командная строка, откуда запускают curl и другие утилиты

Как это работало

Каждый счетчик представляли строкой из символов x. 

Например, значение xxxxx означало число 5. Команды изменения счетчиков реализовывали через операции со строками:

  • Добавление x увеличивало значение на единицу.
  • Удаление первого символа уменьшало его на единицу.
  • Проверка первого символа позволяла определить, равен ли счетчик нулю.
  • Подключение другого конфигурационного файла переводило выполнение к следующей команде.

Таким способом можно было описать программу с двумя счетчиками и переходами между состояниями. Исследователь даже подготовил демонстрацию: четыре конфигурационных файла вычисляют сумму 2 + 3. Результат — строка из пяти символов x.

Ограничения и исправление

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

В тесте с обратным отсчетом программа завершалась с ошибкой после 922 шагов при размере стека 8 МБ.

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

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

Что это значит для безопасности

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

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

Скидка на все курсы Практикума

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

Промокод KOD (можно просто нажать) даст скидку на любой платный курс! А если пока не готовы покупать курс, у Практикума есть бесплатные вводные части.

Соцсети: Юлия Зубарева
Через год — лучше работа, выше зарплата
В «Яндекс Практикуме» становятся разработчиками с нуля. Выберите язык — веб, Python, Java, C++ — и учитесь. Джуны зарабатывают от 80 000 ₽, мидлы — от 150 000 ₽. Дальше — программы трудоустройства и компенсация, если пойдёте в Яндекс.
Вам может быть интересно
easy
[anycomment]
Exit mobile version