Logto — это современная инфраструктура аутентификации с открытым исходным кодом для приложений SaaS и AI. До версии 0.3.9 пакет npm Logto Tunnel включал createStaticFileProxy из packages/tunnel/src/commands/tunnel/index.ts и передавал request.url из статических запросов ресурсов через packages/tunnel/src/commands/tunnel/utils.ts, используя path.join(staticPath, request.url), а затем fs.open(requestPath, "r") без URL-адреса. нормализация или проверка содержания. Когда --experience-path был включен и порт туннеля был доступен, неаутентифицированный запрашивающий мог отправить путь, содержащий ../, в createStaticFileProxy и прочитать файлы за пределами настроенного статического каталога, которые были доступны для чтения процессом logto-tunnel.
Служба использовала server.listen(port), который мог предоставлять доступ к туннелю другим хостам в зависимости от платформы и развертывания. Эта проблема исправлена в версии 0.3.9.
Показать оригинальное описание (EN)
Logto is the modern, open-source auth infrastructure for SaaS and AI apps. Prior to 0.3.9, the Logto Tunnel npm package enabled createStaticFileProxy from packages/tunnel/src/commands/tunnel/index.ts and passed request.url from static asset requests through packages/tunnel/src/commands/tunnel/utils.ts using path.join(staticPath, request.url) and then fs.open(requestPath, "r") without URL normalization or a containment check. When --experience-path was enabled and the tunnel port was reachable, an unauthenticated requester could send a path containing ../ to createStaticFileProxy and read files outside the configured static directory that were readable by the logto-tunnel process. The service used server.listen(port), which could expose the tunnel to other hosts depending on the platform and deployment. This issue is fixed in version 0.3.9.
Характеристики атаки
Последствия
Строка CVSS v4.0