
Исправьте ваше устройство D-Link, затронутое уязвимостью CVE-2024-3272
Вы один из тех 92,000+ человек1, кто застрял с D-Link NAS, уязвимым к CVE-2024-3272, и патча не видно?
Этот инструмент использует сам эксплойт, чтобы пропатчить уязвимое устройство.
1: См. оригинальное раскрытие в ссылках
Dinkleberry выполнит команду, чтобы заменить уязвимый файл nas_sharing.cgi пропатченной версией — перезаписав вызов system() командами NOP.
Папка /usr/local/modules (где находится файл) доступна только для чтения, поэтому вместо этого создаётся копия в /usr/local/config, а симлинк в /var/www/cgi-bin обновляется, чтобы указывать на более безопасную версию.
Я решил заменить только сам вызов system() на NOP, чтобы команда по-прежнему отвечала как обычно, просто без реального выполнения.
[!NOTE] Файловая система перезагружается из флеш-памяти при загрузке. Применение этого патча будет работать только до перезагрузки устройства. Если вы хотите более постоянное исправление, придётся перепрошить прошивку — возможно, с помощью Debian.
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
Если не указаны дополнительные флаги, скрипт выполняет патчинг.
Если вы просто хотите покопаться в устройстве, используйте команду --telnet, которая запускает telnet-сессию на порту 23.
Это до смешного небезопасно, но ваше устройство и так до смешного небезопасно, так что почему бы не воспользоваться удобной оболочкой.
[!CAUTION] Используйте этот инструмент на свой страх и риск. Он изменяет реальное программное обеспечение устройства.
Я не несу ответственности за:
- Прекращение работы вашего устройства
- Потерю данных, хранящихся на NAS
- Возгорание
- Расстройство TA, который с удовольствием эксплуатировал ваше устройство
В ходе анализа бинарных файлов nas_sharing.cgi и libsmbif.so быстро стало понятно, что программное обеспечение на этом устройстве чрезвычайно уязвимо. Настолько, что его невозможно поддерживать — только переписывать с нуля.
Только в nas_sharing.cgi около 80 вызовов system() — и многие из них имеют путь для пользовательского ввода. Я не стал анализировать их все в поисках дополнительных дыр для патча, но вот один пример уровня S:
/* Why use system() instead of libc fopen/fwrite?
What if you want to write a long string or your filename is long?
Painfully obvious command injection playground 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
Помимо всех этих безумных вызовов system, здесь переполнений буфера больше, чем можно палкой перетыкать, — а я могу перетыкать много палок.
Этот CVE есть в списке KEV от CISA — Если у вас есть такое устройство в интернете, отключите его от сети. Прямо сейчас.
Возможно, стоит даже последовать совету D-Link и заменить устройство с истёкшим сроком поддержки (EOL). Но я бы точно не стал покупать продукцию D-Link.