
Доказательство концепции эксплуатации для CVE-2024-34832: обход каталога в административной панели CubeCart, приводящий к удалённому выполнению кода через специально сформированный параметр `_g` и загруженные файлы `.inc.php`.
В панели администратора такие параметры, как _g и node, используются для построения пути к файлам .inc.php и выполнения PHP-кода. Злоумышленник, имеющий возможность загружать файлы .inc.php в любую точку сервера, может использовать уязвимость обхода каталогов, чтобы подключить их и выполнить вредоносный код.
.inc.php в любую точку сервера (например, доступ по FTP, другое приложение на том же сервере, позволяющее загружать файлы, новые уязвимости в функциях загрузки CubeCart и т. д.).Предположим, на том же сервере, где установлен CubeCart, работает FTP-сервер, и пользователь может загружать файлы в определённое место. В нашем примере пусть всё, что загружается через FTP, оказывается в /opt/FTP_Example.
Также допустим, что этот пользователь загрузил по FTP файл с именем path_traversal.inc.php, содержимое которого представляет собой следующий PHP-код: <?php system('whoami;id;hostname;ls') ?>.

Изначально загрузка такого файла не представляет опасности, так как он не выполняется и не находится в директории веб-сервера (например, Apache), который мог бы его выполнить.
Этот же пользователь может иметь очень ограниченные или даже нулевые привилегии в панели администратора CubeCart, но всё равно может войти в неё. Например, мы создали пользователя julio, у которого вообще нет никаких привилегий.

После входа в приложение под именем julio мы начали тестировать параметры _g и node. Мы заметили, что эти параметры автоматически добавляют к пути .inc.php и, по-видимому, используют include() для этого файла с целью выполнения PHP-кода.
Как показано ниже, когда файл не найден, возвращается следующее сообщение об ошибке.

Мы задумались, сможем ли мы пройти по пути и добраться до файла .inc.php в другом каталоге сервера, например, в нашей FTP-папке.
Поскольку у нас был файл path_traversal.inc.php в папке /opt/FTP_Example, мы попробовали добавить множество /../../../, пока не достигли корневого каталога, затем добавили /opt/FTP_Example/path_traversal, и приложение автоматически добавило .inc.php в конец пути.
Как показано ниже, код был успешно выполнен.

Мы заметили, что параметр node экранирует слеши (/), а _g — нет. Все параметры, используемые для построения путей, должны экранировать слеши, чтобы предотвратить уязвимости обхода каталогов.
Хотя для успешной эксплуатации этой уязвимости существуют предварительные условия, что значительно снижает риск, она всё же требует исправления. Вы можете посмотреть в ссылках, как авторы CubeCart исправили эту уязвимость, и применить исправления к своему экземпляру CubeCart до выхода официального релиза с уже включённым патчем.