Mã thông báo xác thực OpenAI Codex bị đánh cắp trong cuộc tấn công chuỗi cung ứng npm codexui-android

Các nhà nghiên cứu an ninh mạng đã tiết lộ chi tiết về một chiến dịch tấn công chuỗi cung ứng độc hại mới nhắm vào các nhà phát triển sử dụng OpenAI Codex thông qua một giao diện web từ xa trông có vẻ hợp pháp. Công cụ codexui-android, được quảng cáo trên GitHub và npm, đã âm thầm đánh cắp mã thông báo xác thực của người dùng trong hơn một tháng qua.
OpenAI Codex Security

Các nhà nghiên cứu an ninh mạng đã tiết lộ chi tiết về một chiến dịch tấn công chuỗi cung ứng (Supply Chain Attack) độc hại mới đang nhắm mục tiêu vào các nhà phát triển sử dụng OpenAI Codex thông qua một giao diện người dùng web (Web UI) từ xa trông có vẻ hợp pháp.

Công cụ này, mang tên codexui-android, được quảng cáo trên GitHub và npm dưới dạng một Web UI từ xa cho OpenAI Codex, thu hút hơn 29.000 lượt tải xuống mỗi tuần. Gói này hiện vẫn có sẵn để tải xuống từ kho lưu trữ.

Điều làm cho hoạt động này trở nên đáng chú ý là đây không phải là một cuộc tấn công truyền thống sử dụng kỹ thuật typosquatting (đặt tên gần giống) hoặc các gói rác để đánh lừa nhà phát triển. Thay vào đó, mã độc được nhúng vào một gói npm thực sự có chức năng và đã qua quá trình phát triển tích cực. Tuy nhiên, kho lưu trữ GitHub liên quan vẫn sạch mã độc.

"Và trong tháng qua, mỗi lần thực thi đều âm thầm trích xuất mã thông báo (token) xác thực Codex của bạn đến một máy chủ do kẻ tấn công kiểm soát," nhà nghiên cứu Charlie Eriksen của Aikido Security cho biết.

Các thay đổi bất chính được cho là đã được đưa vào khoảng một tháng sau khi gói này được xuất bản lên hệ thống, có khả năng nhằm tạo dựng niềm tin với người dùng và mở rộng phạm vi tiếp cận. Tài khoản npm liên kết với gói này là "friuns" (còn gọi là Igor Levochkin).

Cơ chế đánh cắp thông tin xác thực

Bên trong gói này có chứa mã trích xuất nội dung của tệp "~/.codex/auth.json" của Codex và gửi chúng đến một máy chủ từ xa ("sentry.anyclaw[.]store"), giả mạo làm Sentry, một nền tảng giám sát ứng dụng và theo dõi lỗi hợp pháp. Dữ liệu bị thu thập bao gồm các chi tiết sau: access_token, refresh_token, id_token và ID tài khoản.

"Refresh_token không hết hạn," Eriksen nói. "Kẻ tấn công nắm giữ nó có thể âm thầm mạo danh bạn vô thời hạn. Một mã thông báo refresh_token của Codex bị đánh cắp không chỉ dừng lại ở việc truy cập vào giao diện chat — nó là quyền truy cập bền bỉ, âm thầm vào bất cứ điều gì mà tài khoản đó có thể làm."

Cần lưu ý rằng mỗi khi người dùng đăng nhập vào ứng dụng Codex, CLI hoặc IDE Extension bằng ChatGPT hoặc API key, các chi tiết đăng nhập sẽ được lưu tạm thời (cache) cục bộ trong một tệp văn bản thuần túy tại ~/.codex/auth.json hoặc trong kho lưu trữ thông tin xác thực dành riêng cho hệ điều hành.

"Nếu bạn sử dụng lưu trữ dựa trên tệp, hãy coi ~/.codex/auth.json như một mật khẩu: nó chứa các mã thông báo truy cập," OpenAI cảnh báo trong tài liệu hỗ trợ của mình. "Đừng commit nó, dán vào ticket hoặc chia sẻ trong đoạn chat."

Phát tán qua ứng dụng Android

Thú vị là, gói npm này không phải là phương thức phân phối duy nhất mà kẻ tấn công sử dụng để nhắm vào các nhà phát triển Codex. Aikido cho biết họ đã quan sát thấy một ứng dụng Android mang tên OpenClaw Codex Claude AI Agent (tên gói: "gptos.intelligence.assistant") chạy gói npm bên trong sandbox PRoot và gửi thông tin xác thực Codex đến cùng một máy chủ.

"Bản thân tệp APK có kích thước nhỏ (26 MB) và trông sạch sẽ khi quét trước khi xuất bản trên Play Store," Eriksen giải thích. "Trong lần chạy đầu tiên, nó sẽ giải nén một môi trường người dùng Linux dựa trên Termux vào bộ nhớ riêng của ứng dụng và chạy Node.js bên trong đó thông qua PRoot."

"Phiên bản không được cố định (pinned), vì vậy thiết bị sẽ tải bất kỳ phiên bản nào hiện đang được xuất bản trên npm. Việc trích xuất dữ liệu đã tồn tại kể từ phiên bản [email protected]. Gói này chạy bên trong sandbox PRoot của ứng dụng, nơi đăng nhập Codex trong ứng dụng ghi tệp auth.json của nó. Sau khi người dùng đăng nhập, gói này sẽ đọc tệp đó ra khỏi sandbox và gửi toàn bộ blob OAuth đến sentry.anyclaw.store/startlog."

Được phát hành bởi một thực thể mang tên "BrutalStrike", ứng dụng Android này đã có hơn 50.000 lượt tải xuống. Chuỗi trích xuất dữ liệu tương tự cũng đã được gắn cờ trong một ứng dụng Android thứ hai liên kết với BrutalStrike: Codex (tên gói: "codex.app"), đã được tải xuống hơn 10.000 lần. Ba ứng dụng còn lại do nhà phát triển này cung cấp không chứa chức năng này.

BrutalStrike Android Apps
Các ứng dụng Android liên quan đến chiến dịch đánh cắp thông tin.

Khi liên hệ với tác giả gói trên GitHub, Aikido cho biết ban đầu họ đã đăng một bình luận nói rằng họ đã mất quyền truy cập vào tài khoản npm, sau đó lại chỉnh sửa phản hồi và đăng một phản hồi khác tuyên bố rằng họ "hiện đang điều tra vấn đề này trong nội bộ" và họ "đã bắt đầu loại bỏ chức năng bị ảnh hưởng và dữ liệu liên quan".

Tác giả tiếp tục khẳng định không có dữ liệu thông tin xác thực nào được chia sẻ với bất kỳ bên thứ ba nào, mà không trả lời tại sao mã này chỉ được chèn vào bản dựng gói npm hoặc tại sao họ cần quyền truy cập vào mã thông báo Codex ngay từ đầu. Hồ sơ X liên kết với tác giả bao gồm tên miền "anyclaw[.]store".

Hồ sơ WHOIS chỉ ra rằng tên miền này đã được đăng ký vào ngày 12 tháng 4 năm 2026, chỉ hai ngày sau khi phiên bản đầu tiên của gói npm (phiên bản 0.1.72) được tải lên npmjs[.]com.

Mối đe dọa nhắm vào quy trình làm việc của nhà phát triển AI

Sự phát triển này diễn ra khi các tác nhân đe dọa ngày càng nhắm mục tiêu vào các công cụ và quy trình làm việc thực tế của nhà phát triển Trí tuệ nhân tạo (AI) để đánh cắp thông tin xác thực và xâm nhập sâu hơn vào chuỗi cung ứng phần mềm.

Cuối tháng trước, công ty an ninh mạng của Bỉ cũng phát hiện ra rằng một Google API key đã bị xóa vẫn còn hoạt động trong tối đa 23 phút, một khoảng thời gian mà kẻ tấn công có quyền truy cập vào khóa bị rò rỉ có thể tận dụng để truy cập dữ liệu người dùng và các API khác, bao gồm cả những API liên quan đến Google Gemini. Khoảng thời gian thu hồi trung bình là khoảng 16 phút.

"Một kẻ tấn công nắm giữ khóa đã xóa của bạn có thể tiếp tục gửi các yêu cầu cho đến khi có một yêu cầu đến được máy chủ chưa kịp cập nhật," nhà nghiên cứu Joe Leon cho biết. "Nếu Gemini được bật trên dự án, họ có thể lấy các tệp bạn đã tải lên và trích xuất các cuộc trò chuyện được lưu trong bộ nhớ cache."

Mặc dù ban đầu Google đã chọn không khắc phục vấn đề này, tuyên bố rằng đó là "đặc điểm đã biết của hệ thống và không phải là vấn đề bảo mật", gã khổng lồ công nghệ này kể từ đó đã quyết định coi đây là lỗi P0, khiến nó trở thành một vấn đề nghiêm trọng "cần được giải quyết ngay lập tức".

Các phát hiện này, cùng với một cửa sổ khai thác tương tự kéo dài 4 giây được quan sát trước đó với các khóa truy cập Amazon Web Services (AWS) đã bị xóa, làm nổi bật cách sự chậm trễ trong việc thu hồi thông tin xác thực có thể bị khai thác và sử dụng để truy cập trái phép vào các môi trường đám mây (cloud), trong khi những người phòng thủ cho rằng thông tin xác thực đã bị thu hồi.