Статья CVE-2020-2555: RCE из-за ошибки десериализации на сервере oracle weblogic

Zer0must2b

Zer0must2b

Green Team
23.06.2019
242
78
CVE-2020-2555

Уязвимости небезопасной десериализации стали популярной целью для злоумышленников/исследователей веб-приложений 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 класса:

Picture1 (2).png


Все вызовы extract() метода были удалены из toString(). Значение метода extract() будет рассмотрено в следующем разделе. Это изменение особенно интересно, потому что toString() может быть достигнуто с помощью readObject() метода различных стандартных классов JRE, таких как BadAttributeValueExpException:

Picture2 (3).png


Как показано в приведенном выше коде, сериализованный экземпляр BadAttributeValueExpException класса может использоваться для вызова toString() метода произвольного класса. Эта техника может быть использована для достижения toString() метода LimitFilter класса, затронутого этим патчем.

Примеры гаджетов, которые используются toString() в качестве точки входа, смотрите в проекта .

Поиск sink

Sinks - это вызовы методов Java, которые, как известно, имеют опасные побочные эффекты. Примеры таких побочных эффектов:

- Создание произвольного файла с помощью вызова FileOutputStream.write().
- Произвольное выполнение команды через вызов Runtime.exec().
- Произвольный вызов метода через вызов Method.invoke().

Для этой уязвимости мы фокусируемся на вызове Method.invoke(), побочным эффектом которого является вызов произвольных методов Java через рефлексию. Учитывая эту информацию, мы можем искать все случаи, когда extract() вызов метода, который мы определили как точку входа в нашем анализе патча, приводит к вызову Method.invoke(). По-видимому, в библиотеке Coherence есть только один экземпляр такого сериализуемого класса (реализующий интерфейс Serializable или Externalizable интерфейс).

Picture3 (3).png


Взгляд на ReflectionExtractor класс подтверждает наше подозрение.

Picture4 (3).png


ReflectionExtractor предлагает опасный примитив, позволяя нам вызывать произвольные методы, где злоумышленник может контролировать как метод, так и параметр.

Дорога к RCE

Как правило, для достижения удаленного выполнения кода требуется более одного вызова метода. Например, в популярных гаджетах Apache Commons Collections это достигается путем объединения вызовов произвольных методов с использованием ChainedTransformer. Аналогичным образом, в Coherence библиотеке есть класс, который позволяет нам связывать extract() вызовы, который удобно называть ChainedExtractor:

Picture5 (3).png


Объединение всего этого означает, что следующая цепочка может быть использована для удаленного выполнения кода:

Picture6 (3).png


Следовательно, любой проект, использующий библиотеку, в которой вы можете доставить вредоносный сериализованный объект, может быть использован для удаленного выполнения кода. Для наших целей мы демонстрируем атаку на протокол T3 WebLogic в следующем видео:


Вывод

С тех пор, как Крис Фрохофф и Габриэль Лоуренс провели в беседу о так называемом Апокалипсисе десериализации Java в 2015 и 2016 годах, исследователи искали ошибки десериализации для выполнения кода. Мы видели много ошибок этого класса, представленных в программу и использованных во время события Pwn2Own Miami против приложений SCADA. Это также одна из причин, по которой мы обратили особое внимание на ошибки десериализации в Trend Micro Security Predictions for 2020 . Еще раз спасибо Jang из VNPT ISC за сообщение об ошибке в программе, и мы надеемся увидеть больше отчетов от него в будущем.

Перевод:
 
Последнее редактирование:
Мы в соцсетях: