Ba nhà nghiên cứu của công ty khởi nghiệp bảo mật Hacktron AI — Harsh Jaiswal, Mohan Pedhapati và Rahul Maini — vào cuối tháng 7 đã dùng Claude Opus 5 của Anthropic để viết ra một chuỗi khai thác, đi từ diễn đàn nhà phát triển của OpenAI thẳng vào kho mã nguồn nội bộ của chính OpenAI. Nhóm công bố toàn bộ quá trình trên blog vào ngày 13/9, và trong tuần này The Wall Street Journal cùng The Information lần lượt đưa tin theo, khiến sự việc được chú ý rộng rãi hơn.
Toàn bộ chuỗi tấn công bắt đầu từ một tấm ảnh, điểm đến cuối cùng là kho mã chính của OpenAI, openai/openai. Nhóm nghiên cứu đã mở một pull request vô hại (số hiệu #1186742) bên trong kho mã này để chứng minh, không đọc bất kỳ dữ liệu nhạy cảm nào.
Một tấm ảnh HEIF xuyên thủng diễn đàn
Diễn đàn nhà phát triển của OpenAI, community.openai.com, chạy trên nền tảng Discourse. Thư viện xử lý ảnh mặc định của Discourse không nhận diện định dạng HEIF, nên khi có ảnh dạng này được tải lên, hệ thống sẽ chuyển cho ImageMagick xử lý, và ImageMagick lại gọi đến libheif để giải mã.
Vấn đề nằm ở libheif. Thư viện này có một lỗ hổng tràn bộ đệm heap, trong khi phiên bản 1.19.7 trong kho Debian lại chưa được vá lại bản vá bảo mật tương ứng. Dựa vào đó, nhóm nghiên cứu tạo ra một tấm ảnh HEIF độc hại, sau khi tải lên đã giành được quyền thực thi mã từ xa trên máy chủ diễn đàn. Theo Hacktron, các phiên bản libheif bị ảnh hưởng trải dài từ 1.19.7 đến 1.23.x, liên quan đến nhiều bản phân phối Linux.
Chiếm được máy chủ diễn đàn mới chỉ là bước đầu. Trên máy chủ này lưu trữ token xác thực của người dùng đã đăng nhập, trong đó có cả nhân viên OpenAI. Nhóm nghiên cứu phát hiện một số token của diễn đàn có thể dùng trực tiếp trên ChatGPT. Hacktron nhấn mạnh điều này trong bài blog:
"the vulnerability to escalate is not Discourse-specific. It is an OpenAI SSO issue"
Lỗ hổng dùng để leo thang quyền không thuộc về Discourse, mà là vấn đề của hệ thống đăng nhập một lần (SSO) của OpenAI.
Nhờ khe hở này, nhóm nghiên cứu đã chiếm được tài khoản ChatGPT và Codex của nhiều nhân viên. Một trong số đó có Codex được liên kết với tổ chức GitHub của OpenAI, nhóm nghiên cứu đã gửi một prompt cho Codex này, khiến nó tự mở pull request trong kho mã nội bộ. Theo Hacktron, các dịch vụ khác như Slack và email cũng được liên kết tương tự, nhưng họ không đụng đến.
Opus 4.8 không làm được, Opus 5 chỉ mất ba giờ
Phần được nói đến nhiều nhất trong bài blog là vai trò của mô hình. Lỗ hổng tràn bộ đệm trong libheif rất khó khai thác trong môi trường đã bật ASLR (address space layout randomization), nhóm đã thử nhiều lần với Claude Opus 4.8 trước đó nhưng không thành công.
"Opus 4.8 struggled across several sessions to produce a working exploit with ASLR enabled. Within hours of Opus 5's release, we gave it the same problem and it succeeded."
Opus 4.8 đã vật lộn qua nhiều phiên làm việc mà vẫn không viết ra được mã khai thác hoạt động được khi bật ASLR; vài giờ sau khi Opus 5 ra mắt, chúng tôi giao cùng bài toán đó cho nó, và nó đã thành công.
Theo mốc thời gian nhóm đưa ra, Opus 5 ra mắt ngày 24/7, và trong khoảng ba giờ, mô hình đã viết ra mã khai thác hoạt động được trên một máy ARM64 cục bộ, sau đó chuyển đổi để chạy trên môi trường x86-64 kết hợp jemalloc mà máy chủ Discourse sử dụng. Nhóm nghiên cứu để Claude chạy trong một vòng lặp tự động, liên tục thử nghiệm trên một thực thể Discourse Cloud do chính họ dựng lên; đến sáng hôm sau kiểm tra lại, nó đã giành được quyền thực thi mã và đọc được tệp /etc/hosts làm bằng chứng. Sau đó cùng một đoạn script này được dùng trên thực thể của OpenAI, và cũng có hiệu quả.
Từ lúc phát hiện đến khi xuyên thủng toàn bộ chuỗi mất khoảng 72 giờ. Hacktron cho biết toàn bộ đợt nghiên cứu này, được đặt tên "HEIF Heist", tiêu tốn chưa đến 3.000 USD tiền token.
Đây không phải lần đầu công ty này dùng Claude để viết mã khai thác. Trước đó họ từng công bố một bài tổng kết về việc dùng Claude Opus để viết khai thác lỗ hổng Chrome, khi đó kết luận là mô hình có thể hoàn thành phần lớn công việc nhưng các bước then chốt vẫn cần con người can thiệp. Lần này, với toàn bộ chuỗi từ diễn đàn đến kho mã, phần việc của con người đã giảm đi rõ rệt. Theo mô tả của nhóm, đoạn mã khai thác ở phần Discourse gần như do mô hình tự hoàn thành.
Bản vá và tiền thưởng
Tốc độ phản ứng của OpenAI không hề chậm. Sau khi nhóm nghiên cứu báo cáo vào ngày 25/7, OpenAI đã xác nhận vá lỗi trong khoảng 14 giờ, vào lúc 22:49 (UTC) cùng ngày. Phía Discourse xác nhận nhận được báo cáo vào Chủ nhật và đưa ra bản vá vào thứ Hai. Ngày 1/9, OpenAI đã chi trả 6.500 USD tiền thưởng lỗ hổng.
Hiện tại những gì công chúng biết được chỉ đến từ một phía là Hacktron. OpenAI có rà soát nhật ký truy cập của máy chủ diễn đàn này trước khi vá lỗi hay không, có ai khác từng khai thác cùng chuỗi lỗ hổng này hay không, token nhân viên đã bị vô hiệu hóa toàn bộ hay chưa — tính đến thời điểm đưa tin, những câu hỏi này vẫn chưa được công khai trả lời.
Với các nhà phát triển tại Trung Quốc, sự việc này có hai điểm đáng đối chiếu trực tiếp: một là các nhóm tự triển khai cộng đồng kiểu Discourse, Discuz, phiên bản ImageMagick và các thư viện giải mã trong chuỗi xử lý ảnh thường được cập nhật chậm hơn so với chương trình chính; hai là những công ty gộp diễn đàn, hệ thống ticket và sản phẩm chính vào cùng một hệ thống đăng nhập một lần — khi một trang biên bị xuyên thủng, token có thể đi xa đến đâu phụ thuộc vào phạm vi (scope) của SSO có được thu hẹp hay không.
Nguồn tham khảo: blog kỹ thuật của Hacktron AI, The Wall Street Journal, CocoLoop, The Information; blog của Hacktron xác nhận chuỗi khai thác, mốc thời gian 72 giờ, thời gian vá lỗi 14 giờ, tiền thưởng 6.500 USD và chi phí token 3.000 USD.