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 и архивы релизов разрабатываются и поддерживаются независимо. Группа безопасности Perl не обрабатывает проблемы безопасности для этих модулей.
Ошибки, которые могут считаться проблемами безопасности в Perl
Perl разработан как быстрый и гибкий универсальный язык программирования. Интерпретатор Perl и модули Perl делают создание безопасных и надёжных приложений лёгким, но они имеют ограничения.
Как общее правило, ошибка в Perl должна соответствовать всем следующим критериям, чтобы считаться проблемой безопасности:
-
Уязвимое поведение не упомянуто в документации Perl или в публичном трекере проблем.
-
Уязвимое поведение не вытекает из ожидаемого поведения.
-
Уязвимое поведение не является общепризнанным ограничением реализации.
-
Уязвимое поведение, скорее всего, будет подвержено атакам в приложениях, написанных на Perl, которые в остальном безопасны.
-
Уязвимое поведение предоставляет злоумышленнику определённую ощутимую выгоду, которая вызывает это поведение.
Ошибки, которые не считаются проблемами безопасности в Perl
Существуют определённые категории ошибок, которые часто сообщаются группе безопасности, но не соответствуют перечисленным выше критериям.
Ниже приведён список распространённых ошибок, которые не рассматриваются как проблемы безопасности.
Передача недоверенного кода интерпретатору
Парсер Perl не предназначен для оценки недоверенного кода. Если ваше приложение требует оценки недоверенного кода, оно должно полагаться на изоляцию на уровне операционной системы.
Переполнение стека из-за чрезмерной рекурсии
Чрезмерная рекурсия часто вызвана кодом, который не накладывает ограничений на входные данные. Интерпретатор Perl предполагает, что ограничения рекурсии будут накладываться приложением.
Ошибки, связанные с нехваткой памяти
Общие конструкции Perl, такие как pack, оператор x, и регулярные выражения принимают числовые квантификаторы, которые контролируют количество памяти, которое будет выделено для хранения промежуточных значений или результатов. Если вы разрешите злоумышленнику предоставить эти квантификаторы и использовать всю доступную память, интерпретатор Perl не предотвратит этого.
Выход за пределы безопасной области
Ограничения Opcode и безопасные области (Safe) не поддерживаются как механизмы безопасности. Парсер Perl не предназначен для оценки недоверенного кода.
Использование шаблонов pack p и P
Эти шаблоны по своему дизайну небезопасны.
Проблемы со стеком, не использующим подсчёт ссылок
Эти ошибки, как правило, проявляются как ошибки use-after-free или как ошибки проверки типа SV. Сбой стека, не использующего подсчёт ссылок, обычно происходит из-за того, что код одновременно изменяет ссылку или glob и использует значения, на которые ссылается этот glob или ссылка.
Этот тип ошибки является давней проблемой интерпретатора Perl, которая редко возникает в обычном коде. Примеры такого типа ошибок, как правило, предполагают, что код, предоставленный злоумышленником, будет оценен интерпретатором Perl.
END_OF_DOCUMENT_MARKERРазмораживание данных, предоставленных злоумышленником, с помощью 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.
Первоначальный ответ команды по безопасности подтвердит получение вашего сообщения и предоставит ориентировочный срок для анализа командой по безопасности.
Первоначальный анализ
Команда по безопасности оценит отчет и определит, соответствует ли он критериям для обработки как проблемы безопасности.
Команда по безопасности стремится завершить первоначальный анализ отчета в течение двух недель. Сложные проблемы, требующие значительных обсуждений или исследований, могут занять больше времени.
Если отчет о проблеме безопасности не может быть воспроизведен или не соответствует критериям команды по безопасности для обработки как проблемы безопасности, вам будет отправлено уведомление по электронной почте, и вам будет предоставлена возможность ответить.
Присвоение идентификатора проблемы
Отчеты о проблемах безопасности, прошедшие начальный анализ, преобразуются в проблемы в закрытом трекере проблем команды по безопасности. Когда отчет достигает этой стадии, вам будет предоставлен идентификатор проблемы для дальнейшего использования. Эти идентификаторы имеют формат 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.
Программа 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.34.0/perlsecpolicy