Интернет приписывает Джейсону Стейтему фразу «Одна ошибка — и ты ошибся!». В случае этой истории она почему‑то сама собой переиначилась в вариант из заголовка. Уж очень всё оказалось из серии «никогда так не делай».

24 июля исследователь BobDaHacker опубликовал разбор Click to Pray — официального приложения Всемирной сети молитвы Папы Римского.

В сервисе на тот момент было 719 517 зарегистрированных аккаунтов. У пользователей были последовательные числовые ID, а API позволяло запросить профиль по ID:

GET https://api.clicktopray.org/user/users/12345

(да, user/users — не опечатка; у них вообще самобытное API).

Меняем 12345 на 12346 — получаем другого пользователя.

В ответе возвращались имя, фамилия, email, страна, дата рождения, роль и несколько служебных полей. Проверки, имеет ли запрашивающий право видеть эти данные, не было. Rate limit исследователь тоже не обнаружил.

Мне кажется, BobDaHacker в этот момент должен был слегка растеряться: то ли от души выматериться, то ли сказать «аминь».

Редакция Dark Reading перед публикацией самостоятельно проверила уязвимость и подтвердила результат.

719 517 пользователей и один endpoint

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

Не требовалось даже особенно хорошо знать Python. Достаточно было догадаться, что после 12345 обычно идёт 12346.

Примерно так:

for user_id in range(1, 719518):
    get_user(user_id)

Клиент говорит серверу: «Дай объект номер 12345». Сервер находит объект номер 12 345 и отдаёт его. Вопросом «А тебе его вообще можно показывать?» он при этом не задаётся.

Это классический IDOR — Insecure Direct Object Reference, или BOLA, Broken Object Level Authorization, в нынешней терминологии OWASP API Security Top 10.

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

В ответах Click to Pray обнаруживались и другие маленькие прелести. Поле с датой рождения называлось borned_date, а роль обычного пользователя имела значение PRAYER.

Последнее вообще выглядит идеально: если в приложении Папы Римского пользователь не PRAYER, то кем ему ещё быть?

Что вообще такое Click to Pray

«Pope's Worldwide Prayer Network» — не случайный стартап, которому удачно достался домен с именем Папы: Франциск публично представлял Click to Pray в январе 2019 года во время воскресного Angelus на площади Святого Петра. В 2020 году он учредил «Всемирную сеть молитвы Папы» как фонд с канонической и ватиканской правосубъектностью (документ опубликован на сайте Святого Престола). Сервис позволяет читать молитвенные намерения Папы, публиковать собственные и молиться вместе с другими участниками. Приложение разрабатывало агентство La Machi Communication for Good Causes.

К 2026 году Click to Pray был вполне большим интернет‑сервисом: больше семисот тысяч профилей, backend, мобильные клиенты, API, регистрация и персональные данные.

И IDOR оказался не единственным сюрпризом.

Подтверждение email без обязательного участия email

BobDaHacker решил посмотреть регистрацию.

После создания пользователя API возвращало validation_hash — UUID, который затем использовался в ссылке подтверждения электронной почты.

Обычно смысл email verification немного в обратном: секрет узнаёт владелец указанного почтового ящика из письма на этот ящик. Click to Pray отправлял секрет на почту и одновременно возвращал его тому же клиенту через API. Забота прочитать присланное письмо после этого приобретала скорее ритуальное значение.

Можно было зарегистрироваться с произвольным адресом и подтвердить его, вообще не открывая соответствующий почтовый ящик. В некотором смысле email verification действительно работала на доверии. Просто обычно под этим понимают немного другое.

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

По скриншоту сейчас нельзя точно определить, что произошло там было со SPF, DKIM, DMARC, поэтому ставить диагноз почтовой системе не будем, но композиция вышла занятная: сервис позволяет получить адреса пользователей через API, а настоящее письмо самого сервиса почтовый клиент встречает предупреждением о возможной подделке.

Отправил и веруй

IDOR BobDaHacker обнаружил в начале января 2026 года.

3 января он отправил описание проблемы девяти адресатам, которых смог найти: на общий контакт Click to Pray, шести сотрудникам сервиса и двум представителям Pope's Worldwide Prayer Network. Ответов не было. Исправления тоже.

В июле исследователь передал информацию журналисту Dark Reading. Журналисты сами проверили endpoint, подтвердили утечку и написали в Pope's Worldwide Prayer Network. Ответа не получили. Попробовали связаться с La Machi. Снова ничего.

И тогда материалы ушли в публикацию.

24 июля статьи BobDaHacker и Dark Reading стали публичными. В тот же день endpoint изменился.

При запросе чужого ID сервер стал отдавать только имя и фамилию — публичные данные профиля. Email, страна и дата рождения исчезли. При запросе собственного ID пользователь по‑прежнему видел свои данные. То есть различать, кто именно запрашивает запись, приложение всё‑таки научилось.

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

Самому BobDaHacker, кстати, никто так ничего и не написал. По его словам, об исправлении он узнал из комментария на Reddit, после чего вернулся к API и проверил endpoint самостоятельно.

В предыдущих сериях

Перенесёмся в октябрь 2019 года. Тогда специалисты британской Fidus Information Security заинтересовались Click to Pray после выпуска — не смейтесь — электронных чёток Click to Pray eRosary.

Материал The Register, опубликованный по горячим следам, приводит слова основателя Fidus Эндрю Мэббитта: один из исследователей посмотрел приложение и примерно за десять минут нашёл несколько серьёзных проблем.

Для входа в профиль использовался четырёхзначный PIN.

Четыре цифры — всего 10 000 вариантов. Ограничения числа попыток не было. Но вскоре выяснилось, что даже перебирать 10 000 вариантов — неоправданное расточительство вычислительных ресурсов: бэкэнд использовал API‑вызовы sendPIN и resetPIN, от которых, если указать email пользователя, можно было получить соответствующий PIN в читаемом виде.

Быстрее самого быстрого brute force оказалось просто спросить у сервера правильный ответ.

The Register решил проверить находку на практике и зарегистрировал тестовый аккаунт. Имя выбрали Satan. Специалисты Fidus получили к нему доступ за несколько минут.

Здесь я долго думал, нужна ли в этом месте шутка, но автор тестовых данных уже всё сделал.

В 2019 году представители Pope's Worldwide Prayer Network отреагировали быстро. Фредерик Форнос сообщил The Register, что после уведомления разработчики занялись проблемой. Выдачу PIN через API закрыли, позднее исправили и возможность неограниченного перебора.

Прошло почти семь лет.

И снова Click to Pray, API, пользовательские данные и отсутствующая проверка того, кому их можно отдавать.

Конкретные ошибки 2019 года исправили. Но после хорошего security‑инцидента хотелось бы получить не только патч: обычно остаются тесты, процедуры и привычка смотреть на авторизацию объектов.

И понимание того, что когда‑нибудь другой человек снова напишет: «У вас проблема».

В январе 2026 года такой человек написал. Сразу девяти адресатам.

Один if был не главной проблемой

BobDaHacker не изобрёл новой техники атаки. BOLA стоит на первом месте в OWASP API Security Top 10 именно потому, что разработчики регулярно забывают одну и ту же проверку.

Да и исправление, судя по тому, как быстро оно появилось после публикации, не потребовало многомесячного проекта, шести очных встреч и двадцати шести «созвонов для синка».

Сам if написать удалось. Сложнее было достучаться до человека, который мог этот if написать. И вот для этого вовсе не обязательно иметь bug bounty, SOC, специальный портал для исследователей или даже помнить о создании security.txt.

Можно намного проще.

Оставить на сайте обычный адрес: «По вопросам работы сайта — webmaster@example.org». Можно телефон. Можно форму обратной связи, которую действительно кто‑то читает.

Необязательно даже знать правильные слова вроде «responsible disclosure». Достаточно, чтобы сообщение «я заметил, что ваш сайт отдаёт персональные данные пользователей» дошло до живого человека и в ответ пришло хотя бы: «Спасибо, смотрим».

В 2019 году это каким‑то образом сработало. В 2026-м девять писем не смогли пройти тот же путь за семь месяцев.

И я вот подумал: Pope's Worldwide Prayer Network специализируется буквально на обеспечении канала, по которому человек может отправить обращение с надеждой быть услышанным.

Но когда обращение направили самой организации, работающего канала в обратную сторону не нашлось.

Аминь.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какие чувства?
33.33%Ну дают!2
16.67%Всякое бывает1
50%Вообще не проблема, они ж не разрабы!3
Проголосовали 6 пользователей. Воздержались 3 пользователя.