Size: a a a

WebAssembly — русскоговорящее сообщество

2020 August 03

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
lil pep
то что доступны только 32-битные адреса дела не меняет
+
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
ну ты можешь же просто создать статическую переменную с шеллкодом, она будет загружена в васм память
а чтобы обойти ограничение на отсутсвие прав на исполнение, применяется ROP/JOP
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
а чтобы обойти ограничение на отсутсвие прав на исполнение, применяется ROP/JOP
Еще не очень понятно как все это провернуть при рандомизации адресов, хотя для wasm песочниц это редко когда используется
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Еще не очень понятно как все это провернуть при рандомизации адресов, хотя для wasm песочниц это редко когда используется
вот это проблема да
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
если речь идет о том что вдруг помимо уязвимости внутри этой libc есть еще и уязвимость в JIT'ере, то я думаю это уже совсем другая история. Например в блокчейновом случае уже и не важно если где-то там внутри вазма уязвимость - в любом случае поимеют
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
но иногда рандомизация плохо работает
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
lil pep
если речь идет о том что вдруг помимо уязвимости внутри этой libc есть еще и уязвимость в JIT'ере, то я думаю это уже совсем другая история. Например в блокчейновом случае уже и не важно если где-то там внутри вазма уязвимость - в любом случае поимеют
нет, нам не нужна уязвимость в джиттере, здесь джиттер просто сгенерирует уязвимый код, гипотетически сможет привести к arbitrary 32-bit jump
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
нет, нам не нужна уязвимость в джиттере, здесь джиттер просто сгенерирует уязвимый код, гипотетически сможет привести к arbitrary 32-bit jump
Смотря еще какой jit. Если трассирующий то возможно
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
не понимаю как такое может произойти. Если взять спецификацию - то это просто не возможно семантически. Если такое все таки происходит - значит присутствует уязвимость джита. Третьего варианта не дано
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
но опять же слишком много всего должно сойтись. И vm джитить (а не AOT или интерпретатор) при чем в трассирующем стиле + без рандомизации адрессов и памяти можно выделять сколько хочешь и газа бесконечность - или обмануть газ метр.
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
опять же. если обмануть газ метр - это тоже другая история с скорее всего последующим геймовером
а то что нужна специфическая вм я тоже не уверен уязвимости то они разные бывают )

но о чем  мы можем согласиться - это да много всего должно сойтись )
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
но опять же слишком много всего должно сойтись. И vm джитить (а не AOT или интерпретатор) при чем в трассирующем стиле + без рандомизации адрессов и памяти можно выделять сколько хочешь и газа бесконечность - или обмануть газ метр.
да, но так обычно и бывает, я попробую сделать poc
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
да, но так обычно и бывает, я попробую сделать poc
в смысле, что эксплуатировать сложно и обычно нужно несколько уязвимостей
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Ну и при oob ты же не сможешь ничего записать в guarded страницу. ОС просто не даст тебе это сделать. Не очень понимаю как это вожможно?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
а нам и не нужно ничего записывать за guarded page
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
я попробую накидать poc попозже, мб я где-то не прав
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Тогда зачем эксплуатировать oob?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
а, я всё -таки ошибаюсь
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Тогда зачем эксплуатировать oob?
изначально в моей идее для передачи управления по контролируемому адресу
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
например, в способе эксплуатации dlmalloc под названием house of force можно добиться произвольной перезаписи памяти и перезаписать какой-нибудь указатель в libc. Обычно переписывают какие-нибудь указатели на коллбеки в глобальных stdin/stdout. Но они потом будут вызваны с помощью call_indirect и будут проверены по условной таблице соответствия адреса функции типу. Вот тут как раз мои рассуждения ошибочны.
источник