Уязвимости I2P

Все что вводит пользователь — опасно

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

XSS

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

Увеличение полезной нагрузки с Eval

Не смотря на все правила фильтрации, в основную область сообщения можно поместить код и выполнить его с помощью функции Eval () в JavaScript.

Пример деобфусцированного кода:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(this.responseText);
}
}
xhttp.open("GET", "http://127.0.0.1:7657/home", true);
xhttp.send();

Эта небольшая полезная нагрузка демонстрирует, как XSS может быть использована для установки плагинов в клиент I2P. В большинстве случаев плагин будет иметь доступ к машине пользователя на уровне разрешения I2P, и в свою очередь может загрузить дополнительное вредоносное ПО.

Полезная нагрузка в CSS

Полезную нагрузку можно вложить и в таблицы стилей. Замаскировав ссылку на вредоносную страницу.
Все эти уязвимости исправлены в I2P Bote 0.4.5

Выводы

  • Защита от CSRF не имеет смысла, если есть вектор XSS;
  • I2P плагины должны работать на другом порту от маршрутизатора;
  • Все пользователи должны обновиться до текущей версии, или отключить JavaScript.