perlsecpolicy
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- СООБЩЕНИЕ О ВОПРОСАХ БЕЗОПАСНОСТИ В PERL
- ЧТО ТАКОЕ ВОПРОСЫ БЕЗОПАСНОСТИ
- Программное обеспечение, охватываемое командой безопасности Perl
- Ошибки, которые могут квалифицироваться как проблемы безопасности в Perl
- Ошибки, которые не квалифицируются как проблемы безопасности в Perl
- Передача недоверенного кода интерпретатору
- Переполнение стека из-за чрезмерной рекурсии
- Ошибки из-за нехватки памяти
- Выход за пределы безопасного отсека
- Использование шаблонов упаковки 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 и архивы release tarballs разрабатываются и поддерживаются независимо. Команда безопасности Perl не обрабатывает непосредственно проблемы безопасности для этих модулей, но, поскольку этот код поставляется с Perl, мы поможем перенаправить проблему соответствующему(им) разработчику(ам), и вы по-прежнему можете сообщать нам об этих проблемах конфиденциально.
Ошибки, которые могут квалифицироваться как проблемы безопасности в Perl
Perl разработан как быстрый и гибкий язык программирования общего назначения. Интерпретатор Perl и модули Perl облегчают создание безопасных приложений, но они имеют ограничения.
В качестве общего правила ошибка в Perl должна удовлетворять всем следующим критериям, чтобы считаться проблемой безопасности:
-
Уязвимое поведение не упоминается в документации Perl или общедоступном трекере проблем.
-
Уязвимое поведение не подразумевается ожидаемым поведением.
-
Уязвимое поведение не является общепризнанным ограничением реализации.
-
Уязвимое поведение, вероятно, будет подвержено атакам в иных безопасных приложениях, написанных на Perl.
-
Уязвимое поведение предоставляет злоумышленнику конкретную ощутимую выгоду, которая запускает это поведение.
Ошибки, которые не квалифицируются как проблемы безопасности в Perl
Существуют определённые категории ошибок, которые часто сообщаются команде безопасности, но не удовлетворяют перечисленным выше критериям.
Ниже приведён список распространённых ошибок, которые не рассматриваются как проблемы безопасности.
Передача недоверенного кода интерпретатору
Парсер Perl не предназначен для оценки недоверенного кода. Если ваше приложение требует оценки недоверенного кода, оно должно полагаться на виртуализацию на уровне операционной системы для обеспечения безопасности.
Переполнение стека из-за чрезмерной рекурсии
Чрезмерная рекурсия часто вызвана кодом, который не обеспечивает ограничения на входные данные. Интерпретатор Perl предполагает, что ограничения на рекурсию будут соблюдаться приложением.
Ошибки из-за нехватки памяти
Общие конструкции Perl, такие как pack, оператор x, и регулярные выражения принимают числовые квантификаторы, которые контролируют, сколько памяти будет выделено для хранения промежуточных значений или результатов. Если вы позволите злоумышленнику указать эти квантификаторы и использовать всю доступную память, интерпретатор Perl не предотвратит это.
Выход за пределы безопасного отсека
Операции и Безопасные отсеки не поддерживаются в качестве механизмов безопасности. Парсер Perl не предназначен для оценки недоверенного кода.
Использование шаблонов упаковки p и P
Эти шаблоны небезопасны по своей природе.
Проблемы, связанные с отсутствием подсчёта ссылок в стеке
Эти ошибки, как правило, проявляются как ошибки «использование после освобождения» или как ошибки утверждения о типе SV. Сбой из-за отсутствия подсчёта ссылок в стеке обычно происходит, потому что код одновременно изменяет ссылку или глобал и использует значения, ссылающиеся на этот глобал или ссылку.
Этот тип ошибки — давняя проблема интерпретатора 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 обычно производятся и тестируются на частных системах во время предварительного закрытого периода.
Выпуск исправлений и объявления
По окончании периода закрытости исправления безопасности будут внесены в публичный репозиторий git Perl, и объявления будут отправлены на списки рассылки perl5-porters и oss-security.
Если официальные выпуски Perl готовы, они будут опубликованы в это время и объявлены на списке рассылки perl5-porters.
Команда безопасности отправит последующее уведомление всем, кто участвовал в предварительном закрытом периоде, после завершения процесса выпуска. Отправители отчетов об уязвимостях и дистрибьюторы Perl не должны публиковать собственные объявления или исправления до завершения процесса выпуска команды безопасности Perl.
Общеизвестные и нулевые проблемы безопасности
Процесс устранения уязвимостей команды безопасности предполагает, что проблемы сообщаются конфиденциально и скрываются до тех пор, пока не будут устранены. Это не всегда так, и информация иногда утечкается до готовности исправления.
В этих ситуациях команда должна решить, увеличивает или уменьшает секретный режим работы риск для пользователей Perl. В некоторых случаях, открытое обсуждение риска, создаваемого проблемой безопасности, позволит пользователям защититься от него, в других случаях привлечение внимания к нерешенной проблеме безопасности повысит вероятность её злоупотребления.
Проблемы безопасности нулевого дня
Если нерешенная критическая проблема безопасности в Perl активно используется для атак на системы, команда безопасности разошлет объявления как можно быстрее, с любыми доступными мерами смягчения.
Для обработки проблемы будет использоваться общедоступный отслеживатель ошибок Perl, чтобы дополнительная информация, исправления и идентификаторы CVE были доступны для пострадавших пользователей как можно быстрее.
Другие утечки информации о проблемах безопасности
В зависимости от значимости раскрытой информации о проблеме безопасности и риска её превращения в атаку нулевого дня, команда безопасности может пропустить все или часть обычного рабочего процесса по устранению неполадок.
Если команда безопасности узнает о значительной проблеме безопасности после того, как она была идентифицирована и решена в общедоступном отслеживателе проблем Perl, команда запросит идентификатор CVE и разошлет объявление для информирования пользователей.
Признание уязвимости и вознаграждения
Проект Perl ценит усилия исследователей безопасности, которые направлены на обеспечение безопасности Perl.
Поскольку большая часть этой работы скрыта от публики, публичное признание исследователей является важной частью процесса устранения уязвимостей.
Упоминания в объявлениях об уязвимостях
При исправлении проблем безопасности мы постараемся упомянуть конкретного(их) исследователя(ей), обнаружившего(их) ошибку в наших объявлениях.
Упоминания публикуются с использованием полного имени исследователя по его предпочтениям.
Если вклад исследователя был профинансирован конкретной компанией или является частью организованного проекта исследования уязвимостей, по просьбе исследователя мы включим короткое название этой группы.
Объявления Perl написаны на английском языке с использованием набора символов 7-битной ASCII для воспроизводимости в различных форматах. Мы не включаем гиперссылки, доменные имена или маркетинговый материал в эти признания.
В случае, если невозможно установить надлежащее признание за обнаружение уязвимости или если между командой безопасности Perl и исследователем существует разногласие относительно того, как должно быть предоставлено признание, оно будет опущено из объявлений.
Вознаграждения за уязвимости Perl
Проект Perl — это добровольное, некоммерческое усилие. Мы не предоставляем денежных вознаграждений за сообщение о проблемах безопасности в Perl.
© 1993–2023 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.38.0/perlsecpolicy