Xpoint
   [напомнить пароль]

Уязвимость в Java-машине?

Метки: [без меток]
[арх]
2006-03-23 15:12:37 [обр] Даниэль Алиевский(35/125)[досье]

Есть ощущение, что, разбираясь с Анти-Анонимайзером (Анти-Анонимайзер: новый вариант, с учетом предыдущей критики), я напоролся не на feature, а на "дыру безопасности" в Sun-овской Java-машине. Соответственно, строить что-то на этой feature по меньшей мере неразумно.

"Дыра" следующая. Апплет позволяет запустить в себе TCP/IP-сервер (цикл accept()-ов объекта ServerSocket). К этому серверу (внутри апплета) можно обратиться откуда угодно из Internet. И хотя при этом accept() выдаст исключение, но в параметрах исключения будет присутствовать IP-адрес обратившегося. (Исключения не будет лишь при обращении с того же самого компьютера.) Очевидно, если на твоем компьютере есть в распоряжении хотя бы 2 IP-адреса, на этом можно построить передачу нетривиальной информации в Java-апплет.

Как считаете, "дыра" это или нет? Мне кажется, что да. Представим себе, что эта техника используется на некоей странице для общения, ну, например, с клиентской программой. А исключения в апплете всегда отображаются в виде всплывающего окошка. Допустим, пользователь работает со страницей, и в этот момент некто с совершенно произвольного компьютера начинает обращаться к этому TCP/IP-серверу (по IP пользователя). Получается, что извне можно сделать работу такого пользователя невозможной из-за изобилия сообщений об ошибках. А что, если кто-нибудь (подобно мне с АА) задумает через такие исключения передавать некую информацию? Скажем, команды, которые JavaScript должен исполнить? Тогда становится реальной кража данных...

Типа, пора писать в Sun bug-report?

спустя 19 часов [обр] Владимир Палант(253/4445)[досье]
Думаю, что это дыра. Не уверен, как точно обосновывается запрет создавать серверы из апплетов, но возможность соединения с этим сервером (хоть и с ошибкой) сводит этот запрет на нет.
спустя 23 дня [обр] Даниил Иванов(36/63)[досье]
Что-то я не понял.
Вот у меня запущен этот апплет. Ко мне обратились с произвольного IP-адреса. Апплет выдаст исключение. Я увижу IP-адрес того, кто ко мне обратился. Для кого тут опасность? Для меня из-за того что выпало сообщение об исключании и такими исключениеми можно забомбить комп?
А как технологически можно через такое исключение вызвать Java-Script?
спустя 20 часов [обр] Даниэль Алиевский(35/125)[досье]

Даниил Иванов[досье]
Во-первых, действительно, можно "забомбить" компьютер. Прикиньте сами. Вот написал некто невинный апплет, скажем, решающий задачи 3-мерного моделирования. У него есть множество пользователей: скажем, сотрудники университетов, заплативших деньги за право пользования апплетом (к примеру, почасового - своего рода аренда). И для каких-то своих вспомогательных нужд разработчики запустили в апплете TCP-сервер.

Типа незачем? Вот пример (у меня возникали мысли сделать так в своем математическом апплете). В апплете "крутится" маленький HTTP-сервер на порту 11111, а на странице есть форма, настроенная на localhost:11111 и позволяющая посылать на этот адрес файлы с диска POST-протоколом (<input type=file ...>). Получается вполне легальный аналог команды File/Open обычного приложения. Таким манером можно загружать в апплет двоичные файлы данных с диска пользователя. Тот же HTTP-сервер может решить и обратную задачу - выдать двоичные данные апплета по ссылке вида localhost:11111/mydata?...parameters... Если пользователь хочет записать данные на диск (File/Save as...), в броузере открывается указанная ссылка, и броузер сам предлагает записать файл.

Могут быть, конечно, и другие применения. Все вроде бы легально.

А теперь представьте себе, что в качестве реакции на непредусмотренное исключение разработчики показывают окошко с сообщением об ошибке. Получается, что хакер, совершенно неожиданно для пользователей и разработчиков научного апплета, может организовать массированную атаку на компьютеры пользователей. Разве это нормально?

Это во-первых. А во-вторых, речь может идти о гораздо более тонком воздействии. Исключения могут служить средством для передачи информации. (Скажем, может использоваться 2 разных IP - тогда каждое исключение несет 1 бит информации.) Я сам одно время думал использовать это для анти-анонимайзера. Далее, возможно, на основе этой информации в апплете принимаются те или иные нетривиальные решения, в том числе критические для пользователя. Например, самая важная часть алгоритма исполняется на сервере, во избежание кражи, и использует описанный "кривой" канал для возврата данных в апплет. (Понятно, что решение смотрится бредово - ведь можно для передачи данных использовать обычные HTTP- или даже TCP-обращения к исходному серверу. Но если, к примеру, написаны библиотеки для передачи данных апплет-сервер, и где-то в глубине "закопан" описанный механизм, то разработчики-математики вполне могут нечаянно применить его.) Допустим, "критическая информация" - диагноз больного пациента. Получается, что хакер из любой точки мира может вмешаться в диалог апплета и сервера и исказить информацию. Разве сие не "дыра"?

По идее, если уж разрешать создание TCP-серверов в апплете, то менеджер безопасности должен различать, с какого именно IP-адреса идет обращение к серверу. Если с localhost или (что было бы еще лучше) с IP-адреса сайта, где размещен апплет, то обращение должно быть разрешено. А если нет, то обращение должно быть молча проигнорировано, как если бы никакого обращения не было вовсе.

А как технологически можно через такое исключение вызвать Java-Script?

Не понял, в чем проблема-то. try/catch, в блоке catch - netscape.javascript.JSObject.eval

Powered by POEM™ Engine Copyright © 2002-2005