Comments 3
Поправьте, если не прав.
Уязвимость существует если специально при десериализации задано
Settings.TypeNameHandling <> TypeNameHandling.None
и нет проверки типов?
Если так, то это стоило и бы уточнить, потому что по умолчанию значение None.
(Из-за заголовка я сделал другой вывод)
Мне кажется основная идея в том что сериализация работает не так просто как мы думаем (или «не думаем» на автопилоте — доверяясь авторам библиотек). Особенно, если десериализатор поддерживает полиморфизм и может поднимать «произвольные» типы которые, в свою очередь, могут делать что-то эдакое при десереализации, вплоть до выполнения какого-то кода; такие типы есть среди стандартных и могут реализовать «безобидные» интерфейс типа IDictionary.
Уязвимый код может выглядеть на первый взгляд невинно: https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2300?view=vs-2019
Вот тут больше ссылок для чтения:
https://github.com/pwntester/ysoserial.net/blob/master/README.md#additional-reading
Hack The Box. Прохождение JSON. Уязвимость в Json.Net и LPE через SeImpersonatePrivilege