https://git.rosetta.im/Rosetta/rosetta-sdu/src/branch/main/README.md


Path Traversal (выход за пределы папки kernel)

KERNEL_DIR.resolve(platform).resolve(arch) без фильтрации ..
GET через параметры platform и arch в строке запроса


в классе UpdatesResource есть метод findLatestKernel. Он берёт параметры platform и arch прямо из запроса и делает так:
----------------------------------------------------------------------------------------------------------------------------
java
java.nio.file.Path targetDir = KERNEL_DIR.resolve(platform).resolve(arch);
KERNEL_DIR – это просто папка kernel. Дальше сервер смотрит  есть ли там папка с таким путём, и если есть  ищет в ней файлы. Но он не чистит строки от ../. Поэтому если передать arch=../../etc, то resolve склеит всё в путь kernel/../../etc, который после нормализации превратится в /etc.

Останется только скачать эту ссылку .....

Что проверяется:
fileName().startsWith(".") — пропускает файлы типа .hidden, .gitignore и т.п.

Что НЕ проверяется:
arch может быть "../../../etc" — и тогда итоговый путь станет:
Нет нормализации пути (Path.normalize(), getCanonicalPath() и т.п.)
