Tin tức

Claude Code xóa sạch hơn 48.000 file dự án chỉ trong 103 giây: Lời cảnh báo đắt giá về AI agent

Tóm tắt nhanh

  • Một lập trình viên chia sẻ sự cố nghiêm trọng khi trợ lý dòng lệnh Claude Code của Anthropic xóa sạch 48.218 file dự án đang hoạt động chỉ trong 103 giây.
  • Nguyên nhân kỹ thuật xuất phát từ việc script Python do AI tạo ra hiểu sai cơ chế Windows Directory Junctions, dẫn đến việc quét đệ quy và xóa nhầm toàn bộ thư mục dữ liệu gốc.
  • Toàn bộ Git object store (.git/objects, refs, logs) bị làm rỗng, khiến việc khôi phục qua lịch sử commit cục bộ hoàn toàn bất khả thi.
  • Vụ việc là bài học cảnh tỉnh quan trọng về việc kiểm soát quyền hạn, bắt buộc sử dụng sandbox và cơ chế backup từ xa khi triển khai các tác vụ tự động hóa bằng AI agent.

Trong khi làn sóng sử dụng các công cụ AI hỗ trợ lập trình dạng agentic đang bùng nổ, một sự cố mất dữ liệu nghiêm trọng vừa được ghi nhận trên cộng đồng Reddit r/ClaudeAI và nhanh chóng thu hút sự chú ý của giới bảo mật quốc tế. Một lập trình viên đã cấp quyền cho công cụ Claude Code (CLI agent do Anthropic phát triển) thực hiện tác vụ xây dựng lại bản sao (mirror) của dự án, nhưng kết quả nhận lại là thảm họa xóa sạch dữ liệu chỉ trong chưa đầy 2 phút.

Lỗ hổng Windows Junctions khiến script dọn dẹp quét nhầm dữ liệu gốc

Theo báo cáo chi tiết từ lập trình viên gặp nạn, sự cố diễn ra chính xác trong khung giờ từ 10:10:31 tối đến 10:12:14 tối (giờ ET), kéo dài vỏn vẹn 103 giây. Khi nhận yêu cầu làm mới bản mirror cho một tác vụ, Claude Code phát hiện script xây dựng sẵn không thể cập nhật trực tiếp tại chỗ. Agent này đã tự động đưa ra quyết định viết một script dọn dẹp bằng Python nhằm xóa các tập tin cũ rồi tạo lại từ đầu.

Tuy nhiên, cấu trúc thư mục trên máy tính Windows của người này có chứa 614 đường dẫn liên kết thư mục (Windows Directory Junctions) trỏ ngược về cây thư mục dự án chính (Dashboard tree). Script do Claude Code tạo ra sử dụng hàm os.walk(followlinks=False) với giả định rằng lệnh này sẽ ngăn không cho chương trình đi sâu vào các liên kết biểu tượng.

Thực tế trên Windows, hàm os.path.islink() trả về giá trị False đối với các Directory Junctions. Mặc dù script có thiết lập một lớp bảo vệ junction ở cấp thư mục gốc, nhưng toàn bộ các thư mục lồng sâu bên dưới vẫn bị quét như các thư mục thông thường. Nhật ký thực thi cho thấy script đã duyệt qua 55.550 file, 614 junctions và 1.808 thư mục. Sau khi trừ đi 7.332 file thuộc bản mirror cũ cần dọn dẹp, tổng cộng có tới 48.218 tập tin dự án thật đã bị xóa vĩnh viễn.

Kho lưu trữ Git bị làm rỗng khiến việc khôi phục trở nên bất khả thi

Điều tồi tệ hơn là phạm vi xóa của script không dừng lại ở mã nguồn mà lan sang cả thư mục quản lý phiên bản .git. Toàn bộ các thư mục quan trọng gồm .git/objects, refs và logs đều bị làm sạch. Khi lệnh git log không còn tìm thấy bất kỳ commit nào, hy vọng phục hồi dữ liệu từ lịch sử Git cục bộ đã bị dập tắt hoàn toàn.

Đáng chú ý, sau khi hoàn tất chuỗi thao tác hủy diệt, Claude Code đã in ra thông báo: “Craig — stop and read this. I broke something” (Craig — hãy dừng lại và đọc cái này, tôi đã làm hỏng một thứ gì đó) kèm bản kê chi tiết những gì vừa bị xóa. Lập trình viên thừa nhận sai sót khi không thường xuyên đẩy các commit lên kho lưu trữ từ xa như GitHub hay GitLab trong quá trình làm việc, khiến dữ liệu không còn bản sao lưu ngoại vi nào để cứu vãn.

Bài học an toàn và nguyên tắc cô lập môi trường khi dùng AI coding agent

Sự cố này phơi bày rủi ro cốt lõi của các mô hình AI agent: khi được trao quyền hoàn thành một mục tiêu, AI có thể tự ý lựa chọn một phương thức thực thi nguy hiểm mà người dùng không lường trước được. Với lập trình viên tại Việt Nam và trên toàn cầu đang ngày càng phụ thuộc vào các công cụ như Claude Code, Cursor hay Windsurf, một số nguyên tắc an toàn cần được thiết lập nghiêm ngặt:

  • Luôn chạy trong môi trường cô lập: AI agent chỉ nên được cấp quyền truy cập trong container Docker hoặc máy ảo sandbox, ngăn chặn quyền can thiệp trực tiếp vào hệ thống tệp tin máy chủ (host OS).
  • Không cấp quyền xóa tệp hàng loạt không kiểm soát: Thay vì lệnh xóa vĩnh viễn, các thao tác dọn dẹp nên được cấu hình chuyển tệp vào thùng rác hoặc thư mục tạm có kiểm tra chế độ chạy thử (dry-run).
  • Duy trì thói quen đồng bộ Git remote: Mọi nhánh làm việc cần được push định kỳ lên máy chủ từ xa có cấu hình bảo vệ nhánh, tránh phụ thuộc duy nhất vào kho Git cục bộ trên máy cá nhân.

THEO DÕI CÁC KÊNH CỦA TEKCAFE

BÀI VIẾT MỚI NHẤT

Bài viết liên quan