• XSS.stack #1 – первый литературный журнал от юзеров форума

[java] Игнор java-vm-args, втф?

Aels

(L3) cache
Забанен
Регистрация
04.04.2012
Сообщения
281
Решения
1
Реакции
328
Пожалуйста, обратите внимание, что пользователь заблокирован
У нас есть возможность совать аплету (и jnpl-файлу) свои аргументы командной строки, примерно вот так:
Код:
<j2se version="1.4+" java-vm-args="-ea -Xincgc"/>
или так:
Код:
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
  <PARAM name="java_arguments" value="-Xmx128m">
</APPLET>
пруф: http://docs.oracle.com/javase/6/docs/techn...pplication_desc
На них есть ограничения, а именно, нельзя аплету совать все параметры, которые так или иначе задают пути:
There are relatively few restrictions on what command-line arguments may be passed via the java_arguments parameter. In general, the -Xbootclasspath argument is forbidden, as well as any command-line argument used to specify a path, such as -classpath or -jar. All other command-line arguments, present and future, should be supported, with the caveat about secure and insecure command-line arguments described above.
пруф: http://docs.oracle.com/javase/6/docs/techn...MMAND_LINE_ARGS
Так же там сказано, что не-секьюрные опции может использовать только подписанный (доверенный) код, и только после окна юзеру.
Если же какие-либо небезопасные опции будут переданы неподписанному аплету, то jvm плюнет ошибку ClassNotFoundException.

Проблема:
При явном просовывании, например, -Xbootclasspath, никаких ошибок нет, и вообще нет никакой разницы между "до" и "после".

html:
Код:
	<applet>
  <param name="jnlp_embedded" value="<?php echo base64_encode(file_get_contents('applet.jnlp')); ?>" />
  <param name="jnlp_href" />
	</applet>
jnlp:
Код:
<?xml version="1.0" encoding="utf-8"?>
<jnlp>
	<information>
  <title>/</title>
  <vendor>/</vendor>
	</information>

	<resources>
  <j2se
    version='1.6+'
    java-vm-args='-verbose:gc -Xloggc:"c:\java.log" -jar bla -XX:OnOutOfMemoryError="" -Xbootclasspath:"c:/" -Xmx2m'/>
  <jar href='echo_applet.php?14' />
	</resources>

	<applet-desc name="/" main-class="Init" width="1024" height="768">
  <param name="__applet_ssv_validated" value="true" />
	</applet-desc>
</jnlp>
всю опциональную хрень я выкинул.

Вопросы к вам:
1) как получить какие-то признаки того, что это работает? я неправильно что-то задаю?
2) кто-то уже с этим баловался?

Что хочу:
Т.к. нету нигде полного списка разрешенных\запрещенных опций, то хочу найти полезные "безопасные" опции, в которых могут фигурировать локальные файлы.
Вот частичный (точно говорю, не полный) список разрешенных опций: http://docs.oracle.com/javase/6/docs/techn....html#resources
А вот где-то треть списка всех опций: http://docs.oracle.com/javase/6/docs/techn...va.html#options
и вот еще: http://www.oracle.com/technetwork/java/jav...jsp-140102.html

Соль в том, что преконфигурация jvm выполняется до инициализации апплета, и следовательно, до всех-всех окон. То-есть, все манипуляции на этой стадии выполняются тихо, и без песочницы.
Учитывая, что списки опций пополняются от версии к версии, фильтрация "опасных" ведется по "черному" списку (все новые опции изначально безопасны), то есть вполне реальный шанс найти те, через которые можно порулить локальными файлами.

Так вот... помогите мне заставить код работать, и как-то реагировать) - он должен начать выплевывать эксепшн на попытку запуска неподписанного аплета с несекьюрными параметрами.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх