last day (15 days later) » 

14:43
4
Q: В чём опасность BinaryFormatter?

rotaborМожет ли кто-то аргументированно объяснить, в чём опасность сериализации данных в двоичном виде, или сослаться на хорошее объяснение? Аргументы вроде "это опасно по своей природе" или "это не может быть безопасно обработано", приведённые в "Deserialization risks in use of BinaryFormatter and rela...

Неужели даже «remote code execution» вы не воспринимаете всерьёз?
The SoapFormatter and BinaryFormatter classes implement the IRemotingFormatter interface to support remote procedure calls (RPCs)
@CrazyElf то есть он небезопасен потому, что там намеренно сделали небезопасную обработку?
@andreymal а откуда она там берётся? Типа, всё, что вы нам присылаете в двоичном виде, мы пытаемся исполнить как код, а вдруг заработает?
@andreymal при «remote code execution» код не пересылается, а пересылаются только исходные и выходные данные для/от кода, который работает удалённо.
@rotabor и среди этих данных — класс, экземпляр которого десериализатор создаст и методы которого подёргает. Любой класс, как следствие любой код (я внятного формального описания работы в своём гyгле чёт не нашёл, но как минимум можно погyглить что-то вроде «attacking .net serialization»)
@andreymal "кземпляр которого десериализатор создаст и методы которого подёргает" но методы-то с этими данными не приходят, они тут, локально.
14:43
@rotabor что никак не помешает найти такой класс, через который можно будет напакостить
@andreymal таким же образом можно небезопасно обработать и xml (дыру там мы знаем), и JSON.
@rotabor "Ну сделали и сделали, чего бухтеть то", как говорится ) А в питоне есть eval )) Ну вот так сложилось. Сделали, а теперь стараются не использовать. Хотя дыры периодически во всём подряд находят (
@rotabor про xml понятно, а в json-то что?
@CrazyElf я не ради претензий, я хочу разобраться и понять для себя. Все говорят и пишут, а я не пойму, в чём дело. Например, я ожидаю числа в диапазоне от 0 до 1000, а бандюган пришлёт мне 1000000, И что? В текстовом виде если лимон придёт, то это безопасно? Где дыра и в чём? Например, перепонение буфера - известная вещь. Вот мы взяли и сделали так, что не контролируем длину данных, которые записали в буфер, а потом ещё и управление передаём на после конца буфера, а вдруг сработает? А здесь то что?
@rotabor ничего, 1000000 это не ddos и не выполнение кода, этот пример вообще не имеет отношения к вашему вопросу
14:43
@andreymal причём здесь выполнение кода, какого кода? Я у себя в приложении не буду выполнять никакой код из пришедших данных.
@rotabor вы - не будете, json - не будет, BinaryFormatter - очень даже будет, в этом и проблема
а что, ddos случается только при приёме двоичных данных?
@andreymal то есть проблема в небезопасной обработке данных, которую сделали намеренно. Сам формат данных к этому отношения не имеет.
@rotabor а вы кстати не обобщайте, проблема-то не в двоичном виде как таковом, а конкретно в BinaryFormatter. Есть какой-нибудь protobuf, который вполне себе двоичный, но при этом безопасный (возможно даже более безопасный чем json, так как без явно заданной схемы использовать его вряд ли получится, а уж схема сама по себе отсеет много чего лишнего)
@andreymal Или вот avro, например, который по сути тот же json, но упакованный в двоичный формат, тоже за счёт использования схемы.
Про опасность BinaryFormatter много говорят, но нигде нет примеров, чтобы на практике в этом убедиться. stackoverflow.com/a/67107584/5045688 - там по ссылке в видео показана работа эксплойта, но опять же, без исходного кода, как это было сделано.
security.stackexchange.com/a/44923 - вот, нашёл вполне рабочий пример.

last day (15 days later) »