19 сентября 2013 в 02:38

Разработка → dom.navalny.ru, в котором…

В одной из закрытых тематических групп Фейсбука 18 сентября появилась информация о том, что с сайта dom.navalny.ru можно получить списки сторонников экс-кандидата по районам. Независимые наблюдатели никак не могли остаться в стороне. В вопросе помог разобраться efedin.

Сайт dom.navalny.ru представляет собой карту Москвы, где пользователь имеет возможность отметить свой дом как «захваченный силами добра». Функционал сайта предполагает рассылку для волонтёров. Ничего сложного. При этом зарегистрированные пользователи могут видеть помеченные и непомеченные дома в пределах своего района. За пределами района такая информация недоступна. Также на сайте есть районный чат.

Однако при внимательном изучении оказалось, что помимо домов с безликими «адептами добра» карта содержит и другие объекты — УИКи. По клику на них всплывает окошко с фотографиями очень даже человеческими. Данное обстоятельcтво не могло не вызвать интерес, подогреваемый тем, что на карте отображались не только УИКи в том районе, на который приходился указанный при регистрации адрес, но и в районах соседних. Стало любопытно, в каком виде приходят данные для показа фотографий.

Беглый анализ кода к раскрытию сей тайны не привёл, любопытство и лень подсказали другой способ. Оказалось, что при клике по значку УИКа браузер делает не так много запросов, чтобы их нельзя было перебрать на предмет содержимого ответов. Искомые Facebook и Вконтакте оказались в очень даже упорядоченном и читаемом виде. JSON-ответ был следующего вида: [{«name»:<имя>, «avatar»:<адрес изображения>, «public»:<true/false>}, …]. Единственный же параметр, передающийся как часть адреса ссылки, содержал номер УИК.
Таким образом был найден сервис, который по номеру УИКа выдавал в удобном для обработки виде данные по изображениям зарегистрированного аккаунта из соцсети.

Более того, этот сервис работал даже без необходимости авторизации в системе, что натолкнуло на мысль использования wget для получения данных по всем московским УИКам. Также выяснилось, что если не передавать в качестве параметра номер УИКа, то будет сформирован список пользователей, не указавших привязку к конкретной комиссии.

В результате были получены данные о 27638 аккаунтах, привязанных к конкретным УИКам, и о 2767 аккаунтах, не имеющим такой привязки. Среди пользователей есть повторы имён (1817 случаев совпадения имён для пользователей с УИКами и 101 случай совпадения для пользователей без УИКов). Получены данные по 3130 постоянным УИКам и 1 временному из 4008 московских участковых избиркомов.

А может быть, они сами дали согласие?

«Если вы хотите, чтобы пользователям „Навальный в каждый дом“ были доступны ваше имя и аватар, включите опцию „Открыть мои данные“». Желающих открыть свои данные оказалось всего 1386 человек (1274 связанных с конкретным избирательным участком и 112 «в свободном плавании») — именно у стольких стоит значение true параметра «public», 29014 человек (26364 и 2655 представителей «сил добра», соответственно) такой информацией оказались делиться не готовы — у них значение false. Да и доступность имени и аватара для тех, кто согласился на публичность, простирается далеко за пределы проекта «Навальный в каждый дом».


Структура аккаунтов

Пользователи могли предоставить информацию о своих аккаунтах на Facebook, Twitter и Вконтакте. Наиболее популярной сетью оказался Facebook (12115 аккаунтов, из них 895 не указали привязку к УИКу, 11220 указали свой УИК), на втором месте Вконтакте (11501 аккаунт: 1196 и 10305 пользователей соответственно), третье место у Twitter (6729 человек, из которых 672 не указали данные по своему УИКу, 6057 обозначили свою комиссию). Без аватаров оказались 60 пользователей, 56 из которых, однако, указали свой УИК.


Информация об уязвимости была сообщена программистам ФБК, которые вели разработку сайта. Через полтора часа после сообщения пришёл ответ, который позволяет предположить, что к вопросу безопасности в проекте подошли в стиле security through obscurity. Сейчас по адресу dom.navalny.ru открывается наспех поставленная заглушка.


Ждём возрождения проекта уже без общедоступного сервиса распространения информации о волонтёрах! :) Как вы думаете, смогут ли разработчики оперативно исправить уязвимость так, чтобы не потерять функциональность, и как именно они это сделают?