Специалист по безопасности Михаэль Козярски (Michael Koziarski) опубликовал браузерный букмарклет MegaPWN, который успешно извлекает секретный мастер-ключ Mega из оперативной памяти компьютера.
Собственно, это не столько баг, сколько фича специфической «браузерной криптографии» Mega, когда все операции по шифрованию/расшифровке файлов осуществляются в браузере, с помощью приложения на Javascript. Сами представители компании признали этот факт и говорят: «Технически, мы можем передать вам JavaScript-код с бэкдором, который извлечет ваш секретный ключ и отправит его обратно нам».
Михаэль Козярски наглядно демонстрирует, что любой злоумышленник, получивший доступ к компьютеру пользователя, может узнать его секретный ключ. Этот ключ напрямую доступен компании Mega, которая тоже может легко получить доступ к «зашифрованным» файлам пользователя на своих серверах и проверить их содержимое.
Возможность доступа к файлам пользователю означает, что компания Mega будет обязана предоставить такой доступ, если получит соответствующее судебное постановление в отношении одного или многих пользователей. В общем, пресловутый «криптохостинг» оказался не слишком-то и «крипто-».
Для пользователей Mega, таким образом, действуют такие же рекомендации, как и для пользователей обычных файлохостингов: нужно самостоятельно шифровать файлы перед передачей в облако с помощью стойкой криптографии, используя PGP или GPG.
Исходный код букмарклета MegaPWN
function megaPWN() { var format = function(a) { var padded = ""; var hex = s2hex(b2s(a)); for (var i = 0; i < hex.length; i+= 8) { padded += hex.substr(i, 8); padded += ' '; } return padded; }; var masterAESKey = JSON.parse(window.localStorage.k); var rsaPrivateKeyComponents = JSON.parse(window.localStorage.privk); var rsaD = rsaPrivateKeyComponents[2]; var rsaP = rsaPrivateKeyComponents[0]; var rsaQ = rsaPrivateKeyComponents[1]; var rsaU = rsaPrivateKeyComponents[3]; var lesson = "Your MEGA master key is: " + format(masterAESKey); lesson += "
"; lesson += "Your RSA private key exponent starts with: d=" + format(rsaD).substr(0, 107); lesson += "
"; lesson += "MEGA and anyone else with access to your computer can see this, and use it to decrypt any file you upload."; Ext.Msg.show({ title: "megaPWN", msg: lesson }); } megaPWN();