В HTTP-сървъра muhttpd, използван главно в маршрутизатори и точки за достъп, е открита уязвимост (CVE-2022-31793), която позволява на неавтентифициран атакувач да качи произволни файлове чрез изпращане на специално форматиран HTTP-запит, в зависимост от правата, с които работи HTTP-сървъра (в много устройства muhttpd работи с права root). Например, атакуващият може да получи достъп до файлове с пароли, настройки за безжичен достъп, параметри за свързване с доставчика и частни ключове.
Проблемът е причинен от грешка при обработката на пътя в запитването, което позволява достъп до файлове извън кореновата директория на уеб-сървъра. Атаката се състои в указване на всякакъв допълнителен символ в началото на пътя, различен от точка, наклонена черта и въпросителен знак. Например, за да се зареди файлът /etc/hosts, е достатъчно да се изпрати запитване "GET a/etc/hosts" или "GET a/etc/hosts" (printf "GET b/etc/hosts\n\n" | nc server port).
Причината за указаното поведение е, че отварянето на запитания файл се извършва с командата "open(&req->filename[1], O_RDONLY)" с предварително изпълняваща функция chdir(), за да се премине в корена. уеб сървър. Указването на &req->filename[1] води до игнориране на първия символ на пътя (разработчиците предполагали, че първият символ винаги е "/"). По този начин, при запитване "GET /etc/hosts", сърверът ще се опита да отвори файла по относителен път "etc/hosts", но ако в началото се укаже какъвто и да е допълнителен символ ("GET a/etc/hosts") — следващият път ще бъде обработен напълно.
Проблемът е налице от самата първа версия на muhttpd и е отстранен в версия 1.1.7. От устройствата, които използват muhttpd, наличието на проблема е потвърдено в маршрутизатори SaskTel и Arris. Потенциално, проблемът може да се прояви и в устройствата, произведени от фирмите AT&T, Frontier и Windstream. Когато достъпът до HTTP порта е ограничен само до вътрешната мрежа, атаката може да бъде извършена от външната мрежа с помощта на техника "DNS rebinding", която позволява при отваряне на определена страница от потребителя в браузъра да се изпрати HTTP-запитване на мрежов порт, недостъпен за директен достъп през интернет.
Източник: opennet.ru
