今天的漏洞是由Freighter回報的,為一個可以連接Ledger電子錢包的Chrome extension,在Security advisor中紀錄,在Freighter v5.3.0,在錢包解鎖的情況下,助記詞可能會被第三方網站讀取。
在繼續往下介紹前,這邊先來介紹一下註記詞,簡單來說助記詞就是一串沒有加密過的私鑰。
因為我們都知道,記單字比起記一串64位的hash還要簡單XD。
知道了你的註記詞就可以推回你錢包的私鑰。就等於擁有了錢包。就可以把你的資產順走。
所以讓註記詞存在一個安全的地方變成了很重要的議題,也間接讓各家廠商推出了跟助記詞有關的周邊。像這個需要兩千多塊的東西
介紹完了助記詞,可以回來講原理了。
在getMnemonicPhrase
,並沒有要求User在輸入一次密碼來瀏覽錢包助記詞(錢包已經解鎖的情況下),可能會讓其他惡意網站可以在錢包解鎖的情況下讀取助記詞。
const getMnemonicPhrase = () => ({
mnemonicPhrase: mnemonicPhraseSelector(sessionStore.getState()),
});
(不同於showBackupPhrase)
const showBackupPhrase = async () => {
const { password } = request;
try {
await _unlockKeystore({
keyID: (await localStore.getItem(KEY_ID)) || "",
password,
});
return {};
} catch (e) {
return { error: "Incorrect Password" };
}
};
getMnemonicPhrase
流程const getMnemonicPhrase = async () => {
const { password } = request;
const keyID = (await getIsHardwareWalletActive())
? await _getNonHwKeyID()
: (await localStore.getItem(KEY_ID)) || "";
// Need to unlock keystore before return mnemonic phrase
try {
await _unlockKeystore({ keyID, password });
} catch (e) {
console.error(e);
return { error: "Incorrect password" };
}
return {
mnemonicPhrase: mnemonicPhraseSelector(sessionStore.getState()),
};
};