Русский
Русский
English
Статистика
Реклама

Баг

Особенность Вконтакте

27.06.2020 14:19:52 | Автор: admin

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



Разбираемся


Геолокация по какой-либо причине оказалась включена для приложения, но как она утекла оставалось загадкой. Знаете, где в ВК можно увидеть геолокацию человека? На фотографиях, верно. Вот только фотографий в этом районе я не делал, да и вообще запретил ставить метки смартфону.


Еще варианты? Что же я такого сделал, что меня спалило? Как оказалось я просто зашел в раздел Добавить друга, чтоб посмотреть кого мне рекомендуют. В мобильном приложении для Андроид и IOS при переходе в раздел "Друзья" "Добавить друга" происходит разглашение примерной геолокации пользователя через сервис "Найти рядом со мной".


Найти рядом со мной должен раздавать вашу геолокацию и отображать ваше примерное местоположение, в этом его суть. Ранее для того, чтобы это произошло и ваша страница появилась в сервисе "Найти рядом со мной", необходимо было нажать соответствующую кнопку. То есть зайти в сам раздел, где и было написано, что ваша геолокация раздается. В новой версии приложения этого НЕ требуется.


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


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


Тестировалось на IOS и Android на двух разных аккаунтах. Хотите повторить?


  1. Вам нужно всего лишь 2 телефона и включенная для приложения ВК геолокация
  2. На одном телефоне заходите в "Друзья" "Добавить друга"
  3. На другом в Найти рядом с мной
  4. PROFIT! Вы видите из Найти рядом со мной аккаунт второго телефона, пользователь которого и не думал показывать свое местоположение

Резюме


Благодаря этой особенности:


  • Пользователь не планировал пользоваться функцией "Найти рядом со мной" ничего для этого не делал, но его там видят
  • Пользователю не сообщается, что пользуясь разделом "Добавить друзей" он дает согласие на отображение себя в "Найти рядом со мной", это делается скрыто
  • Возможности отключить только "Найти рядом со мной" нет, придется целиком отключить геолокацию в приложении

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


Внимание! Перед тем, как рассказать аудитории Хабра об этой проблеме, мной были предприняты попытки сообщить о ней разработчикам через платформу HackerOne. Разработчики посчитали это все не багом, а репорт был закрыт в статусе informative, на мои дальнейшие комментарии они ничего не ответили и игнорировали меня.

Подробнее..

Особенность Instagram

12.12.2020 20:16:02 | Автор: admin

В 2020 году даже если злоумышленник попал в ваш аккаунт социальной сети, это неприятно, но не критично. Ведь у нас есть двухфакторная аутентификация на многие важные действия, а доступа к почте/телефону у злоумышленника нет и аккаунт ему не угнать. Так ведь? Нет.

В Instagram - социальной сети, которую использует 1 миллиард пользователей ( населения планеты) все совсем не так. И исправлять они это отказались. В этой статье я расскажу вам о логической уязвимости, которая может позволить захватить аккаунт человека, пока он не обратится в тех. поддержку.

Интересно? Добро пожаловать под кат!

Смена email и номера телефона

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

Может ли он что-то такое устроить, чтоб завладеть вашим аккаунтом на продолжительно время? Да, может и в этом как раз проблема.

Ночью, где-то в 3-4 утра, когда вы скорее всего спите, он удаляет привязанный номер телефона.

  • Нужно ли подтверждение с телефона? Нет, не нужно.

  • Придет ли смс на номер телефона? Нет, не придет.

  • Прилетит ли Push-уведомление в приложение? Нет, не прилетит.

Пара кликов и уже номер телефона не привязан, вас уведомят лишь письмом на почту, его вы увидите скорее всего лишь утром.Дальше email, меняем и его.

  • Нужно ли подтверждение с прошлого email? Нет, не нужно.

  • Прилетит ли Push-уведомление в приложение? Нет, не прилетит.

Остается лишь подтвердить новый email по ссылке, что злоумышленник сделает email сменен. И об этом вас уведомят лишь письмом на почту, и его вы увидите скорее всего лишь утром.

В письмах на почте об изменениях в аккаунте вас будут ждать ссылки возврата secure your account here (https://instagram.com/accounts/disavow). Они позволяют легко восстановить старое значение email и телефон, переход по ним позволит все откатить. Это ЕДИНСТВЕННЙ механизм защиты от перехвата аккаунта, но он работает. А можно ли его обойти? Да, можно.

Account Takeover

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

  • victim@example.com - почта владельца аккаунта, к которой был привязан аккаунт.

  • "evil1@anyserver.com - первая почта злоумышленника.

  • evil2@anyserver.com - вторая почта злоумышленника.

Последовательность действий:

  1. Хакер удаляет телефон жертвы из аккаунта и меняет почту victim@example.com на evil1@anyserver.com.

  2. Хакер подтверждает почту evil1@anyserver.com.

  3. Хакер меняет почту evil1@anyserver.com на evil2@anyserver.com.

  4. Хакер подтверждает почту evil2@anyserver.com.

  5. Хакер нажимает на ссылку возврата secure your account here (http://personeltest.ru/aways/instagram.com/accounts/disavow/**) на evil1@anyserver.com и восстанавливает настройки аккаунта к первоначальным с Шага 1, при этом меняя и пароль.

Он сам вернул привязку к легальном мылу и телефону?! Да, и он повторит шаги 1-5 еще несколько раз, пароль ему известен. Полностью автоматизировано повторит, нет там капчи, ни одной!

При моих тестах было достаточно 3 повторений шагов, чтобы ВСЕ ссылки возврата на ВСЕХ почтах перестали работать. Их использование несколько раз за короткий промежуток времени приводит к блокировки функции возврата secure your account here. Злоумышленник же может автоматизировано повторять шаги, чтобы продлить блокировку. Теперь аккаунт без вмешательства тех. поддержки не вернуть, ведь ссылки даже на первоначальном email не работают, а из всех приложений жертву выкинуло после первых действий.

Решения

Решений это проблемы множество, самые важные компенсирующие меры:

  1. Внедрить подтверждение смены email и телефона отправкой сообщения на предыдущий email/телефон.

  2. Блокировать лишь ссылки возврата на определенных email, а не на всех.

Желательно:

  1. Уведомлять об изменения в аккаунте в приложении и/или смс.

Реакция Facebook/Instagram

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

  • То есть, это в целом невозможно?

  • И перехват веб-версии, через которую я и проделал все описанное выше - не считается?

Править они ничего не будут, судя по всему, и тем более за это не положена никакая награда исследователю. Вот такая интересная "особенность" Инстаграма, а никак не проблема безопасности =)

Подробнее..

Майнинг еды или Пятерочка глазами хакера

22.01.2021 00:08:40 | Автор: admin

Введение


Написать этот пост меня вдохновила статья, которая давно висит на Хабре. Сразу хочу извиниться перед автором, лучше названия и придумать нельзя. Как вы все знаете Пятерочка активно рекламирует свои карты лояльности. В статье выше нам рассказывали о том, что мошенники активируют чужие карточки и списывают баллы. Хакеры пошли дальше и вместо активации чужих карт просто стали взламывать личные кабинеты пользователей. А что? Звучит даже проще активации карт, давайте разберёмся поподробнее.

Немного о безопасности личных кабинетов


image

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

image

Казалось бы, как взломать такое? Перебрать код невозможно, есть лишь 3 попытки, а код четырёхзначный. Сразу отбрасываем данный вариант, но хакерам же как-то удаётся, значит и у нас получится!

Приложение Пятерочка


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

Вход в личный кабинет осуществляется так же с помощью номера телефона и пароля, а ещё сверху приходит смс подтверждение, но вот есть один интересный момент. Приложение запоминает учётную запись и при следующей попытке входа вместо смс кода на телефон отправляет пуш уведомление напрямую в приложение. Сейчас объясню поподробнее. Войдя впервые на свою учётную запись вам предстоит ввести код из смс для входа. Если вы по какой-то причине решили выйти и зайти снова, то во второй и последующие разы смс код вам приходить не будет, а вместо него в приложении будет само заполняться поле смс кода. Во диво! Сделано это конечно красиво, но есть один огромный недостаток. Замечен баг был мной в приложении Пятерочка версии 2.12.1, возможно есть и в других версиях. Что за баг и как его повторить?

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

i.imgur.com/BcLnANt.mp4
i.imgur.com/LIGOkBT.mp4

В первом видео видно, как хакер вводит данные для входа, после чего принимает смс на телефон и заходит в свой аккаунт. После чего выходит и проходит авторизацию снова. Во второй раз нам прекрасно видно, что никакая смс на телефон не приходит и поле для ввода автоматически заполняется пуш уведомлением."

Во втором видео злоумышленник уже пытается войти в аккаунт не принадлежащий ему. Он вводит данные, но кода из смс он не знает по понятным причинам. Потом он убирает приложение из процессов и запускает его снова. На этом моменте прекрасно виден баг приложения. Открывается совершенно белое окно, после чего злоумышленник выходит из аккаунта. После чего вводит данные для входа повторно и о чудо, ему приходит пуш уведомление! Почему же такое произошло? Спросить надо у разработчиков приложения

Методы решения


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

Последствия


Из-за ошибки в коде страдают обычные люди, а именно добросовестные покупатели. Почитать гневные отзывы о том, что у людей украли баллы можно по ссылке: vk.com/topic-19098821_24191218. Ниже оставлю пару постов, на самом деле их намного больше, но думаю сейчас уже не смогу найти некоторые.

image

image

image

Проблема с воровством баллов очень актуальна и процветает это дело минимум год. Даже на пикабу можно найти посты.

Выводы


Не бывает идеальных приложений, но этот баг ужасен. Я не призываю вас преступать закон и особенно воровать что-то у кого-то! Пост был создан с целью исправить баг и достучаться до разработчиков приложения (письмо отправлял им больше месяца назад и результата ноль).

Всем добра и не допускайте таких ошибок в коде!"
Подробнее..

Зачем PVS-Studio использует анализ потока данных по мотивам интересной ошибки в Open Asset Import Library

18.02.2021 18:15:13 | Автор: admin

PVS-Studio - Анализ потока данных
Анализ потока данных является неотъемлемой частью любого современного статического анализатора кода. Однако, со стороны, не очень понятно, что это и главное зачем нужно. До сих пор некоторые ассоциируют статический анализ с поиском чего-то в коде по определённому шаблону. Поэтому время от времени мы пишем заметки, в которых демонстрируем, как та или иная технология, используемая в анализаторе PVS-Studio, помогает выявить очередную интересную ошибку. Сегодня как раз такая статья, в которой мы рассмотрим баг в одной из реализаций стандарта кодирования двоичных данных Base64.


Всё началось с проверки свежей версии библиотеки Qt 6. Про это была отдельная классическая статья, где я описал 77 найденных ошибок. Так получилось, что вначале я решил бегло полистать отчёт, ещё не пряча предупреждения, относящиеся к сторонним библиотекам. Другими словами, я не отключил в настройках предупреждения, относящиеся к \src\3rdparty. И так вышло, что я сразу наткнулся на интересный пример ошибки в библиотеки Open Asset Import Library, про которую я решил сделать эту отдельную маленькую заметку.


Найденный дефект демонстрирует, зачем в инструментах, таких как PVS-Studio, полезно анализировать поток данных. Без этого поиск многих ошибок просто невозможен. Кстати, если вам интересно подробнее узнать про анализ потока данных и про другие аспекты устройства инструмента, предлагаю вашему вниманию статью "Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей".


Теперь перейдём, собственно, к ошибке, обнаруженной в Open Asset Import Library (assimp). Файл: \src\3rdparty\assimp\src\code\FBX\FBXUtil.cpp.


std::string EncodeBase64(const char* data, size_t length){    // calculate extra bytes needed to get a multiple of 3    size_t extraBytes = 3 - length % 3;    // number of base64 bytes    size_t encodedBytes = 4 * (length + extraBytes) / 3;    std::string encoded_string(encodedBytes, '=');    // read blocks of 3 bytes    for (size_t ib3 = 0; ib3 < length / 3; ib3++)    {        const size_t iByte = ib3 * 3;        const size_t iEncodedByte = ib3 * 4;        const char* currData = &data[iByte];        EncodeByteBlock(currData, encoded_string, iEncodedByte);    }    // if size of data is not a multiple of 3,    // also encode the final bytes (and add zeros where needed)    if (extraBytes > 0)    {        char finalBytes[4] = { 0,0,0,0 };        memcpy(&finalBytes[0], &data[length - length % 3], length % 3);        const size_t iEncodedByte = encodedBytes - 4;        EncodeByteBlock(&finalBytes[0], encoded_string, iEncodedByte);        // add '=' at the end        for (size_t i = 0; i < 4 * extraBytes / 3; i++)            encoded_string[encodedBytes - i - 1] = '=';    }    return encoded_string;}

Если хотите, то для начала можете попробовать обнаружить ошибку самостоятельно. А чтобы вы случайно сразу не прочитали ответ, приведу пока список некоторых других интересных статей и кратко расскажу, что такое Base64 :). Список дополнительных статей на близкую тематику:


  1. 31 февраля;
  2. Использование машинного обучения в статическом анализе исходного кода программ;
  3. Как внедрить статический анализатор кода в legacy проект и не демотивировать команду.

Ok, продолжим. Перед нами реализация алгоритма кодирования строки байт в кодировку Base64. Это стандарт кодирования двоичных данных при помощи только 64 символов. Алфавит кодирования содержит текстово-цифровые латинские символы A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации. Каждые 3 исходных байта кодируются 4 символами.


Если осталось закодировать только один или два байта, то в результате получаются только первые два или три символа строки, а выходная строка дополняется двумя или одним символами "=". Это предотвращает добавление дополнительных битов к восстановленным данным. Вот этот момент как раз реализован в рассматриваемой функции неправильно.


Если вы нашли ошибку, вы молодец. Если нет, то это тоже нормально. Нужно вникать в код, чтобы заметить, что что-то идёт не так. Анализатор про это "что-то не то" сообщает предупреждением: V547 [CWE-571] Expression 'extraBytes > 0' is always true. FBXUtil.cpp 224


Чтобы понять причину беспокойства анализатора, давайте посмотрим, как инициализируется переменная extraBytes:


// calculate extra bytes needed to get a multiple of 3size_t extraBytes = 3 - length % 3;

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


size_t extraBytes = length % 3;

Тогда, если обрабатывается, например, 5 байт, то получаем 5 % 3 = 2, и нужно дополнительно обработать 2 байта. Если на вход поступило 6 байт, то ничего отдельно обрабатывать не нужно, так как 6 % 3 = 0.


Но программист перемудрил и написал бессмысленный код:


size_t extraBytes = 3 - length % 3;

И как раз при анализе этого кода анализатору и понадобился механизм анализа потока данных. Какое бы значение не находилось в переменной length, после деления по модулю будет получено значение в диапазоне [0..2]. Анализатор PVS-Studio умеет работать с диапазонами, точными значениями и множествами. Т. е. речь идёт про Value Range Analysis. В данном случае будет использован именно диапазон значений.


Продолжим вычисления:


size_t extraBytes = 3 - [0..2];

Получается, что переменная extraBytes никогда не будет равна нулю. Анализатор вычислит следующий возможный диапазон её значений: [1..3].


До момента проверки, переменная нигде не изменяется. Следовательно, анализатор совершенно прав, предупреждая, что результатом проверки всегда будет истина:


if (extraBytes > 0)

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


Конечно, некорректность работы функции не ограничивается тем, что будет выполнять фрагмент кода, который выполняться не должен. Там вообще всё идёт вкривь и вкось. Предположим, что требуется закодировать 6 символов. В этом случае выходная строка должна содержать 8 символов. Давайте быстренько прикинем, как поведёт себя рассмотренная функция.


// calculate extra bytes needed to get a multiple of 3size_t extraBytes = 3 - length % 3; // 3-6%3 = 3// number of base64 bytessize_t encodedBytes = 4 * (length + extraBytes) / 3; // 4*(6+3)/3 = 12std::string encoded_string(encodedBytes, '=');

Уже получилось, что выходная строка будет содержать 12 символов, а не 8. Дальше тоже всё будет работать неправильно даже нет смысла вдаваться в подробности.


Вот так легко и просто статический анализ нашёл ошибку в коде. А представьте, ведь кто-то будет мучиться и отлаживаться, чтобы понять, почему неправильно происходит кодирование символов в кодировку Base64. Здесь мы, кстати, подходим к вопросу качества используемых сторонних библиотек, который я рассматривал в публикации "Почему важно проводить статический анализ открытых библиотек, которые вы добавляете в свой проект".


Попробуйте внедрить регулярное использование PVS-Studio в ваш процесс разработки, чтобы находить многие ошибки на самом раннем этапе. Вам понравится :). Если вы разрабатываете открытый проект, то анализатор можно использовать бесплатно. Спасибо за внимание и безбажного вам кода.


Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Why PVS-Studio Uses Data Flow Analysis: Based on Gripping Error in Open Asset Import Library.

Подробнее..

Как можно при синхронизации облачного хранилища легко создать фантомный файл? (Яндекс.Диск)

22.09.2020 20:11:13 | Автор: admin
Обнаружил великолепную фичу Яндекс-Диска, и делюсь этой прекрасной информацией.

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

Исходные требования: Вам нужно иметь облачное хранилище на Яндекс-Диск, большого объема (вам же нужно много данных?). С этим хранилищем желательно синхронизировать несколько устройств, например десктоп, ноутбук, и что-нибудь еще (можно рабочий комп). На хранилище нужно иметь свободное пространство, для размещения копии данных.

Затем нужно выбрать папку, которая содержит необходимое вам количество данных (например, много. Скажем, несколько гигабайт это много для Яндекс-Диска). Весьма желательно, чтобы внутри этой папки было несколько уровней вложенных папок с файлами.

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


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

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

Этот эксперимент был проведен два раза. Оба раза фича отработала на ура, и было создано много данных.

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

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru