Disclaimer:
1. Сразу хочу сказать, что компания МойОфис со мной никоим образом не связана, в том числе финансово, по крайней мере уже несколько лет. Если не считать обещания с моей стороны написать эту статью, о котором я думаю что со стороны сабжа давно забыли. Что ж, обещанного как говорится три года ждут и вот дождались, благо есть подходящий повод.
2. Изначально статья задумывалась более подробной, с примерами и скриншотами, но причинам из п.1 написана в основном по памяти и абы как. Актуальность информации минимум три года, могут быть любые неточности, хотите верьте - хотите проверьте. Всех персонажей считайте выдумкой. Пруфов не будет, вместо них будут лирические отступления, за верность и давность которых я тоже не ручаюсь.
3. Вообще-то уговор был отдать статью на проверку и одобрение перед публикацией, но мне честно говоря влом (см. п.1). Также часть информации получена в рамках коммерческого исследования проведенного другой компанией, и только затем уже перепроверена в частном порядке. Так что если кто-то желает дополнить, исправить или заявить о правах на интеллектуальную собственность - пишите, думаю все поправимо.
4. Мой личный опыт ограничивался набором десктопных приложений под Windows и немного под Linux, но есть серьезные основания считать, что с остальными продуктами ситуация обстоит примерно так же.
Итак, семейство продуктов МойОфис: пакет офисного ПО, "убийца" {одного крупного офисного пакета} и флагман импортозамещения всего и вся. Разрабатывается при поддержке государства, в том числе грантами и госзаказом (на самом деле с этими грантами много печальных моментов, думаю многие в курсе, но оставим эту тему за рамками статьи).
Впервые мое знакомство с ними случилось не то чтобы в начале разработки, но когда продукт был еще довольно сырым и коммерчески не распространялся. Разработчик заказал на этом этапе исследование безопасности(sic!) ПО у специализированой компании, и собственно моя команда смотрела десктопную часть.
Boost
Первое что было обнаружено под капотом - библиотека boost. Если честно, то мое мнение при обнаружении буста - тушите свет, то есть найти там что-то серьезное шанс минимален. Впрочем, оставалась надежда на логику, да и исследование было заказано и оплачено, так что нужно было копать дальше.
Open source
Следующим было отмечено наличие большого объема кода, позаимствованного из популярного open source. Это тоже в целом факт не внушающий оптимизма (тем кто ищет уязвимости), так как считается что код, доступный для проверки большому количеству независимых специалистов, "чище" и безопаснее. Забавно, но забегая вперед скажу что единственная пара условно эксплуатируемых (раз в сто лет, в марсианское полнолуние в фазе овна) багов была связана именно с использованием open source библиотек.
Обратная связь
Тут мы нашли, к чему можно было придраться. Часть библиотек была скомпилирована без флага ASLR, то есть расположение кода в памяти не рандомизировалось при загрузке. Так себе недочет, без уязвимости с передачей управления смысловой нагрузки не имеет, но считается плохой практикой.
Доступ к порталу для связи с разработчиками нам дали сразу, так что мы заполнили тикет и продолжили работу.
Запрос дополнительных сведений от разработчика пришел наверное в течение часа, а емнип уже на следующий день прислали обновленные установщики!
Чтобы было понятнее, исправлений очень серьезных уязвимостей от очень серьезных вендоров зачастую приходится ждать месяцами, а некоторые начинают чесаться только после выкладывания всего в открытый доступ! Так что подобное отношение стало культурным шоком и даже слегка напугало. А ведь программистам пришлось сначала подробно изучить проблему, затем перелопатить всю систему сборки.
ООП
Смотрим что внутри бинарников. Сам код, несмотря на буст, оказался довольно строен и удобочитаем. Повторное использование задействовано по максимуму, все сущности на всех этапах аккуратно распиханы по объектам. Обнаружилось несколько разыменований неинициализированых объектов, судя по всему в тех местах где еще была не реализована функциональность и стояли заглушки. Но буст естественно об этом позаботился и объекты были заполнены нулем. Разыменование нуля теоретически тоже эксплуатируемо, на старых системах и при множестве дополнительных условий, но увы, не в нашем случае. Все чинилось сразу, и заодно насколько я помню, нам сообщили о починке нескольких похожих мест до которых мы тогда не добрались.
Линки
Логическая (условно) уязвимость - наличие в документах ссылок, позволяющих запустить локально приложение, правда, без аргументов. То есть, вы можете добавить в .docx ссылку, при клике на которую запустится калькулятор. Разработчики добавили предупреждение перед открытием - точно так же оно работает в WordPad, например.
Роботы атакуют
Самые большие надежды были на парсинг xml, в котором баги находятся почти всегда и у всех. Но тут ждало самое большое разочарование. Код парсера был настолько безупречен, будто написан роботом. Когда дали доступ к исходникам, так и оказалось - все xml обработчики были машинно сгенеренными, ловить там было нечего. Кажется этот факт с точки зрения компании представлял какую-то страшную тайну, уже не помню почему, надеюсь я ничего такого не раскрываю.
Исходники
В исходниках же автоматикой поймали пару багов в open source. Код давали посмотреть исключительно оффлайн, в обстановке строгой секретности, в офисе - ну и заодно показали офис. Довольно мило, горячие обеды и прочие приятности в наличии.
Двоичный формат
Но вернемся к исследованию. Оставался еще старый двоичный формат {одного крупного офисного пакета}. Тут было прикручено стороннее проприетарное решение... на C#. Поковыряли без особой надежды. Ничего не нашли.
Остальное
Процедура обновления. Тоже все хорошо.
Если придираться, то лично мне не понравилось что все данные грузятся в память процесса, без какого-либо кеширования и мапирования. Теоретически, да и на практике было замечено что это дает тормоза при открытии больших файлов. Но эта неприятность выходит за рамки секурити. Может, сейчас уже поправили.
Почтовый клиент оказался перекрашеным файерфоксом, так что туда заглянули чисто чтоб убедиться что ничего своего опасного не прикрутили. Убедились.
В общем, ничего страшного в итоге не нашлось. В онлайн решениях, насколько мне известно не нашлось тоже. Тем не менее, сотрудничество по всем фронтам продолжалось, и я не припомню вендора который настолько трепетно относился бы к любым огрехам с точки зрения безопасности.
P.S.: Зачем я это вообще пишу?
Ради справедливости :D Бывает немного обидно читать комментарии к статьям МоегоОфиса на Хабре. Принято считать (небезосновательно) что все это импортозамещение на грантах это такое тяп-ляп и в продакшн, а не будут брать - отключим газ. Однако ж вот, есть компании, нарушающие это правило. Подходящие со всей ответственность к разработке продукта со всех сторон, и то, как они монетизируются - не решающий показатель. И если {один крупный офисный пакет} вам больше не продают, есть альтернативы.
P.P.S.: если сравнивать сабж с {одним крупным офисным пакетом} в плане безопасности, то мое личное мнение, что у сабжа все хорошо в то время как оппонент изнутри выглядит как-то так
Вполне можно обнаружить артефакты, которые создавались если не под DOS, то во всяком случае под 16 бит.