iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Security

一天一個漏洞介紹系列 第 3

CVE-2023-40580 Information leak

  • 分享至 

  • xImage
  •  

介紹

今天的漏洞是由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流程

解決方法

在getMnemonicPhrase新增了與showBackupPhrase相同的流程

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()),
    };
  };

Reference

Freighter PR
Security Advisor


上一篇
CVE-2023-42442 Improper Authentication
下一篇
CVE-2023-41349 externally-controlled format string
系列文
一天一個漏洞介紹4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言