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

Я инструктор по дайвингу. Также я инженер, много времени уделяющий разработке и внедрению решений в области безопасности инфраструктуры. Иногда эти два мира пересекаются неожиданным образом. Во время 14-дневной дайвинг-поездки вокруг острова Кокос в Коста-Рике я обнаружил уязвимость в личном кабинете крупной страховой компании, занимающейся страхованием дайвинга, — компании, через которую я лично застрахован. Обнаруженная уязвимость была настолько тривиальной и настолько базовой, что я искренне не мог поверить, что она ещё не использовалась злоумышленниками.

Я сообщил об этой уязвимости 28 апреля 2025 года со стандартным 30-дневным периодом эмбарго. Этот период истёк 28 мая 2025 года — более восьми месяцев назад. Я ждал так долго, чтобы опубликовать информацию, потому что хотел дать организации все разумные возможности для полного устранения проблемы и уведомления пострадавших пользователей. Уязвимость с тех пор была устранена, но я не получил подтверждения о том, что о ней уведомили затронутых юзеров. Я обратился в организацию за разъяснениями по этому вопросу.

Это история о том, что произошло, когда я попытался поступить правильно.

Уязвимость

Чтобы понять, почему всё так плохо, нужно знать, как работает процесс регистрации. Как инструктор по дайвингу, я регистрирую учеников (для страхования) через свой аккаунт на портале. Я ввожу личные данные с их согласия — имя, дату рождения, адрес, номер телефона, электронную почту — и система создаёт для них учётную запись. Затем ученики получают электронные письма с новыми учётными данными: числовым идентификатором и паролем по умолчанию. Они могут войти в систему, чтобы заполнить дополнительную информацию, либо же больше никогда не заходить на портал.

Когда я зарегистрировал трёх учеников, они сидели рядом со мной и проверяли свои приветственные письма. Идентификаторы пользователей были почти идентичны — последовательные числа, одно за другим. Именно тогда я понял, что происходит что-то действительно плохое.

А вот в чём проблема: портал использовал возрастающие числовые идентификаторы пользователей для входа в систему: пользователь XXXXXX0, XXXXXX1, XXXXXX2 и так далее. Уже одно это вызывает подозрения, но ситуация усугубляется: каждая учётная запись была создана с использованием статического пароля по умолчанию, который никогда не менялся при первом входе. И многие пользователи — особенно студенты, чьи учётные записи были созданы преподавателями — никогда его не меняли.

Таким образом, «аутентификация» для доступа к полному профилю пользователя — имени, адресу, номеру телефона, электронной почте, дате рождения — выглядела так:

  1. угадайте число:

  2. введите тот же пароль по умолчанию, который используется для всех учётных записей при их создании;

  3. есть большая вероятность, что вы войдёте в аккаунт.

Вот и всё. Никаких ограничений скорости. Никакой блокировки учётной записи. Никакой многофакторной аутентификации. Просто увеличивающееся целое число и пароль, который вполне мог бы выглядеть как password123.

Я проверил проблему с минимальным доступом, необходимым для подтверждения масштаба проблемы — и сразу же остановился. Значительная часть идентификаторов в выборке по-прежнему использовала пароль по умолчанию. Раскрытые данные включали не только адреса электронной почты, но и полные личные профили, в том числе и профили несовершеннолетних студентов.

Проверка концепции

Дисклеймер: эту главу автор удалил из оригинального поста, но она есть в Internet Archive.

Чтобы подтвердить, что проблема не ограничивается несколькими учётными записями, я написал короткий скрипт, автоматизирующий действия, которые можно выполнить вручную в любом браузере. Сначала я попробовал использовать Python requests, но механизм входа в портал был настолько сложным, что создание чистой сессии было невозможно. Поэтому я использовал Selenium — инструмент автоматизации, который просто запускает в реальном браузере те же шаги, которые любой пользователь выполнил бы вручную.

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

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

Вот как выглядел результат одного успешного входа в систему — отредактированный, но структурно идентичный реальному: 

Перечитайте дату рождения. 2011 год. На тот момент этому человеку было 14 лет. Его полное имя, адрес электронной почты, номер телефона, гражданство и физический домашний адрес — всё это доступно только по порядковому номеру и стандартному паролю. И это не был единичный случай. Несколько профилей принадлежали несовершеннолетним.

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

Раскрытие информации

Я сделал всё по правилам. Сначала связался с CSIRT Malta (MaltaCIP) — поскольку эта организация зарегистрирована на Мальте, это компетентный национальный орган. Национальная политика Мальты по скоординированному раскрытию уязвимостей (NCVDP) прямо требует, чтобы о подтверждённых уязвимостях сообщалось как ответственным лицам, так и CSIRTMalta.

Затем я отправил электронное письмо непосредственно в организацию, скопировав его в CSIRT:

Уважаемые дамы и господа,

Как коллега-инструктор по дайвингу, застрахованный через [организацию], и штатный инженер по платформе Linux, я обращаюсь к вам, чтобы ответственно сообщить о критической уязвимости, которую я обнаружил в системе учётных записей пользователей [организации].

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

Основные сведения:

повторное использование паролей в разных учётных записях без принудительной перезагрузки паролей;

предсказуемое, поэтапное перечисление идентификаторов пользователей;

раскрытие конфиденциальных данных пользователей, в том числе несовершеннолетних, без надлежащих мер защиты.

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

Кроме того, для обеспечения прозрачности и проверки я безопасно поделился своим экспериментальным кодом через зашифрованный сервис для размещения текста: [ссылка удалена].

В духе ответственного раскрытия информации я уже уведомил CSIRT Malta (в копии) о необходимости официального начала процесса сообщения о нарушениях, учитывая оперативное присутствие [организации] на Мальте.

Прошу [организацию] подтвердить получение данного уведомления в течение 7 дней.

Я предоставляю [организации] 30 дней, начиная с 28 апреля 2025 года, для устранения или решения проблемы уязвимости, прежде чем я рассмотрю вопрос о публичном раскрытии информации.

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

[контактные данные]

Настоятельно рекомендую назначить контактное лицо по вопросам IT-безопасности для непосредственного сотрудничества по этому вопросу.

Большое спасибо за ваше внимание к этому важному вопросу. Я с нетерпением жду возможности сотрудничать с вами для безопасного решения проблемы.

Оба указанных срока являются стандартными — если не сказать, даже завышенными — в рамках ответственного раскрытия информации.

Ответ

Через два дня я получил ответ. Не от их IT-команды, а от юридической фирмы их сотрудников по защите данных (DPO).

Письмо начиналось достаточно вежливо — они признали проблему и сообщили, что начали расследование. Они даже упомянули, что сбрасывают пароли по умолчанию и планируют внедрить двухфакторную аутентификацию. Хорошо.

Но затем тон изменился:

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

Позвольте мне перевести: «Мы бы хотели, чтобы вы не сообщали правительству о нашей проблеме безопасности».

Далее лучше не стало:

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

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

Они также прислали декларацию с требованием моей подписи — заодно запросив мой паспорт, — подтверждающую, что я удалил все данные, ничего не буду разглашать и буду хранить всю информацию в «строго конфиденциальном порядке». Крайний срок? Конец рабочего дня в того же дня, когда они её прислали.

Эта декларация содержала следующую «жемчужину»: «Я также обещаю, что буду хранить содержание этой декларации в строгой конфиденциальности».

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

Затем последовали напоминания. Одно «дружеское» напоминание. Затем «срочное». Подпишите декларацию. Снизьте накал страстей. Идите дальше. Молчите.

Сопротивление

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

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

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

Я также указал, что в соответствии с Национальным протоколом по защите персональных данных Мальты (NCVDP) привлечение CSIRT Malta является частью ожидаемого процесса отчётности, а не враждебным актом, и что публикация анализов после устранения нарушений является стандартной практикой в ​​сообществе специалистов по безопасности.

Их ответ был ещё более категоричным. Они сослались на статью 337E Уголовного кодекса Мальты — неправомерное использование компьютеров — и любезно напомнили мне, что:

Статья 337E Уголовного кодекса также предусматривает, что «если какое-либо действие совершено за пределами Мальты, которое, если бы оно было совершено на Мальте, представляло бы собой преступление [...] оно [...] считается совершённым на Мальте». Это означает, что ваши действия будут считаться уголовным преступлением на Мальте, даже если они совершены в другой стране.

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

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

Меня это устраивает. Потому что вот в чём дело: уязвимость исправлена. Пароли по умолчанию сброшены. Внедряется двухфакторная аутентификация. Мне жаль разработчика(ов), которому(ым) пришлось исправлять эту проблему, но, по крайней мере, она больше не является уязвимой к эксплуатации. Конечно, было бы лучше, если бы организация поблагодарила меня и взяла на себя ответственность за уведомление пострадавших пользователей. Если инцидент квалифицируется как нарушение защиты персональных данных (что так и есть) и может привести к (высокому) риску для физических лиц, особенно учитывая участие несовершеннолетних, то статьи 33 и 34 GDPR, как правило, требуют уведомления надзорного органа и информирования затронутых субъектов данных.

Статья 34(1) GDPR: Если нарушение защиты персональных данных может привести к высокому риску для прав и свобод физических лиц, контролёр должен незамедлительно уведомить субъекта данных о нарушении защиты персональных данных.

Статья 34(2) GDPR: Уведомление субъекта данных, указанное в пункте 1 настоящей статьи, должно чётко и ясно описывать характер нарушения защиты персональных данных и содержать как минимум информацию и меры, указанные в пунктах (b), (c) и (d) статьи 33(3).

Я не получил подтверждения того, что эти уведомления были когда-либо осуществлены.

Игра в обвинения

Больше всего мне понравилась позиция организации относительно того, чья это на самом деле вина:

Мы утверждаем, что ответственность за смену пароля лежит на пользователях (после того, как мы установим пароль по умолчанию).

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

Краткое напоминание:

Статья 5(1)(f) GDPR (целостность и конфиденциальность): Персональные данные должны обрабатываться таким образом, чтобы обеспечить надлежащую безопасность персональных данных, включая защиту от несанкционированной или незаконной обработки и от случайной потери, уничтожения или повреждения, с использованием соответствующих технических или организационных мер.

В соответствии с GDPR, контролёр данных (а именно: организация) несёт ответственность за внедрение соответствующих технических и организационных мер для обеспечения безопасности данных. Статический пароль по умолчанию на портале, уязвимом для IDOR, ни по какому определению не является «надлежащей мерой».

Статья 24(1) GDPR (ответственность контролёра): Принимая во внимание характер, объём, контекст и цели обработки, а также риски различной вероятности и степени тяжести для прав и свобод физических лиц, контролёр должен внедрить соответствующие технические и организационные меры для обеспечения и возможности продемонстрировать, что обработка осуществляется в соответствии с настоящим Регламентом. Эти меры должны пересматриваться и обновляться по мере необходимости.

Это устоявшаяся схема

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

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

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

Что должно было произойти

  1. Признание ошибки.

  2. Получите отчет — честно говоря, они это сделали.

  3. Исправьте уязвимость — они тоже начали над этим работать.

  4. Поблагодарите исследователя, вместо того чтобы угрожать ему уголовным преследованием.

  5. Разработайте политику скоординированного раскрытия уязвимостей (CVD), чтобы исследователи знали, как сообщать о проблемах и чего ожидать.

  6. Уведомите пострадавших пользователей, особенно родителей несовершеннолетних, чьи данные были раскрыты.

  7. Не пытайтесь заставить замолчать исследователя с помощью соглашений о неразглашении, замаскированных под «заявления».

Что вы можете сделать

Если вы организация:

  • Опубликуйте политику скоординированного раскрытия уязвимостей. Она не обязательно должна быть сложной — можно начать с файла security.txt и чёткого процесса, способствующего прозрачности.

  • Поблагодарите исследователей за помощь в улучшении вашей системы безопасности.

  • Не стреляйте в гонца. Человек, сообщивший об ошибке, не ваш враг. Враг — это ошибка.

  • Не обвиняйте своих пользователей в сбоях безопасности, за которые вы несёте ответственность как оператор данных.

Если вы исследователь в области безопасности:

  • Всегда привлекайте свою национальную группу реагирования на инциденты безопасности (CSIRT). Это защитит вас и создаст официальную запись.

  • Документируйте всё. Каждое электронное письмо, каждую отметку времени, каждый ответ.

  • Не подписывайте соглашения о неразглашении, которые запрещают вам обсуждать процесс раскрытия информации. Но вы можете согласиться удалить данные (и ОБЯЗАНЫ это сделать!), не соглашаясь на молчание.

  • Знайте свои права. Во многих юрисдикциях существуют правовые гарантии добросовестного проведения исследований в области безопасности. Директива ЕС NIS2 поощряет скоординированное раскрытие уязвимостей.

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

Этот пост вызвал неоднозначную реакцию в сообществе. Его активно обсуждают на Reddit и других профильных форумах.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Что вы думаете о действиях разработчика?
82.93%Он сделал всё правильно и в соответствии с законом34
14.63%Ему следовало сначала уведомить саму компанию и дождаться её реакции6
2.44%Действия, в целом, верные, но разработчик использовал недобросовестные методы, за что и получил претензии1
Проголосовал 41 пользователь. Воздержались 9 пользователей.