
Подтверждённый Proof of Concept для CVE-2022-24086
CVE-2022-24086, которую Adobe охарактеризовала как «эксплуатируемую в дикой природе в очень ограниченных атаках», получила оценку серьёзности 9.8 из 10, и злоумышленники, эксплуатирующие её, могут добиться удалённого выполнения кода на затронутых системах без необходимости аутентификации. Проблема, теперь отслеживаемая как CVE-2022-24087, имеет ту же оценку серьёзности и может привести к тому же результату при использовании в атаках. Обе являются уязвимостями некорректной проверки вводимых данных (Improper Input Validation), и компания выпустила патчи для Adobe Commerce и Magento Open Source для устранения обеих проблем.
Мы сосредоточимся только на 2022-24086, потому что если CMS пропатчена, то обычно в ней уже установлены оба патча, так что нет смысла копаться в 2022-24087.
Magento Open Source / Adobe Commerce - 2.3.3-p1 - 2.3.7-p2
Magento Open Source / Adobe Commerce - 2.4.0 - 2.4.3-p1
Этот PoC проверен на версиях 2.3.4, 2.4.0, 2.4.2-p2, 2.4.3 и 2.4.3-p1 с модулем стандартных email-шаблонов и стандартными демонстрационными данными.
Давайте разберём официальные патчи MDVA-43443 и MDVA-43395. Все composer-патчи для всех версий имеют общие части, самые важные из которых:
+ private function sanitizeValue($value)
+ {
+ return is_bool($value) ? $value : str_replace(['{', '}'], '', (string) $value);
+ }
+ $pattern = '/{{.*?}}/';
+ do {
+ $result = preg_replace($pattern, '', (string)$result);
+ } while (preg_match($pattern, $result));
Как мы видим, они пытаются избавиться от {{ и }}. Эти двойные фигурные скобки используются во встроенных email-шаблонах.
Теперь пришло время углубиться в email-шаблоны!
Официальное руководство по email-шаблонам было отредактировано 15 марта — что изменилось и почему? web.archive.org покажет нам старую версию этой страницы, и мы увидим, что оттуда удалили упоминания о системных переменных. Информация о методах getTemplateFilter и addAfterFilterCallback была стёрта из руководства.
public function getTemplateFilter()
{
if (empty($this->templateFilter)) {
$this->templateFilter = $this->getFilterFactory()->create();
$this->templateFilter->setUseAbsoluteLinks($this->getUseAbsoluteLinks())
->setStoreId($this->getDesignConfig()->getStore())
->setUrlModel($this->urlModel);
}
return $this->templateFilter;
}
public function addAfterFilterCallback(callable $afterFilterCallback)
{
// Only add callback if it doesn't already exist
if (in_array($afterFilterCallback, $this->afterFilterCallbacks)) {
return $this;
}
$this->afterFilterCallbacks[] = $afterFilterCallback;
return $this;
}

Большинство крупных пользователей Magento уже установили патчи, и этот инструмент уже не так опасен, как пару месяцев назад. Но из-за потенциального ущерба, который этот инструмент может нанести, этот PoC не должен находиться в ограниченном доступе.
Текущая цена — 0.5 BTC. В неё входят полная инструкция по пентесту, примеры payload и поддержка.
Наш XMPP-контакт для консультаций и заказов: [email protected].
Этот PoC изначально не предназначен для причинения какого-либо ущерба. Это надёжная отправная точка для создания чего-то более крупного.
Авторы этого проекта не несут ответственности за любой возможный вред, причинённый материалами.
CC0