CVE-2020-2555
Уязвимости небезопасной десериализации стали популярной целью для злоумышленников/исследователей веб-приложений Java. Эти уязвимости часто приводят к удаленному выполнению кода и, как правило, их сложно исправить. В этом сообщении мы рассмотрим CVE-2020-2555 (ZDI
Изучение патча, чтобы найти source
Sources - это метод Java с контролируемыми параметрами, который может быть вызван злоумышленником. В Java,
Патч для CVE-2020-2555 представил очень интересное изменение
Все вызовы
Как показано в приведенном выше коде, сериализованный экземпляр
Примеры гаджетов, которые используются
Поиск sink
Sinks - это вызовы методов Java, которые, как известно, имеют опасные побочные эффекты. Примеры таких побочных эффектов:
- Создание произвольного файла с помощью вызова
- Произвольное выполнение команды через вызов
- Произвольный вызов метода через вызов
Для этой уязвимости мы фокусируемся на вызове
Взгляд на
Дорога к RCE
Как правило, для достижения удаленного выполнения кода требуется более одного вызова метода. Например, в популярных гаджетах Apache Commons Collections это достигается путем объединения вызовов произвольных методов с использованием ChainedTransformer. Аналогичным образом, в Coherence библиотеке есть класс, который позволяет нам связывать
Объединение всего этого означает, что следующая цепочка может быть использована для удаленного выполнения кода:
Следовательно, любой проект, использующий библиотеку, в которой вы можете доставить вредоносный сериализованный объект, может быть использован для удаленного выполнения кода. Для наших целей мы демонстрируем атаку на протокол T3 WebLogic в следующем видео:
Вывод
С тех пор, как Крис Фрохофф и Габриэль Лоуренс провели в
Перевод:
Уязвимости небезопасной десериализации стали популярной целью для злоумышленников/исследователей веб-приложений Java. Эти уязвимости часто приводят к удаленному выполнению кода и, как правило, их сложно исправить. В этом сообщении мы рассмотрим CVE-2020-2555 (ZDI
Ссылка скрыта от гостей
), о котором сообщил ZDI Чанг из VNPT ISC. Эта критическая уязвимость (оценка CVSS 9,8) затрагивает библиотеку Oracle Coherence, которая используется в популярных продуктах, таких как Oracle WebLogic Server. Ее исправили в
Ссылка скрыта от гостей
вместе с 333 другими ошибками.Изучение патча, чтобы найти source
Sources - это метод Java с контролируемыми параметрами, который может быть вызван злоумышленником. В Java,
readObject()
или readExternal()
метод класса автоматически вызывается для того , чтобы воссоздать граф объектов. Эти два метода и любые другие методы, доступные из них, могут считаться допустимыми источниками для устройств десериализации.Патч для CVE-2020-2555 представил очень интересное изменение
toString()
метода LimitFilter
класса:Все вызовы
extract()
метода были удалены из toString()
. Значение метода extract()
будет рассмотрено в следующем разделе. Это изменение особенно интересно, потому что toString()
может быть достигнуто с помощью readObject()
метода различных стандартных классов JRE, таких как BadAttributeValueExpException
:Как показано в приведенном выше коде, сериализованный экземпляр
BadAttributeValueExpException
класса может использоваться для вызова toString()
метода произвольного класса. Эта техника может быть использована для достижения toString()
метода LimitFilter
класса, затронутого этим патчем.Примеры гаджетов, которые используются
toString()
в качестве точки входа, смотрите в CommonsCollections5 проекта ysoserial .Поиск sink
Sinks - это вызовы методов Java, которые, как известно, имеют опасные побочные эффекты. Примеры таких побочных эффектов:
- Создание произвольного файла с помощью вызова
FileOutputStream.write()
.- Произвольное выполнение команды через вызов
Runtime.exec()
.- Произвольный вызов метода через вызов
Method.invoke()
.Для этой уязвимости мы фокусируемся на вызове
Method.invoke()
, побочным эффектом которого является вызов произвольных методов Java через рефлексию. Учитывая эту информацию, мы можем искать все случаи, когда extract()
вызов метода, который мы определили как точку входа в нашем анализе патча, приводит к вызову Method.invoke()
. По-видимому, в библиотеке Coherence есть только один экземпляр такого сериализуемого класса (реализующий интерфейс Serializable или Externalizable интерфейс).Взгляд на
ReflectionExtractor
класс подтверждает наше подозрение.ReflectionExtractor
предлагает опасный примитив, позволяя нам вызывать произвольные методы, где злоумышленник может контролировать как метод, так и параметр.Дорога к RCE
Как правило, для достижения удаленного выполнения кода требуется более одного вызова метода. Например, в популярных гаджетах Apache Commons Collections это достигается путем объединения вызовов произвольных методов с использованием ChainedTransformer. Аналогичным образом, в Coherence библиотеке есть класс, который позволяет нам связывать
extract()
вызовы, который удобно называть ChainedExtractor:Объединение всего этого означает, что следующая цепочка может быть использована для удаленного выполнения кода:
Следовательно, любой проект, использующий библиотеку, в которой вы можете доставить вредоносный сериализованный объект, может быть использован для удаленного выполнения кода. Для наших целей мы демонстрируем атаку на протокол T3 WebLogic в следующем видео:
Вывод
С тех пор, как Крис Фрохофф и Габриэль Лоуренс провели в
Ссылка скрыта от гостей
беседу о так называемом Апокалипсисе десериализации Java в 2015 и 2016 годах, исследователи искали ошибки десериализации для выполнения кода. Мы видели много ошибок этого класса, представленных в программу и использованных во время события Pwn2Own Miami против приложений SCADA. Это также одна из причин, по которой мы обратили особое внимание на ошибки десериализации в
Ссылка скрыта от гостей
Trend Micro Security Predictions for 2020 . Еще раз спасибо Jang из VNPT ISC за сообщение об ошибке в программе, и мы надеемся увидеть больше отчетов от него в будущем.Перевод:
Ссылка скрыта от гостей
Последнее редактирование: