Mã xác thực OpenAI Codex bị đánh cắp

1468
22-05-2026
Mã xác thực OpenAI Codex bị đánh cắp

Mã 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 đã công bố chi tiết về một chiến dịch tấn công chuỗi cung ứng (supply chain attack) 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 (remote web UI) có vẻ hoàn toàn hợp pháp.

Công cụ có tên codexui-android, được quảng bá trên GitHub và npm như một giao diện web từ xa dành cho OpenAI Codex, thu hút hơn 29.000 lượt tải mỗi tuần. Gói phần mềm này hiện vẫn có thể được tải xuống từ kho lưu trữ.

Điều đáng chú ý của hoạt động này là đây không phải kiểu tấn công truyền thống sử dụng một gói giả mạo (typosquat) hoặc gói dùng một lần để đánh lừa nhà phát triển. Thay vào đó, mã độc được nhúng bên trong một gói npm hoạt động bình thường và đã được phát triển tích cực trong một thời gian dài. Trong khi đó, kho mã nguồn GitHub liên quan vẫn sạch và không chứa mã độc.

“Và trong suốt một tháng qua, mỗi lần công cụ được sử dụng đều âm thầm gửi (exfiltrate) các mã thông báo xác thực (authentication token) của Codex tới 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.

Những thay đổi độc hại này được cho là đã được đưa vào khoảng một tháng sau khi gói phần mềm được phát hành lên kho npm, nhiều khả năng nhằm tạo dựng lòng tin của người dùng và mở rộng phạm vi lây nhiễm. Tài khoản npm liên kết với gói phần mềm này là "friuns" (hay còn gọi là Igor Levochkin).

Bên trong gói phần mềm có mã nguồn được thiết kế để trích xuất nội dung của tệp:

~/.codex/auth.json

và gửi dữ liệu đó tới một máy chủ từ xa (sentry.anyclaw[.]store) do kẻ tấn công kiểm soát. Máy chủ này được ngụy trang giống Sentry, một nền tảng hợp pháp dùng để giám sát ứng dụng và theo dõi lỗi.

Dữ liệu bị đánh cắp bao gồm:

access_token

refresh_token

id_token

account ID

Những thông tin này có thể cho phép kẻ tấn công truy cập trái phép vào tài khoản Codex của nạn nhân và thực hiện các hành động dưới danh nghĩa của họ.

"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. Refresh_token của Codex bị đánh cắp không chỉ cho phép truy cập vào trình chat mà còn cho phép truy cập liên tục và âm thầm vào bất cứ thứ gì mà account đó có thể."

Điều đáng lưu ý là mỗi khi người dùng đăng nhập vào ứng dụng Codex, CLI hoặc tiện ích mở rộng IDE bằng tài khoản ChatGPT hoặc khóa API, thông tin đăng nhập sẽ được lưu tạm cục bộ dưới dạng văn bản thuần (plaintext) trong tệp ~/.codex/auth.json hoặc trong kho lưu trữ thông tin xác thực riêng của hệ điều hành.

OpenAI cảnh báo trong tài liệu hỗ trợ của mình:

"Nếu bạn sử dụng phương thức lưu trữ dựa trên tệp, hãy coi ~/.codex/auth.json như một mật khẩu, vì nó chứa các mã thông báo truy cập (access tokens). Không đưa tệp này vào mã nguồn (commit), không dán nó vào các phiếu hỗ trợ (tickets), và không chia sẻ nó trong các cuộc trò chuyện."

Điều thú vị là gói npm này không phải là phương thức phát tán duy nhất mà tác nhân đe dọa sử dụng để nhắm vào các nhà phát triển Codex. Aikido cho biết họ đã phát hiện một ứng dụng Android có tên OpenClaw Codex Claude AI Agent (tên gói: gptos.intelligence.assistant) chạy gói npm nói trên bên trong môi trường PRoot sandbox của nó, đồng thời gửi thông tin xác thực Codex tới cùng một máy chủ nhận dữ liệu.

“Bản thân tệp APK có dung lượng nhỏ (26 MB) và trông hoàn toàn bình thường khi được quét trong giai đoạn kiểm tra trước khi phát hành trên Google Play,” Eriksen giải thích. “Khi chạy lần đầu, ứng dụng sẽ giải nén một môi trường Linux dựa trên Termux vào vùng lưu trữ riêng của ứng dụng và chạy Node.js bên trong đó thông qua PRoot.”

“Phiên bản của gói 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 phát hành trên npm. Chức năng đánh cắp dữ liệu đã xuất hiện từ phiên bản codexui-android@0.1.82. Gói này chạy bên trong sandbox PRoot của ứng dụng, nơi quá trình đăng nhập Codex trong ứng dụng sẽ ghi tệp auth.json. Sau khi người dùng đăng nhập, gói phần mềm sẽ đọc tệp đó từ trong sandbox và gửi toàn bộ dữ liệu OAuth đến địa chỉ sentry.anyclaw.store/startlog.”

Ứng dụng Android này được phát hành bởi một thực thể có tên BrutalStrike và đã đạt hơn 50.000 lượt tải xuống. Chuỗi đánh cắp dữ liệu tương tự cũng được phát hiện trong một ứng dụng Android khác liên quan đến BrutalStrike có tên Codex (tên gói: codex.app), với hơn 10.000 lượt tải xuống.

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 đánh cắp dữ liệu nói trên.

Sau khi liên hệ với tác giả của gói phần mềm trên GitHub, Aikido cho biết ban đầu người này đã đă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 của mình. Tuy nhiên, sau đó bình luận này đã được chỉnh sửa và thay thế bằng một phản hồi khác, trong đó tác giả tuyên bố rằng họ đang “điều tra vấn đề này nội bộ” và đã “bắt đầu loại bỏ chức năng bị ảnh hưởng cùng dữ liệu liên quan”.

Tác giả cũng khẳng định rằng không có dữ liệu thông tin xác thực nào được chia sẻ với bên thứ ba. Tuy nhiên, họ không giải thích được vì sao đoạn mã này chỉ được chèn vào bản phát hành trên npm mà không xuất hiện trong kho mã nguồn GitHub, cũng như không trả lời câu hỏi tại sao họ cần quyền truy cập vào các mã thông báo (token) của Codex ngay từ đầu.

Đáng chú ý, hồ sơ X (Twitter) được liên kết với tác giả có chứa tên miền anyclaw[.]store.

Các bản ghi WHOIS cho thấy tên miền này được đăng ký vào ngày 12/4/2026, chỉ hai ngày sau khi phiên bản đầu tiên của gói npm (0.1.72) được tải lên npmjs[.]com.

Diễn biến này xảy ra trong bối cảnh 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 phát triển trí tuệ nhân tạo (AI) hợp pháp nhằm đá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 bảo mật của Bỉ Aikido cũng phát hiện rằng một khóa API của Google sau khi bị xóa vẫn có thể tiếp tục hoạt động trong tối đa 23 phút. Đây là khoảng thời gian mà kẻ tấn công, nếu đang nắm giữ khóa API bị rò rỉ, có thể lợi 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. Thời gian trung vị để việc thu hồi khóa có hiệu lực hoàn toàn là khoảng 16 phút.

Nhà nghiên cứu Joe Leon cho biết:

“Kẻ tấn công đang nắm giữ key đã bị xóa của bạn vẫn có thể tiếp tục gửi yêu cầu cho đến khi một yêu cầu đến được server chưa kịp cập nhật trạng thái thu hồi key. Nếu Gemini được kích hoạt trong dự án, chúng có thể tải xuống các file bạn đã tải lên và đánh cắp các cuộc trò chuyện được lưu cache.”

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

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

SHARE