This article is an automated machine-translation of an article in English. We know the translation isn't perfect, but we hope it's useful for people who don't read English.

Анатомия уязвимости - Curl веб-инструментарий скачать пробоины от аутентификации ошибке

Filed Under: Featured, Vulnerability

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

Это с открытым исходным кодом программирования инструментарий, который поможет вам справиться с написанием клиентского кода, который занимается URL.

По словам самого проекта, "Curl groks эти URL-адреса".

Это популярно, потому что это URL швейцарский армейский нож, что позволяет легко обрабатывать популярных протоколов, таких как HTTP, SMTP, POP3 и многое другое. Он также поддерживает добавления, загрузки, аутентификация, прокси, куки и SSL / TLS.

Он даже поддерживает Gopher , если вы помните, что далеко назад.

Один из рисков со все-пение, танцы все-библиотека, конечно, что есть больше кода пойти не так.

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

Это фигурные проблемы здесь.

Уязвимый код был введен в выпуске 7.26.0, когда поддержка DIGEST_MD5 аутентификации был добавлен в Curl программного обеспечения.

DIGEST_MD5 это рудиментарный способ позволяет войти через незашифрованные соединения, например, HTTP или POP3-сервером, без отправки фактический пароль.

Сервер посылает случайную строку вызова, или случайное число, вместе с кучей других, связанных с аутентификацией данных , вы ответить криптографической хэш пароля вперемешку с этого сервера поставляемых данных:

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

Как в сторону: избегать использования DIGEST_MD5 аутентификации. Зашифровать весь сеанс с помощью TLS вместо этого.

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

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

Вот багги код из уязвимую версию CURL:

Не волнуйтесь, если вы не знакомы с C. Я объясню.

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

Прежде, программист сделал последний.

Во-первых, он выделяет ряд фиксированной длины блоков памяти в стеке.

Затем он копирует текст строки, переданное при вызове функции в эти блоки, но быть зЬгсру использует системные функции () и Strcat (), которые выступают за "строку Копия" и "Строка concatentate" (курс одной строки на конце другое) соответственно.

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

Они просто дублировать каждый байт из строки ввода в выходной строке, пока NUL (нулевой) байт был найден. NUL, как в конце строки текста обозначается в C.

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

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

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

Исправление было простым.

Неконтролируемой зЬгсру () и Strcat () функции были заменены с функцией snprintf (), которая расшифровывается как "отформатированные для печати строки не более чем на N байт":

Вы все еще ​​можете делать ошибки с snprintf, так как это до вас, чтобы указать п, и если вы не будете осторожны, вы можете получить это неправильно.

Но дело в том, что это, по крайней мере можно ограничить выход snprintf к известному размер буфера, который вы просто не можете сделать с старомодным зЬгсру () и Strcat ().

→ обновляются Curl выше код еще не является совершенным. Программист должны действительно проверить возвращаемого значения snprintf (), которая сообщает, сколько байт он хотел написать. Если буфер не был достаточно большим, то на выходе будет неполной, и поэтому неверно. Вы не должны использовать: увеличить размер буфера и попробуйте еще раз, или сообщить об ошибке вместо этого.

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

Автообновления программы, которые могут использовать библиотеку CURL (известный как Libcurl) обычно поставляется с предварительно настроенными со списком заведомо исправный URL-адресов, или попросит вас ввести URL во время установки, и вот что.

Злоумышленник, который мог говорить вас к вашей переключения удачной автообновление URL для изворотливых один, или которые могли бы убедить вас изменить с POP3-сервера электронной почты вы всегда используется для тот, который вы никогда не слышали, наверняка легче чтобы заразить вы просто получаете запускать свои вредоносные напрямую.

Это верно, но есть еще риск.

Если злоумышленник может перенаправить запросы от AutoUpdater или POP3-клиент, например, возиться с настройками DNS, или путем взлома серверов на краю сети поставщика услуг, он может отправить вас на сайте самозванцем и попытка эксплуатировать вас оттуда.

Из-за переполнения буфера, что может привести к проезжавшего мимо скачать, где Curl сам обманом неправильно, резка вашего информированного согласия из цикла в целом.

Уроки?

  • Не используйте зЬгсру () или Strcat ().
  • Ever.
  • Использование snprintf (или strlcpy () и strlcat () , или аналогичные) вместо этого.
  • Всегда проверять возвращаемое значение функций обработки строк, поэтому вам не конечном итоге, используя неправильные результаты.

Ваша следующая задача, чтобы узнать, или которые, используемого вами программного обеспечения, который включает Curl код с этими ошибками. (Версии Curl от 7.26.0 до 7.28.1 включительно пострадавших).

Лучший начать задавать вокруг ...

NB. Несмотря на некоторые продукты Sophos использовать Libcurl, никто из них используется код из уязвимых версий.

You might like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

About the author

Paul Ducklin is a passionate security proselytiser. (That's like an evangelist, but more so!) He lives and breathes computer security, and would be happy for you to do so, too. Paul won the inaugural AusCERT Director's Award for Individual Excellence in Computer Security in 2009. Follow him on Twitter: @duckblog