Một hình minh họa trừu tượng được tạo sinh trên nền xanh navy thẫm: một chồng năm khay bộ nhớ mỏng màu lục lam nhìn theo mặt cắt, mỗi khay chứa các hàng khối xám nhỏ, với một khối lập phương hổ phách nhỏ nằm chen giữa khay thứ ba và khay thứ tư; từ khối lập phương đó, một sợi hạt mảnh màu hổ phách uốn vòng cung vắt ngang khoảng không tối về phía ba nút đỏ cam nhỏ xếp thành hình tam giác. Phía sau các khay, những thẻ xám mờ treo trên một vòng khóa bằng các vòng mảnh. Không có văn bản, người hay logo tổ chức nào xuất hiện. Logo OrcaRouter được ghép ở góc dưới bên phải.
AI Safety Incidents

sckit: Các gói Bộ nhớ AI của MemTensor đã bị cài cửa hậu để đánh cắp thông tin xác thực và prompt của agent

Tác giả

Rowan Sterling

Ngày đăng

Mô hình mới nhất · 20Xem tất cả mô hình →
Benchmark: Artificial Analysis · cập nhật hằng ngày
Quay lại tất cả bài viết

Bốn bản phát hành MemTensor được công bố vào ngày 23 tháng 9 năm 2026 đều mang cùng một implant Go đã bị strip, và mỗi bản đều là phiên bản mới nhất trên registry của mình trong thời gian còn tồn tại. Gói npm @memtensor/memos-cloud-openclaw-plugin được phát hành với phiên bản 0.1.21 lúc 02:23 UTC, 0.1.23 lúc 03:49 và 0.1.25 lúc 04:36; trên PyPI, MemoryOS được phát hành với phiên bản 2.0.34 lúc 05:25. Cả bốn bản đều phát hành kèm sckit, thứ khởi động khi gateway tác nhân OpenClaw khởi động, khởi động lại mỗi khi có truy hồi bộ nhớ — được truyền văn bản lời nhắc của người dùng qua một biến môi trường — và, trong gói Python, khởi động khi chỉ cần import mô-đun memos theo cách thông thường. Sau đó nó quét thư mục home để tìm bí mật npm, PyPI, GitHub, GitLab, AWS, Vault và SSH rồi gửi những gì tìm thấy đến các máy chủ thuộc skyleen[.]fr. Socket, StepSecurity, SafeDep và Aikido đã ghi nhận vụ xâm phạm một cách độc lập ngay trong ngày, và không bên nào báo cáo bằng chứng cho thấy implant đã chạy trên một máy thật. Orca AI Incident Archive lưu giữ đầy đủ mục này, cùng với mọi sự cố chuỗi cung ứng khác mà nó đã ghi nhận, và mỗi bản ghi đều có xếp hạng độ tin cậy và trạng thái tác hại riêng.

Bốn bản phát hành, và một báo cáo lỗi công khai xen giữa chúng

MemOS là khung bộ nhớ mã nguồn mở của MemTensor dành cho các tác nhân LLM, và gói npm là trình kết nối cho phép môi trường chạy tác nhân OpenClaw đọc và ghi vào một dịch vụ bộ nhớ được lưu trữ; StepSecurity lưu ý rằng cùng gói đó cũng khai báo các điểm tích hợp cho môi trường chạy Clawdbot và Moltbot. Socket đã đo kho lưu trữ ở mức khoảng 11.500 sao và 1.100 fork tại thời điểm công bố. Vị thế đó là lý do vụ xâm phạm đã kéo theo bốn cuộc điều tra riêng biệt: như StepSecurity diễn đạt, điều này "đặt plugin vào bên trong một tiến trình thường xuyên xử lý đầu vào của người dùng và có thể thừa hưởng các thông tin xác thực có giá trị." Những người bị ảnh hưởng là những người đã cài một trong hai gói — các nhà phát triển trên máy của chính họ, cùng các trình chạy CI và container chỉ chạy một bộ kiểm thử.

Chuỗi npm là phần rõ ràng nhất của hồ sơ vì dấu thời gian của registry là công khai và nhiều công ty đã ghi nhận chúng một cách độc lập. Bài viết của Socket và dòng thời gian của SafeDep khớp nhau đến từng phút: 0.1.21 lúc 02:23:04, 0.1.22 lúc 03:45:44, 0.1.23 lúc 03:49:20, 0.1.24 lúc 04:33:30 và 0.1.25 lúc 04:36:58. Các phiên bản 0.1.22 và 0.1.24 đều sạch — Socket nói rằng chúng khớp với 0.1.20 ngoại trừ chuỗi phiên bản — và payload quay trở lại ba phút rưỡi sau mỗi bản trong số đó.

Sự nhảy vọt về kích thước chính là dấu hiệu. Socket đo 0.1.20 ở khoảng 272 KB khi giải nén và 0.1.21 ở 43,6 MB, vì các bản phát hành độc hại đã đóng gói sáu tệp nhị phân nền tảng liên kết tĩnh, mỗi tệp khoảng 7,4 MB. PyPI cho thấy cùng một mô hình: wheel 2.0.34 có dung lượng 19.201.772 byte so với 951.210 của 2.0.33, theo Socket.

Lúc 04:17 UTC — mười sáu phút trước bản sạch 0.1.24 và mười chín phút trước khi payload được trả về dưới dạng 0.1.25 — một người dùng GitHub có tên omeridel đã mở issue #173 trên kho lưu trữ plugin, với tiêu đề "Các phiên bản độc hại 0.1.21 và 0.1.23 đã được phát hành lên npm — token phát hành có vẻ đã bị xâm phạm." Issue nêu rằng 0.1.23 khi đó là tag mới nhất, rằng cả hai phiên bản đều không khớp với bất kỳ commit hoặc tag nào trong kho lưu trữ, và rằng commit hợp pháp gần nhất có ngày là 14 tháng 8. Tính đến ngày 26 tháng 10 năm 2026, issue này vẫn mở và không có bình luận nào từ phía những người bảo trì.

A self-built HTML card headed 'Supply chain, 23 September 2026, all times UTC', titled 'Four and a half hours on npm and PyPI', subtitled 'Each malicious release was the registry's newest version while it was live'. Nine rows, each with a time, an event, a detail and a status chip: 00:48 attacker branch first pushed, pipeline; 02:23 npm 0.1.21 published, 43.6 MB unpacked up from 272 KB, malicious; 03:17 MemOS commit b52958f, six sckit binaries and a CI token stealer, malicious; 03:45 npm 0.1.22 published, matches 0.1.20 apart from version strings, clean; 03:49 npm 0.1.23 published, payload restored three minutes later, malicious; 04:17 GitHub issue 173 filed, disclosure; 04:33 npm 0.1.24 published, clean again and the latest tag for three minutes; 04:36 npm 0.1.25 published, payload back and this one takes the latest tag, malicious; 05:25 PyPI MemoryOS 2.0.34, 19.2 MB wheel against 951 KB in 2.0.33, malicious. A footer reads 'Timestamps from Socket and SafeDep, which agree to the minute. Sizes from Socket.' The OrcaRouter logo is composited in the bottom-right corner.

Sckit làm gì khi gói đã được tải

Không gói nào sử dụng hook cài đặt, đó là lý do tại sao lời khuyên thông thường về --ignore-scripts không áp dụng. Phân tích của StepSecurity về biến thể npm mô tả một tệp mới, lib/sckit.js, xuất một trình khởi chạy mà mã khởi động và mã truy hồi bộ nhớ hiện có của plugin nhập vào và gọi. Khi khởi động, nó tạo một tiến trình tách rời chạy tệp .sckit/<os>-<arch>/sckit với stage0 --config64 và toàn bộ môi trường của tiến trình cha; khi truy hồi, nó làm điều tương tự và truyền lời nhắc người dùng đã được lược bỏ qua một biến môi trường có tên SCKIT_EVENT_TEXT. Socket nói thẳng hệ quả: do đó tệp nhị phân chạy lại sau mỗi lần truy hồi.

Biến thể PyPI ngắn hơn và trên thực tế khó tránh hơn. Socket phát hiện rằng memos/log.py gọi một hàm kích hoạt bên trong memos/_stage0.py khi logging được cấu hình, rằng 149 mô-đun gọi logger ở cấp mô-đun, và do đó chỉ cần import thông thường mô-đun memos là đủ để khởi động payload một lần cho mỗi tiến trình. Phân tích của StepSecurity về cùng gói này hoàn toàn mang tính tĩnh — nó không cài đặt, import, build hay thực thi gói đó.

Phạm vi thu thập là toàn bộ thư mục home. SafeDep liệt kê gốc kiểm kê là $HOME và các tệp mục tiêu là .npmrc, .pypirc, .git-credentials, .netrc, id_rsa, id_ecdsa, id_ed25519, .vault-token, msal_token_cache, access_tokens.json và access_tokens.db, cùng với các biến môi trường có tên chứa token, secret, password, API key hoặc database URL, cùng với các định dạng token được nhận diện cho GitHub, GitLab, npm, PyPI, Hugging Face, Slack, Stripe, AWS và SendGrid. Bản ghi OSV cho hai gói, MAL-2026-16476 cho npm và MAL-2026-16475 cho PyPI, mô tả cùng danh sách tệp và bổ sung rằng giao thức command-and-control sử dụng CBOR, trao đổi khóa X25519 và XChaCha20-Poly1305, với các lease được ký và các mô-đun được phân phối trong lúc chạy — vì vậy nội dung của các mô-đun chưa bao giờ được quan sát, chỉ có trình tải nạp tải chúng.

Hai chi tiết quyết định những gì người phòng thủ vẫn có thể khôi phục được. Tệp nhị phân chứa các thủ tục tự xóa có tên scheduleSelfDelete và deleteExecutable, theo bản ghi OSV, đó là lý do hướng dẫn là phải săn tìm dấu vết quy trình và mạng thay vì tệp. Và phiên bản 0.1.25 đã thêm lib/tls-trust.js, tệp này đặt SSL_CERT_FILE trỏ tới một tệp chứng thư gốc gồm 145 chứng chỉ đi kèm trên các hệ thống Linux tối giản, theo StepSecurity — một bản sửa nhằm giúp lưu lượng của chính nó hoạt động trên các container không có kho tin cậy hệ thống.

A generated abstract illustration on a dark navy field: at left, a dim cyan isometric tree of folders, several leaves carrying small grey key and badge silhouettes; from those keys a cluster of amber threads lifts away, braids into one bright cord and runs right through a narrow vertical cyan gateway frame that carries an amber keyhole, toward three small red-orange receivers with faint pulse rings on the far right. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

Quy trình phát hành chính là lối vào.

Bản tái dựng của SafeDep là tường thuật chi tiết nhất về truy cập ban đầu, và nó chỉ ra GitHub Actions thay vì mật khẩu registry bị đánh cắp. Trong khoảng 00:48 và 02:03 UTC, một tài khoản GitHub hoạt động dưới tên Memtensor-AI đã tạo, push và xóa một nhánh có tên sc/release-0.1.21-20260922-cloud năm lần. Commit 9b97ec6 đã sửa script workflow .github/scripts/validate-release-confirmation.mjs để nó nối thêm một giá trị BASH_ENV vào $GITHUB_ENV, khiến các bước shell không tương tác sau đó source một tệp do kẻ tấn công cung cấp sckit-publish-bridge.sh trước khi chạy các lệnh của riêng chúng. Bridge đó đã kiểm tra tên gói và thời gian chờ 150 giây của bước publish, gọi bộ thu thập token với NPM_TOKEN hoặc NODE_AUTH_TOKEN, tự xóa chính nó và thoát với mã 1 — vì vậy bước publish đã thất bại sau khi token đã bị lấy. Bản phát hành npm độc hại đầu tiên xuất hiện hai mươi phút sau lần push nhánh cuối cùng.

Đường PyPI đã dùng cùng thủ thuật đó nhắm vào một pipeline khác. SafeDep báo cáo rằng thẻ v2.0.34 trỏ tới những commit không được ký và không nằm trên main, và rằng commit b52958f, được ghi tác giả là "MemTensor CI Review", đã thêm sáu tệp nhị phân, một bộ nạp Python và một backend build tùy chỉnh có tên sckit_poetry_build. Backend đó đã ghi một BASH_ENV trỏ tới _pypi_bridge.sh vào $GITHUB_ENV; cầu nối chỉ hoạt động bên trong trình bao bọc tải lên twine, đã tải một chỉ mục đã ký từ máy chủ skyleen[.]fr, xác minh một emitter bằng một triển khai Ed25519, in ra một dòng đánh dấu, bỏ đặt mật khẩu tải lên và thoát mà không tải lên bất cứ thứ gì. Khoảng hai giờ sau, commit 41bf5c7 đã gỡ bỏ lệnh gọi đó với thông điệp "chore: allow native PyPI upload [skip ci]", thẻ đã bị xóa và được tạo lại trong vòng mười giây, và việc tải lên PyPI diễn ra 62 giây sau đó. SafeDep coi commit đầu tiên là một lần chạy đánh cắp token và commit thứ hai là lần chạy đã để quy trình làm việc của chính MemTensor build và phát hành gói độc hại bằng token thật của dự án.

Không phải mọi tài khoản đều khớp ở điểm này. Socket nhận thấy rằng các bản phát hành npm đến từ cùng tài khoản npm với các phiên bản hợp pháp trước đó và thiếu gitHead, điều mà họ hiểu là dấu hiệu cho thấy chúng không được tạo bởi CI của dự án, và tuyên bố rằng họ không thể xác nhận cách kẻ tấn công có được quyền phát hành. SC Media, khi đưa tin về phát hiện của Socket vào ngày 24 tháng 9, đã rút ra cùng suy luận về khả năng tài khoản bị xâm phạm. Hai phiên bản đồng ý rằng thông tin xác thực phát hành đã bị lấy từ pipeline phát hành và khác nhau về cách chính artefact npm được tạo ra; không ai đã công bố nhật ký quy trình làm việc, vì API Actions của GitHub cho thấy không có lần chạy nào sau ngày 7 tháng 9 và SafeDep suy đoán rằng các bản ghi đã bị xóa. Cách tài khoản Memtensor-AI có được quyền push ngay từ đầu là điều chưa rõ trong cả hai phiên bản; SafeDep cho rằng một token tài khoản bị đánh cắp là khả năng cao nhưng chưa được xác nhận.

Đã xác lập, được suy ra và vắng mặt

Mức độ tin cậy của hồ sơ là A và không bị tranh cãi, điều này đáng để nói cho chính xác, bởi vì sự chắc chắn gắn với những gì đã được công bố chứ không phải với những gì nó đã làm.

• Đã xác định: nội dung của bốn tạo tác, được tái dựng bằng phân tích tĩnh tại Socket, StepSecurity và SafeDep; thời gian xuất bản trên npm và thẻ mới nhất trên 0.1.25; sự nhảy vọt về kích thước trong cả hai hệ sinh thái; các commit, thẻ và lịch sử nhánh trong hai kho lưu trữ; hạ tầng skyleen[.]fr và các mã định danh chiến dịch cloud-openclaw-semi-nuclear và memos-semi-nuclear; và cấu hình của payload, vốn hết hạn vào ngày 22–23 tháng 10 năm 2026 theo Socket và SafeDep.

• Suy luận: rằng công cụ được viết với sự trợ giúp của một mô hình ngôn ngữ, điều mà SafeDep nói trực tiếp và gọi là một suy luận; và rằng các token phát hành bị đánh cắp được dự định tái sử dụng, điều mà chuỗi kênh của cấu hình — "exact-ref-one-use-NPM_TOKEN" — ủng hộ nhưng không chứng minh.

• Chưa được xác lập: kẻ tấn công là ai; liệu có bản sao nào của sckit từng được thực thi bên ngoài sandbox hay không; liệu có thông tin xác thực nào rời khỏi một máy chủ hay không; liệu có lời nhắc nào được nhập vào một tác nhân OpenClaw đã đến được tay kẻ tấn công hay không; và liệu có gói hạ nguồn nào đã được phát hành lại hay không. Cả Socket và StepSecurity đều đã thực hiện phân tích tĩnh, và StepSecurity tuyên bố rằng không có tiến trình nào được chạy, không có truyền bí mật nào, không có rò rỉ dữ liệu thành công nào, không có cài đặt workflow nào và không có thêm gói nào được phát hành được quan sát thấy trong phân tích của mình.

Khoảng trống đó là lý do hồ sơ lưu trữ ghi nhận sự cố này với mục tổn hại thực sự được đánh dấu là false. Mức độ phơi nhiễm là có thật và rộng — bất kỳ ai đã cài đặt phiên bản bị ảnh hưởng đều được khuyến cáo coi máy chủ là đã bị xâm phạm — nhưng tổn hại, theo nghĩa một thông tin đăng nhập được chứng minh là đã bị sử dụng hoặc một hệ thống được chứng minh là đã bị truy cập, chưa được bất kỳ công ty điều tra nào trong bốn công ty ghi nhận.

A self-built HTML card headed 'What the record supports', titled 'Four investigating firms, no confirmed victim', subtitled 'Socket, StepSecurity, SafeDep and Aikido documented the same four artefacts on 23 September 2026'. The left column, headed 'Established by static analysis', lists: four malicious releases, npm 0.1.21, 0.1.23 and 0.1.25 and PyPI MemoryOS 2.0.34; one implant, the same stripped Go binary sckit in all four; the publish window 02:23 to 05:25 UTC with 0.1.25 tagged latest; package growth from 272 KB to 43.6 MB on npm and 951 KB to 19.2 MB for the PyPI wheel; six builds per package for Linux, macOS and Windows on amd64 and arm64; collection scoped to the whole home directory across registry, source-control, cloud, Vault and SSH secrets; exfiltration to servers under skyleen[.]fr; and OSV tracking as MAL-2026-16476 and MAL-2026-16475. The right column, headed 'Not established', lists: the attacker's identity; how Memtensor-AI obtained push access; whether any copy ever executed outside static analysis; whether a stolen secret reached the attacker; whether any prompt text was received; and whether any downstream package was republished. A footer reads 'Archive classification for this record: incident, severity high, confidence A, real harm false.' The OrcaRouter logo is composited in the bottom-right corner.

Con sâu chưa từng được thấy lây lan

Các tệp nhị phân không chỉ chứa một trình đánh cắp. SafeDep liệt kê các hàm có tên recursivePublish, prepareRemoteNode, prepareRemotePython và prepareRemoteWorkflow, cùng với một mẫu GitHub Actions nhúng được kích hoạt khi push và khả năng ghi tệp quy trình làm việc có tên runtime-update.yml vào các kho lưu trữ mà implant có thể truy cập. Socket đã tìm thấy các chuỗi liên quan đến việc mã hóa tệp kê khai gói và cài đặt tệp kho lưu trữ, đồng thời đánh giá rằng các tệp nhị phân có thể có khả năng phát hành lại các gói bằng token registry bị đánh cắp.

Đó là một thiết kế sâu máy tính. Đó không phải là một con sâu từng được quan sát là đang hoạt động. StepSecurity không tìm thấy bằng chứng nào cho thấy logic đó từng được dùng để lây lan, và ghi chú nghiên cứu ngày 25 tháng 9 của Cloud Security Alliance đánh giá khả năng này là tiềm năng tự lây lan hạn chế chứ không phải hành vi sâu đã được xác nhận. Một số hãng tin mô tả vụ việc là con sâu chuỗi cung ứng đầu tiên nhắm vào hạ tầng bộ nhớ của tác nhân AI; cách mô tả đó là hợp lý như một phát biểu về thiết kế, và các báo cáo không ủng hộ cách mô tả đó như một phát biểu về những gì đã xảy ra.

Điều gì đã thay đổi sau đó?

Các registry đã được dọn dẹp ngay trong cùng ngày. Khi kiểm tra vào ngày 26 tháng 10 năm 2026, metadata của gói npm không còn liệt kê 0.1.21, 0.1.23 hoặc 0.1.25 trong số các phiên bản của gói, thẻ latest trỏ đến 0.1.24 và gói được sửa đổi lần cuối lúc 11:53 UTC ngày 23 tháng 9. Hai dist-tag bất thường vẫn còn được gắn — clean-inverse-0-1-23 trỏ đến 0.1.22 và clean-inverse-0-1-25 trỏ đến 0.1.24 — phản ánh hai bản phát hành sạch đã tạm thời ngắt quãng các bản độc hại. Trên PyPI, MemoryOS 2.0.34 đã biến mất và bản phát hành mới nhất là 2.0.33, được tải lên vào ngày 3 tháng 9 năm 2026; đã không có thêm bản phát hành PyPI nào trong bảy tuần kể từ đó.

Điều chưa thay đổi là bản tường trình công khai của dự án. Kho lưu trữ không liệt kê bất kỳ khuyến cáo bảo mật nào, vấn đề trên GitHub từ 04:17 ngày xảy ra sự cố vẫn đang mở và chưa được trả lời, và không có bản báo cáo nào được khảo sát ở đây trích dẫn phát ngôn từ MemTensor hay OpenClaw. Cả hai gói độc hại đều không mang chứng thực nguồn gốc, điều mà SafeDep lưu ý đã loại bỏ tín hiệu duy nhất cho thấy các artefact được tạo ra từ một commit ngoài dự kiến.

Phản hồi hiện có nằm ở phía phát hiện: StepSecurity đã thêm các miền chỉ huy và điều khiển skyleen[.]fr vào danh sách chặn toàn cầu của mình, và hai gói được theo dõi trong OSV với mã MAL-2026-16476 và MAL-2026-16475.

Nếu một phiên bản bị ảnh hưởng đã được cài đặt

Hướng dẫn của Socket là nghiêm ngặt nhất và đơn giản nhất: nếu bất kỳ phiên bản nào trong danh sách đã được tải hoặc nhập, hãy coi máy chủ đó là đã bị xâm phạm, bao gồm cả các CI runner và container chỉ chạy kiểm thử. Các bước cụ thể mà bốn công ty cùng thống nhất:

Gỡ bỏ gói và ghim vào một phiên bản sạch — npm 0.1.20, PyPI 2.0.33. StepSecurity lưu ý rằng phân tích của mình chưa thiết lập được đường cơ sở PyPI sạch, trong khi cả SafeDep và SC Media đều chỉ ra 2.0.33 là bản phát hành tốt cuối cùng.

• Tìm dòng lệnh của tiến trình, vì tệp thực thi có thể tự xóa chính nó: sckit stage0 --config64, và biến môi trường SCKIT_EVENT_TEXT.

• Xóa các thư mục trạng thái ~/.openclaw/.cache/runtime và ~/.memos/.cache/runtime, và kiểm tra các kho lưu trữ để tìm runtime-update.yml—một quy trình làm việc không mong đợi—hoặc các thư mục .sckit/ không mong đợi.

• Xoay vòng mọi thông tin xác thực có thể truy cập được từ thư mục home và môi trường tiến trình, từ một máy sạch: npm, PyPI, GitHub, GitLab, AWS, Vault, SSH, Hugging Face, Slack, Stripe và SendGrid, cùng mọi giá trị .env. Token registry và token quản lý mã nguồn phải được xoay vòng trước.

• Xem xét các bản phát hành của các gói của chính bạn, phòng trường hợp một token xuất bản bị đánh cắp đã được dùng để phát hành các phiên bản mà bạn không viết.

Chặn skyleen[.]fr và các tên miền phụ của nó, đồng thời đọc nhật ký lưu lượng egress ngược về ngày 23 tháng 9.

• Coi mọi lời nhắc hoặc bí mật được dán đã đi qua plugin trong khi nó đang hoạt động là đã bị lộ. Đây là phần của sự cố riêng liên quan đến bộ nhớ tác nhân: implant không cần phải trích xuất lén bản ghi, vì bản ghi đã được trao cho nó mỗi lần truy hồi.