The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Демонстрация атаки на редакторы кода, приводящей к утечке файлов при открытии исходных текстов, opennews (??), 16-Май-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


222. "Демонстрация атаки на редакторы кода, приводящей к утечке фа..."  +/
Сообщение от n00by (ok), 17-Май-21, 11:09 
Если говорить об эпичности новости, вопрос в том, насколько полно языковой сервер для Rust реализует спецификацию LSP.

TextDocumentItem

An item to transfer a text document from the client to the server.

interface TextDocumentItem {
    /**
     * The text document's URI.
     */
    uri: DocumentUri;
...
}

Я правильно понимаю, что следующий фрагмент не пропустит некоторые URI scheme + authority:


    let config = {
        let root_path = match initialize_params
            .root_uri
            .and_then(|it| it.to_file_path().ok())
            .and_then(|it| AbsPathBuf::try_from(it).ok())
        {
            Some(it) => it,
            None => {
                let cwd = env::current_dir()?;
                AbsPathBuf::assert(cwd)
            }
        };


или не правильно? =)
Ответить | Правка | Наверх | Cообщить модератору

268. "Демонстрация атаки на редакторы кода, приводящей к утечке фа..."  +/
Сообщение от Ordu (ok), 17-Май-21, 22:00 
> Я правильно понимаю, что следующий фрагмент не пропустит некоторые URI scheme + authority, или не правильно?

Не, не правильно. initialize_params -- это явно инстанс какого-то типа, не описанного в std, аргументы лямбд it тоже, я подозреваю, ссылаются на типы вне std. AbsPathBuf -- опять же не из std. Соответственно, можно конечно гадать по названиям идентификаторов о том, что этот код делает, но лучше не стоит, лучше сделать cargo doc и посмотреть в документацию.

То есть, что-то этот код отфильтрует конечно -- to_file_path, судя по всему, может сфейлится иногда (если метод ok следует сложившимся условностям именования методов, точнее если это метод библиотечного Result, конвертающий Result в Option), значит что-то он фильтрует. AbsPathBuf тоже может сфейлится, значит он тоже что-то фильтрует. Но что именно оно фильтрует? Ты можешь либо гадать на кофейной гуще, либо почитать в документации.

Повторяя же твою ошибку (гадая на кофейной гуще), я бы предположил, что здесь отбрасываются uri, которые ссылаются не на локальные файлы и которые не могут быть преобразованы в абсолютный путь к файлу. Если они отбрасываются, то вместо них подставляется env::current_dir (если, конечно, его удаётся получить и валидировать как абсолютный путь).

Ответить | Правка | Наверх | Cообщить модератору

287. "Демонстрация атаки на редакторы кода, приводящей к утечке фа..."  +/
Сообщение от n00by (ok), 18-Май-21, 08:46 
>> Я правильно понимаю, что следующий фрагмент не пропустит некоторые URI scheme + authority, или не правильно?
> Не, не правильно. initialize_params -- это явно инстанс какого-то типа, не описанного
> в std

Вот-вот. Он описан в спецификации LSP. Это параметры инициализации сервера, которые отправляет клиент. Далее сервер производит с этими параметрами некие действия, которые в итоге приводят к исполнению кода, а располагается этот код по адресу root_uri (это корневой каталог "проекта").

Потому интересно, что может оказаться в root_uri.

Там может быть только file:///
или ещё и ftp://bhc-crew.org/perl-sploet.rs

Потому что семантика TextDocumentItem подразумевает для описываемых URI сущностей (это не только корневой каталог, но и каждый анилизируемый файл) не просто open, а transfer (from the client to the server).

> я бы предположил, что
> здесь отбрасываются uri, которые ссылаются не на локальные файлы и которые
> не могут быть преобразованы в абсолютный путь к файлу.

Именно это я и предположил, это действительно не более чем предположение. Может быть, что не отбрасываются? =)

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру