perlsecpolicy
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- СООБЩЕНИЕ О ВОПРОСАХ БЕЗОПАСНОСТИ В PERL
- ЧТО ТАКОЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ
- Программное обеспечение, обрабатываемое группой безопасности Perl
- Ошибки, которые могут квалифицироваться как проблемы безопасности в Perl
- Ошибки, которые не квалифицируются как проблемы безопасности в Perl
- Передача недоверенного кода интерпретатору
- Переполнение стека из-за чрезмерной рекурсии
- Ошибки отсутствия памяти
- Выход из безопасного отсека
- Использование шаблонов pack p и P
- Проблемы, связанные с неподсчитанными ссылками стека
- Оттаивание данных, предоставленных злоумышленником, с помощью Storable
- Использование баз данных SDBM_File, предоставленных злоумышленником
- Плохо закодированные скаляры UTF-8
- Проблемы, которые существуют только в blead или в кандидате на выпуск
- Модули CPAN или другие ресурсы проекта Perl
- Эмулированные поведения POSIX на системах Windows
- Ошибки, требующие специальной категоризации
- КАК МЫ РАБОТАЕМ С ПРОБЛЕМАМИ БЕЗОПАСНОСТИ
НАЗВАНИЕ
perlsecpolicy - Политика обработки отчетов о безопасности Perl
ОПИСАНИЕ
Проект Perl серьезно относится к вопросам безопасности.
Ответственность за оперативное и эффективное обращение с отчетами о безопасности возложена на группу безопасности, состоящую из подмножества разработчиков ядра Perl.
Этот документ описывает работу группы безопасности Perl и то, как группа оценивает новые отчеты о безопасности.
СООБЩЕНИЕ О ВОПРОСАХ БЕЗОПАСНОСТИ В PERL
Если вы считаете, что обнаружили уязвимость безопасности в интерпретаторе Perl или модулях, поддерживаемых в кодовом базисе ядра Perl, отправьте подробности по электронной почте на адрес perl-security@perl.org. Этот адрес является закрытым списком рассылки, за которым следит группа безопасности Perl.
Вы должны получить начальный ответ на свой отчет в течение 72 часов. Если вы не получите ответа в течение этого времени, обратитесь к Perl Steering Council.
При ответах члены группы безопасности, как правило, включают адрес perl-security@perl.org в поля «Кому» или «Копия». Это позволяет всей группе безопасности отслеживать обсуждение и вносить свои замечания по мере необходимости. Используйте функцию «Ответить всем» в вашем почтовом клиенте при отправке последующих ответов, чтобы все члены группы безопасности получили сообщение.
Группа безопасности оценит ваш отчет и предварительно определит, соответствует ли он области задач группы. Общие руководящие принципы этого процесса подробно описаны в разделе "ЧТО ТАКОЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ".
Если ваш отчет соответствует критериям группы, будет открыта проблема в закрытом трекере группы, и вам будет предоставлен идентификатор проблемы. Идентификаторы проблем имеют вид perl-security#NNN. Включайте этот идентификатор во все последующие сообщения.
Группа безопасности будет направлять периодические обновления о статусе вашей проблемы и направлять вас в необходимых дальнейших действиях для завершения процесса устранения уязвимостей. Этапы, через которые обычно проходят уязвимости, описаны в разделе "КАК МЫ РАБОТАЕМ С ПРОБЛЕМАМИ БЕЗОПАСНОСТИ".
ЧТО ТАКОЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ
Уязвимость — это поведение программной системы, которое подрывает ожидаемые защиты конфиденциальности, целостности или доступности системы.
Проблема безопасности — это ошибка в одном или нескольких компонентах программной системы, создающая уязвимость.
Программное обеспечение, написанное на языке программирования Perl, обычно состоит из множества слоев программного обеспечения, написанных различными группами. Очень сложно определить, какой конкретный слой сложного приложения реального мира был ответственным за предотвращение уязвимого поведения, но это важная часть исправления уязвимости.
Программное обеспечение, обрабатываемое группой безопасности Perl
Группа безопасности Perl обрабатывает вопросы безопасности в:
-
Интерпретаторе Perl
-
Модулях Perl, поставляемых с интерпретатором и разработанных в репозитории ядра Perl
-
Утилитах командной строки, поставляемых с интерпретатором и разработанных в репозитории ядра Perl
Файлы в каталоге cpan/ в репозитории Perl и сборках tarballs разрабатываются и поддерживаются независимо. Группа безопасности Perl не обрабатывает непосредственно проблемы безопасности для этих модулей, но, поскольку этот код входит в состав Perl, мы поможем в направлении проблемы соответствующему(им) разработчику(ам), и вы по-прежнему можете сообщать нам об этих проблемах конфиденциально.
Ошибки, которые могут квалифицироваться как проблемы безопасности в Perl
Perl разработан как быстрый и гибкий язык программирования общего назначения. Интерпретатор Perl и модули Perl облегчают создание безопасных и надежных приложений, но у них есть ограничения.
Как общее правило, ошибка в Perl должна соответствовать всем следующим критериям, чтобы считаться проблемой безопасности:
-
Уязвимое поведение не упоминается в документации Perl или в трекере публичных проблем.
-
Уязвимое поведение не подразумевается ожидаемым поведением.
-
Уязвимое поведение не является общепринятым ограничением реализации.
-
Уязвимое поведение, вероятно, будет подвержено атаке в приложениях, написанных на Perl, которые в противном случае были бы безопасны.
-
Уязвимое поведение предоставляет злоумышленнику конкретную ощутимую выгоду, которая инициирует поведение.
Ошибки, которые не квалифицируются как проблемы безопасности в Perl
Существуют определенные категории ошибок, которые часто сообщаются группе безопасности, но не соответствуют указанным выше критериям.
Ниже приводится список распространенных ошибок, которые не обрабатываются как проблемы безопасности.
Передача недоверенного кода интерпретатору
Парсер Perl не предназначен для оценки недоверенного кода. Если ваше приложение требует оценки недоверенного кода, оно должно полагаться на песочницу на уровне операционной системы для обеспечения безопасности.
Переполнение стека из-за чрезмерной рекурсии
Чрезмерная рекурсия часто вызывается кодом, который не накладывает ограничений на входные данные. Интерпретатор Perl предполагает, что ограничения на рекурсию будут наложены приложением.
Ошибки отсутствия памяти
Общие конструкции Perl, такие как pack, оператор x, и регулярные выражения принимают числовые квантификаторы, которые управляют тем, сколько памяти будет выделено для хранения промежуточных значений или результатов. Если вы позволите злоумышленнику предоставить эти квантификаторы и израсходовать всю доступную память, интерпретатор Perl не помешает этому.
Выход из безопасного отсека
Операции и безопасные отсеки не поддерживаются как механизмы безопасности. Парсер Perl не предназначен для оценки недоверенного кода.
Использование шаблонов pack p и P
Эти шаблоны небезопасны по своей природе.
Проблемы, связанные с неподсчитанными ссылками стека
Эти ошибки обычно проявляются как ошибки использования после освобождения или как ошибки проверки типа SV. Обычно сбои стека, не имеющего подсчета ссылок, возникают, потому что код одновременно изменяет ссылку или glob и использует значения, на которые ссылается этот glob или ссылка.
Этот тип ошибки — давняя проблема интерпретатора Perl, которая редко встречается в обычном коде. Примеры подобных ошибок обычно предполагают, что код, предоставленный злоумышленником, будет оценён интерпретатором Perl.
Размораживание данных, предоставленных злоумышленником, с помощью Storable
Storable разработан как очень быстрый формат сериализации. Он не предназначен для безопасной десериализации недоверенных входных данных.
Использование предоставленных злоумышленником баз данных SDBM_File
Модуль SDBM_File не предназначен для использования с недоверенными базами данных SDBM.
Скаляры с некорректно закодированными флагами UTF-8
Этот тип ошибки возникает, когда слой :utf8 PerlIO используется для чтения данных с некорректной кодировкой или когда используются другие механизмы для прямого управления флагом UTF-8 для SV.
Скаляр SV с некорректно закодированным флагом UTF-8 не является допустимым SV. Код, создающий SV таким образом, нарушает внутреннее состояние Perl.
Проблемы, существующие только в ветке blead или в кандидатах на выпуск
Ветвь blead и кандидаты на выпуск Perl не получают поддержки в области безопасности. Уязвимости, присутствующие только в предварительных версиях Perl, обрабатываются в рамках обычного процесса отслеживания и решения ошибок.
Модули CPAN или другие ресурсы проекта Perl
Группа по безопасности Perl фокусируется на интерпретаторе Perl и модулях, поддерживаемых в ядре Perl. Команда не имеет специального доступа для исправления модулей CPAN, приложений, написанных на Perl, веб-сайтов проектов Perl, почтовых списков Perl или серверов IRC Perl.
Эмулированные POSIX-поведения на системах Windows
Интерпретатор Perl пытается эмулировать fork, system, exec и другие POSIX-поведения на системах Windows. Эта эмуляция имеет множество особенностей, которые подробно документированы в публичном трекере проблем Perl. Изменение этих поведений вызовет значительные нарушения для существующих пользователей Windows.
Ошибки, требующие специальной классификации
Некоторые ошибки в интерпретаторе Perl возникают в областях кодовой базы, которые одновременно являются чувствительными к безопасности и склонны к ошибкам при нормальном использовании.
Регулярные выражения
Недоверенные регулярные выражения обычно безопасны для компиляции и сопоставления с рядом оговорок. Разработчики несут ответственность за ограничение следующих особенностей движка регулярных выражений Perl.
Вычисление недоверенных регулярных выражений, в то время как use re 'eval'; активен, никогда не является безопасным.
Регулярные выражения не гарантируют компиляцию или вычисление в любом конкретном конечном временном интервале.
Регулярные выражения могут потреблять всю доступную системную память при компиляции или вычислении.
Регулярные выражения могут вызвать чрезмерную рекурсию, которая остановит интерпретатор Perl.
В качестве общего правила не ожидайте, что движок регулярных выражений Perl будет устойчив к атакам типа отказа в обслуживании.
Базы данных DB_File, ODBM_File или GDBM_File
Эти модули полагаются на внешние библиотеки для взаимодействия с файлами баз данных.
Ошибки, вызванные чтением и записью этих форматов файлов, обычно вызваны реализацией базовой библиотеки и не являются проблемами безопасности в Perl.
Ошибки, при которых Perl неправильно обрабатывает неожиданные корректные возвращаемые значения из базовых библиотек, могут квалифицироваться как проблемы безопасности в Perl.
Атаки на основе сложности алгоритма
Интерпретатор Perl достаточно устойчив к атакам на основе сложности алгоритма. Он не защищён от них полностью.
Ошибки сложности алгоритма, которые зависят от обработки интерпретатором чрезвычайно больших объёмов данных, предоставленных злоумышленником, обычно не рассматриваются как проблемы безопасности.
См. "Атаки на основе сложности алгоритма" в perlsec для дополнительной информации.
КАК МЫ РАБОТАЕМ С ПРОБЛЕМАМИ БЕЗОПАСНОСТИ
Группа по безопасности Perl придерживается принципов ответственного раскрытия информации. Проблемы безопасности хранятся в секрете до тех пор, пока для большинства пользователей не будет доступно исправление. Это сводит к минимуму потенциальные риски для пользователей, связанные с уязвимостями в Perl.
Временное скрытие проблем от пользователей — это необходимая жертва, чтобы обеспечить их безопасность. Постоянное скрытие проблем от пользователей не является целью.
При сообщении о проблеме безопасности в частном порядке по адресу perl-security@perl.org, мы обычно ожидаем, что вы будете придерживаться принципов ответственного раскрытия информации при обработке сообщения. Если вы не можете или не хотите сохранить проблему в секрете до тех пор, пока исправление не станет доступно пользователям, вы должны чётко указать это в первоначальном сообщении.
Процесс устранения уязвимостей группой по безопасности призван быть максимально открытым и прозрачным в отношении состояния вашего сообщения об уязвимости.
Процесс устранения уязвимостей в Perl
Первоначальный контакт
Новые сообщения об уязвимостях получат ответ в течение 72 часов с момента их получения группой по безопасности. Если вы не получите ответа в этот срок, свяжитесь с Perl Steering Council.
Первоначальный ответ, отправленный группой по безопасности, подтвердит получение вашего сообщения и предоставит приблизительные сроки анализа группой по безопасности.
Первоначальная оценка
Группа по безопасности оценит сообщение и определит, соответствует ли оно критериям обработки как проблемы безопасности.
Группа по безопасности стремится завершить первоначальную оценку сообщения в течение двух недель. Сложные проблемы, требующие значительных обсуждений или исследований, могут занять больше времени.
Если сообщение об уязвимости не может быть воспроизведено или не соответствует критериям группы по безопасности для обработки как проблемы безопасности, вы получите уведомление по электронной почте и возможность ответить.
Назначение идентификатора проблемы
Сообщения об уязвимостях, которые прошли первоначальную оценку, преобразуются в проблемы в закрытом трекере группы по безопасности. Когда сообщение переходит на этот этап, вам будет предоставлен идентификатор проблемы для дальнейшего использования. Эти идентификаторы имеют формат perl-security#NNN или Perl/perl-security#NNN.
Назначение идентификатора проблемы не подтверждает, что сообщение об уязвимости представляет собой уязвимость в Perl. Многие сообщения требуют дальнейшего анализа, чтобы достичь этого определения.
Проблемы в закрытом трекере группы по безопасности используются для сбора подробностей о проблеме и отслеживания прогресса в решении. Эти заметки и другие детали не публикуются после разрешения проблемы. Сохранение заметок о проблеме в секрете позволяет группе по безопасности свободно обсуждать методы атак, инструменты атак и другие связанные с этим частные вопросы.
Разработка исправлений
Члены группы по безопасности детально проверят сообщение и соответствующий код, чтобы разработать исправления для поддерживаемых версий Perl.
Если команда обнаружит, что сообщённая проблема не соответствует критериям команды на этом этапе, вы получите уведомление по электронной почте и возможность ответить, прежде чем проблема будет закрыта.
В этот период команда может обсудить с вами возможные исправления или предоставить вам исправления для тестирования. Никакая информация не должна быть опубликована на данном этапе.
Назначение идентификатора CVE
После полного подтверждения проблемы и нахождения потенциального исправления, группа по безопасности запросит идентификатор CVE для проблемы, чтобы использовать его в публичных объявлениях.
Для подачи запроса на идентификатор CVE необходимо собрать такие детали, как диапазон уязвимых версий Perl и имена людей, обнаруживших уязвимость.
Группа по безопасности может попросить вас уточнить, какое имя мы должны использовать при указании открытия проблемы. В разделе «Признание уязвимости и вознаграждения» этого документа описан наш предпочтительный формат для этого признания.
После назначения идентификатора CVE вы получите уведомление по электронной почте. На этом этапе проблема не должна обсуждаться публично.
Уведомления о предварительном выпуске
Когда группа по безопасности удовлетворена готовностью исправления проблемы безопасности к публичному выпуску, рассылается предварительное уведомление о выпуске основным распространителям Perl.
Это предварительное уведомление включает список версий Perl, которые подвержены уязвимости, анализ рисков для пользователей, исправления, разработанные группой по безопасности, и любые сведения о смягчающих мерах или обратной портировании исправлений в более старые версии Perl, которые доступны группе по безопасности.
Предварительное уведомление включает конкретную целевую дату, когда проблема будет объявлена публично. Этот период между предварительным уведомлением и датой выпуска позволяет дистрибуторам подготовиться и протестировать собственные обновления и объявления. В этот период сведения об уязвимости и исправлениях конфиденциальны и не должны разглашаться публично. Этот период эмбарго может быть продлён, если во время тестирования будут выявлены проблемы.
Вам будут отправлены части предварительных уведомлений, относящиеся к конкретной проблеме, которую вы сообщили. Это электронное письмо будет включать целевую дату выпуска. Будут отправлены дополнительные обновления, если целевая дата выпуска изменится.
Тестирование предварительного выпуска
Группа по безопасности Perl не занимается непосредственным выпуском официальных версий Perl. Команда выпускает исправления безопасности, размещая коммиты в публичном репозитории git Perl и рассылая уведомления.
Многие пользователи и дистрибуторы предпочитают использовать официальные релизы Perl, а не применять исправления к более старым выпускам. Группа по безопасности работает с менеджерами релизов Perl, чтобы сделать это возможным.
Новые официальные релизы Perl обычно производятся и тестируются на частных системах в период эмбарго предварительного выпуска.
Выпуск исправлений и объявления
По окончании периода эмбарго исправления безопасности будут внесены в публичный репозиторий Perl Git и будут разосланы объявления по почтовым спискам perl5-porters и oss-security.
Если официальные релизы Perl готовы, они будут опубликованы в это время и объявлены на почтовом списке perl5-porters.
Группа по безопасности отправит последующее уведомление всем, кто участвовал в эмбарго предварительного выпуска, после завершения процесса выпуска. Отправители сообщений об уязвимости и дистрибуторы Perl не должны публиковать собственные объявления или исправления до завершения процесса выпуска группой по безопасности Perl.
Общеизвестные и нулевые уязвимости
Процесс устранения уязвимостей группой по безопасности предполагает, что проблемы сообщаются в частном порядке и хранятся в секрете до их разрешения. Это не всегда так, и информация иногда выходит наружу до готовности исправления.
В этих ситуациях команда должна решить, увеличивает или уменьшает конфиденциальность риск для пользователей Perl. В некоторых случаях открытость о риске, создаваемом проблемой безопасности, позволит пользователям защититься от неё, в других случаях привлечение внимания к нерешённой проблеме безопасности увеличит вероятность её злоупотребления.
Проблемы безопасности нулевого дня
Если нерешённая критическая проблема безопасности в Perl активно используется для атак на системы, команда безопасности отправит объявления как можно быстрее, с любыми имеющимися у команды средствами смягчения последствий.
Для обработки проблемы будет использоваться общедоступный отслеживатель дефектов Perl, чтобы дополнительная информация, исправления и идентификаторы CVE были видны пострадавшим пользователям как можно быстрее.
Другие утечки информации о проблемах безопасности
В зависимости от значимости раскрытой информации о проблеме безопасности и риска, что она станет атакой нулевого дня, команда безопасности может пропустить весь или часть своего обычного рабочего процесса по устранению проблем.
Если команда безопасности узнает о существенной проблеме безопасности после того, как она была идентифицирована и решена в общедоступном отслеживателе проблем Perl, команда запросит идентификатор CVE и отправит объявление, чтобы проинформировать пользователей.
Признание уязвимости и вознаграждения
Проект Perl ценит усилия исследователей в области безопасности, направленные на повышение безопасности Perl.
Поскольку большая часть этой работы скрыта от общественности, публичное признание исследователей является важной частью процесса устранения уязвимостей.
Признание в объявлениях об уязвимостях
При исправлении проблем безопасности мы будем пытаться указать конкретного исследователя (исследователей), обнаружившего ошибку, в наших объявлениях.
Признание объявляется с использованием полного имени исследователя по его выбору.
Если вклад исследователя был профинансирован конкретной компанией или является частью организованного проекта исследования уязвимостей, по просьбе исследователя мы включим короткое название этой группы.
Объявления Perl написаны на английском языке с использованием 7-битного набора символов ASCII для воспроизводимости в различных форматах. Мы не включаем гиперссылки, доменные имена или маркетинговый материал в эти благодарности.
В случае, если невозможно установить надлежащее признание за обнаружение уязвимости или существует разногласие между командой безопасности Perl и исследователем относительно того, как должно быть дано признание, оно будет опущено из объявлений.
Вознаграждения за уязвимости Perl
Проект Perl — это добровольная работа некоммерческой организации. Мы не предоставляем денежные вознаграждения за сообщения о проблемах безопасности в Perl.
Сервис Internet Bug Bounty предлагает денежные вознаграждения за некоторые проблемы безопасности Perl после их полного решения. Условия этой программы доступны на сайте HackerOne.
Эта программа не реализуется проектом Perl или командой безопасности Perl.
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.36.0/perlsecpolicy