ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Веб-уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   CVE-2020-2555: RCE из-за ошибки десериализации на сервере oracle weblogic (https://forum.antichat.xyz/showthread.php?t=572438)

Zer0must2b 07.03.2020 01:12

CVE-2020-2555

Уязвимости небезопасной десериализации стали популярной целью для злоумышленников/исследователей веб-приложений Java. Эти уязвимости часто приводят к удаленному выполнению кода и, как правило, их сложно исправить. В этом сообщении мы рассмотрим CVE-2020-2555 (ZDI-20-128 ), о котором сообщил ZDI Чанг из VNPT ISC. Эта критическая уязвимость (оценка CVSS 9,8) затрагивает библиотеку Oracle Coherence, которая используется в популярных продуктах, таких как Oracle WebLogic Server. Ее исправили в январе вместе с 333 другими ошибками.

Изучение патча, чтобы найти source

Sources - это метод Java с контролируемыми параметрами, который может быть вызван злоумышленником. В Java,
Код:

readObject()
или
Код:

readExternal()
метод класса автоматически вызывается для того , чтобы воссоздать граф объектов. Эти два метода и любые другие методы, доступные из них, могут считаться допустимыми источниками для устройств десериализации.

Патч для CVE-2020-2555 представил очень интересное изменение
Код:

toString()
метода
Код:

LimitFilter
класса:

https://forum.antichat.xyz/attachmen...7f64c78d20.png

Все вызовы
Код:

extract()
метода были удалены из
Код:

toString()
. Значение метода
Код:

extract()
будет рассмотрено в следующем разделе. Это изменение особенно интересно, потому что
Код:

toString()
может быть достигнуто с помощью
Код:

readObject()
метода различных стандартных классов JRE, таких как
Код:

BadAttributeValueExpException
:

https://forum.antichat.xyz/attachmen...a52f1de0d5.png

Как показано в приведенном выше коде, сериализованный экземпляр
Код:

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 интерфейс).

https://forum.antichat.xyz/attachmen...17bc9f7872.png

Взгляд на
Код:

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

https://forum.antichat.xyz/attachmen...1916bfe765.png

Код:

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

Дорога к RCE

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

extract()
вызовы, который удобно называть ChainedExtractor:

https://forum.antichat.xyz/attachmen...2a09ed01a8.png

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

https://forum.antichat.xyz/attachmen...c24b5282f1.png

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

Вывод

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

Перевод:Zero Day Initiative — CVE-2020-2555: RCE Through a Deserialization Bug in Oracle’s WebLogic Server


Время: 15:04