Обход каталога для уязвимостей веб-безопасности

Node.js Безопасность
Обход каталога для уязвимостей веб-безопасности

Что такое обход каталога

Впервые уязвимости обхода каталогов были обнаружены в ThinkJS 2. Код показан ниже, цель состоит в том, чтобы вернуть адрес статического ресурса, когда URL-адрес, к которому обращается пользователь, является статическим ресурсом. вpathnameЭто путь в URL-адресе, к которому обращается пользователь.Мы обнаружили, что код просто декодируется, а затем соединяется с каталогом ресурсов в строке 22. Это очень очевидная уязвимость обхода каталога.

Почему ты это сказал? Предположим, что URL-адрес, который посещает пользователь,http://xxx.com/../../../xxx.jpgТогда окончательный возвращаемый адрес файла станетthink.RESOURCE_PATHфайлы в трех верхних каталогах. Этот способ перечисления каталогов или файлов сервера с использованием недостатков безопасности веб-сайтов становится уязвимостью обхода каталога, также известной как уязвимость обхода пути (англ. Path traversal).

Обход каталога также известен на английском языке как атака ../Dot-dot-slash, лазание по каталогу и поиск с возвратом. Некоторые из его методов атаки также можно разделить на атаки канонизации. с помощью:wikipedia

Опасности обхода каталогов

Самая большая опасность обхода каталогов заключается в том, что любой пользователь может получить доступ к конфиденциальным файлам системы, а затем скомпрометировать весь сервер. Например, после получения файла /etc/passwd под linux пароль пользователя root может быть взломан.

способ защиты

Видно, что суть проблемы в большинстве случаев заключается в../Характер скачка каталога, поэтому первоочередной задачей защиты является его фильтрация. В дополнение к фильтрации вы также можете оценить окончательный путь к файлу, чтобы убедиться, что первые N символов после полного каталога запрошенного файла точно совпадают с корневым каталогом документа.Если они совпадают, содержимое будет возвращено. В противном случае адрес атаки может быть не возвращен.

Возвращаясь к проблеме с кодом, упомянутой в начале статьи, она окончательно устраняется вышеуказанным методом.После нормализации конечного адреса файла судят, содержит ли началоRESOURCE_PATHкаталог или пустой, если он его не содержит.