Pull to refresh

Comments 25

И все побежали создавать сети с SSID "%p%s%s%s%s%n"

Что в названии сети существенно для воспроизведения?

• символ процента, но не шестнадцатиричное число за ним,

• символ процента, но только один символ после него до конца строки,

• шесть символов процента,

• именно такая комбинация,

• какая-то пара из символа процента и буквы за ним?

Эксперт ни малость не исследователь.

Кстати, пишут, что работает и наоборот: https://twitter.com/_mxms/status/1179531867772424194

чем то напоминает динамическое форматирование строк в с++: %p — указатель, %s строка, %n это число, и всё это должно быть видимо в стеке

Более того, %n не выводит, а записывает в переменную, адрес которой передан в стеке, количество выведенных символов. Так что это похоже на порчу локальных переменных, а предыдущие %s возможно просто чтобы до нужного адреса добраться.

Странно. Напрашивается передача ssid прямо в sprintf.

sprintf(buffer, ssid);

Первый же символ форматирования в ssid сломал бы стек сразу; это нельзя было бы не заметить.

Наверное, у Appple устроено более затейливо. Возможно, предусмотрительно экранируют подозрительные символы, но не все.

Да, скорее всего тупо regex паттерны, которые используются при фильтрации ssid, не покрывают этот случай. Проблема тестирования, всетаки юнит тесты надо обновлять и мутационный кросс чек никто не отменял... Сейчас обновят, к след. обновлению.

Стек сломает далеко не любой символ форматирования. Форматы, означающие непосредственные значения (%d, %f, %p итд) просто прочитают из стека «чужое» значение, ничего не испортив (кроме случая когда стек практически пуст/форматов много и чтение достаёт до отсутствующей памяти). А за удаление параметров отвечает вызывающий код, строка формата никак на это не влияет.

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

Но скорее всего все более затейливо.

Напомню, что SSID по стандарту - вообще не строка. Потому, в принципе, если следовать стандарту, SSID требует очень особенной интерпретации.

В исходниках wpa_passphrase.c с ним обращаются как с обычной строкой.

pbkdf2_sha1(passphrase, ssid, strlen(ssid), 4096, psk, 32);

Я поздравляю автора этого кода, стандарт он не читал.

В Linux, значит, все так же плохо с поддержкой стандартов, как и в Apple.

А что не так со строкой? В ssid допустим 0х00?

Service set identifier — это 32 октета (байта), всё. В 2012 в стандарте появился флаг, который означает, что SSID — строка в UTF-8, если пользователь желает написать там что-то в Unicode. А так — да, 32 штуки NULL будет валидным SSID. Рекомендация не использовать там non-printable символы — это для простоты и силы стандарта она не имеет. Если кто-то использует для обработки raw SSID строковые функции — он наивный человек.

WiFi у айфонов это кромешный кошмар, учитывая сколько стоят это все. Особенно забавен отказ от стандартизации wifi.

Раскажите подробнее, что там такое

Начиная от неподдерживаемого WPS и заканчивая кучей нюансов. В лучшем случае лечилось в своё время свежими прошивками, либо установками различных тонких настроек (дело было очень давно, и настройки в глубинах 802.11, куда лучше не лазить). Сейчас уже все смирились, но во времена становления вайфая это очень многих бесило. Выражалось в нестабильной работе тех точек, которые с другими ОС абсолютно стабильно работали. К сожалению, я не сетевик, и тем более не связан с беспроводными сетями, но баталии и плачи на профильных форумах были тогда знатные.

во времена становления вайфая

Во времена становления вайфая айфонов ещё не существовало, а с момента появления первого айфона прошло уже почти пятнадцать лет.

gsm они тоже не по стандарту реализовали

Добавьте в название системного диска в Mac OS знак "&" и после обновления системы вы получите кирпич. Уверен, баг существует и по сей день.

У Apple много странного.

Раньше похожим образом издевались над виндой, добавляя c:\con\con в адрес картинок на веб страничках.

Было бы не плохо проверить, как себя чуствует вайфай для такого случая на андроиде, да и десктопные операционки тоже проверить.

К сожалению, это не единственная проблема с wifi в новой прошивке. 4pda изобилует репортами о том как wifi отваливается через пару минут блокировки телефона.

Sign up to leave a comment.

Other news