- Wiz Research xác nhận rằng thông qua chuỗi lỗ hổng cô lập tenant trong SAP AI Core, việc thực thi mã bắt đầu từ một tác vụ huấn luyện AI hợp lệ có thể dẫn tới chiếm quyền dịch vụ và truy cập vào bí mật của khách hàng
- Đường tấn công là một chuỗi liên kết gồm vượt qua hạn chế mạng của Istio, rò rỉ token AWS trong cấu hình Loki, chia sẻ EFS không cần xác thực và truy cập Helm v2 Tiller không cần xác thực
- Với quyền đã chiếm được, họ có thể đọc và sửa image và artifact trong Docker Registry nội bộ của SAP, Google Container Registry và Artifactory nội bộ, đồng thời giành được quyền cluster-admin của cụm Kubernetes
- Kẻ tấn công tiềm năng có thể truy cập thông tin xác thực AWS, Azure, SAP HANA Cloud của khách hàng và các đầu ra AI riêng tư như mô hình, bộ dữ liệu và mã nguồn, hoặc đầu độc các artifact nội bộ
- SAP đã vá tất cả các lỗ hổng được báo cáo và xoay vòng các secret liên quan, còn Wiz cho biết không có vi phạm dữ liệu khách hàng
Vấn đề cô lập tenant bị phơi bày trong SAP AI Core
- Wiz Research đã nghiên cứu cô lập tenant ở các nhà cung cấp dịch vụ AI, và SAP AI Core là báo cáo thứ ba sau Hugging Face và Replicate
- SAP AI Core là một dịch vụ được quản lý cho phép người dùng phát triển, huấn luyện và chạy các dịch vụ AI trên tài nguyên đám mây của SAP
- Dịch vụ huấn luyện AI cần truy cập lượng lớn dữ liệu nhạy cảm của khách hàng, và SAP AI Core sử dụng khóa truy cập đám mây để truy cập dữ liệu nội bộ của khách hàng nhằm tích hợp với HANA và các dịch vụ đám mây khác
- Nghiên cứu bắt đầu bằng việc tạo một dự án AI từ tài khoản khách hàng SAP có quyền cơ bản, rồi tạo Kubernetes Pod bằng tệp Argo Workflow mà SAP AI Core cho phép
- Theo thiết kế, người dùng có thể chạy mã tùy ý bên trong Pod, nhưng trong môi trường ban đầu, sidecar proxy Istio hạn chế truy cập mạng nên việc quét mạng nội bộ gặp khó khăn
Bug #1: Vượt qua hạn chế của Istio
- Admission controller của SAP chặn các tùy chọn bảo mật nguy hiểm và cả nỗ lực chạy container bằng
root - Hai cấu hình không bị chặn đã dẫn tới việc vượt qua hạn chế mạng
shareProcessNamespacecho phép chia sẻ process namespace với container sidecar, từ đó có thể thấy cấu hình proxy Istio và token truy cập vào máy chủ Istiod trung tâmrunAsUservàrunAsGroupcho phép các UID khác ngoàiroot, nên có thể chạy bằng UID1337của Istio
- Bản thân Istio được loại trừ khỏi các quy tắc iptables của Istio, vì vậy các tiến trình chạy dưới UID
1337hoạt động không bị hạn chế lưu lượng - Sau đó, họ dùng token Istio để đọc cấu hình từ máy chủ Istiod và thu thập thông tin về môi trường nội bộ
Bug #2: Rò rỉ token AWS trong cấu hình Loki
- Họ phát hiện một instance Grafana Loki bên trong cụm và có thể xem toàn bộ cấu hình bằng cách gọi endpoint
/config - Phản hồi chứa secret AWS mà Loki dùng để truy cập S3
- Secret này cấp quyền truy cập bucket S3 của Loki, nơi chứa nhiều log dịch vụ AI Core và log Pod của khách hàng
- SAP cho rằng các log này không nhạy cảm
Bug #3: File người dùng bị lộ từ EFS chia sẻ không cần xác thực
- Trong mạng nội bộ, họ phát hiện 6 instance AWS Elastic File System, tức EFS, đang lắng nghe trên cổng
2049 - Các instance EFS này cho phép xem hoặc chỉnh sửa file mà không cần thông tin xác thực, chỉ cần có thể truy cập mạng
- Chỉ với các công cụ NFS mã nguồn mở, họ có thể tự do truy cập nội dung chia sẻ
- EFS lưu trữ lượng lớn dữ liệu AI như mã nguồn và bộ dữ liệu huấn luyện, được phân loại theo ID khách hàng
Bug #4: Helm Tiller không cần xác thực làm lộ Registry và Artifactory nội bộ
- Họ phát hiện dịch vụ Tiller, thành phần máy chủ của Helm v2, trong mạng nội bộ
- Tiller giao tiếp qua giao diện gRPC trên cổng
44134và mặc định bị lộ mà không có xác thực - Kết quả truy vấn Tiller cho thấy các secret có đặc quyền cao đối với SAP Docker Registry và máy chủ Artifactory
- Với quyền đọc, có thể đọc các image và bản build nội bộ để lấy bí mật thương mại và dữ liệu khách hàng
- Với quyền ghi, có thể đầu độc image và bản build để thực hiện tấn công chuỗi cung ứng vào dịch vụ SAP AI Core
Bug #5: Quyền ghi qua Helm Tiller dẫn tới chiếm toàn bộ cụm Kubernetes
- Tiller không chỉ cho phép đọc mà còn cho phép các thao tác ghi
- Vì lệnh
installnhận gói Helm và triển khai vào cụm Kubernetes, nhóm nghiên cứu đã tạo và cài một gói Helm độc hại để sinh ra Pod mới có quyềncluster-admin - Qua đó, họ giành được toàn quyền đối với cụm
- Mức quyền này đủ để truy cập trực tiếp vào Pod của khách hàng khác và đánh cắp dữ liệu nhạy cảm như mô hình, bộ dữ liệu và mã nguồn
- Ngoài ra còn có thể gây gián đoạn Pod của khách hàng, đầu độc dữ liệu AI và thao túng suy luận mô hình
- Với cùng quyền đó, họ cũng có thể xem ở dạng rõ ràng các secret của khách hàng vượt ra ngoài phạm vi SAP AI Core
- Tài khoản AI Core của nhóm nghiên cứu có secret tài khoản AWS để truy cập dữ liệu S3
- Có secret tài khoản SAP HANA để truy cập Data Lake
- Có secret tài khoản Docker Hub để pull image
- Trong cùng lần kiểm tra, họ cũng thấy khóa truy cập SAP cho Google Container Registry có tên
sap-docker-registry-secret; khóa này cấp cả quyền đọc và ghi
Phạm vi truy cập đã xác nhận và tác động tiềm tàng
- Các hành động có thể thực hiện thông qua chuỗi lỗ hổng gồm
- Đọc và sửa Docker image trong container Registry nội bộ của SAP
- Đọc và sửa Docker image của SAP trên Google Container Registry
- Đọc và sửa artifact trong máy chủ Artifactory nội bộ của SAP
- Giành quyền cluster-admin trên cụm Kubernetes của SAP AI Core
- Truy cập thông tin xác thực đám mây của khách hàng và các đầu ra AI riêng tư
- Kẻ tấn công tiềm năng có thể truy cập dữ liệu khách hàng và đầu độc các artifact nội bộ để mở rộng ảnh hưởng sang các dịch vụ liên quan và môi trường khách hàng khác
- Tất cả lỗ hổng đã được báo cho đội ngũ bảo mật SAP và SAP đã khắc phục; SAP cũng ghi nhận điều này trên trang ghi công cho các nhà nghiên cứu bảo mật
- Dữ liệu khách hàng không bị xâm phạm
Các vấn đề bộc lộ từ góc độ phòng thủ
- Tuyến phòng thủ chính là Istio ngăn truy cập mạng nội bộ, nhưng sau khi vượt qua rào cản này, nhiều tài sản nội bộ lại không yêu cầu xác thực bổ sung
- Mạng nội bộ bị đối xử như một vùng đáng tin cậy, khiến chỉ một lần vượt qua cũng có thể leo thang thành chiếm quyền dịch vụ
- Nếu các dịch vụ nội bộ được siết chặt hơn, tác động của cuộc tấn công có thể chỉ dừng ở một sự cố nhỏ thay vì chiếm toàn bộ dịch vụ
- Với dịch vụ được quản lý dựa trên Kubernetes, mặt phẳng điều khiển và tài nguyên tính toán của khách hàng được kết nối logic thông qua API, ID, tài nguyên tính toán chia sẻ và tách biệt mạng bằng phần mềm, nên có thể phát sinh bẫy cô lập tenant
- Huấn luyện AI về bản chất đòi hỏi thực thi mã tùy ý, nên cần các guardrail để bảo đảm mã không đáng tin cậy được tách biệt thích đáng khỏi tài sản nội bộ và các tenant khác
Lịch công bố
- 25 tháng 1 năm 2024: Wiz Research báo cáo phát hiện bảo mật cho SAP
- 27 tháng 1 năm 2024: SAP phản hồi và cấp số case
- 16 tháng 2 năm 2024: SAP vá lỗ hổng đầu tiên và xoay vòng các secret liên quan
- 28 tháng 2 năm 2024: Wiz Research vượt qua bản vá bằng 2 lỗ hổng mới và báo lại cho SAP
- 15 tháng 5 năm 2024: SAP phát hành bản sửa cho toàn bộ lỗ hổng được báo cáo
- 17 tháng 7 năm 2024: Công bố công khai
1 bình luận
Ý kiến trên Hacker News
Dù hiểu đây là một sản phẩm AI, nhưng lỗ hổng ở đây nằm ở cấu hình k8s
Nó không liên quan nhiều đến bản thân sản phẩm AI, hay AI training, machine learning, generative AI, mà gần hơn với bảo mật nền tảng đám mây kém
“Việc kẻ tấn công có thể chạy mô hình AI độc hại và quy trình huấn luyện” mới là nguyên nhân gốc rễ, và về bản chất đó là thực thi mã
Tôi hiểu đây là thứ được nghiên cứu/điều tra vì các sản phẩm AI đang lan rộng, nên cần phải cẩn thận với hạ tầng của chúng
Việc áp dụng bảo mật, biết rằng cần bảo mật, kiểm thử, hay không phát hành cho đến khi an toàn đều là việc thương hiệu đó phải làm với tư cách bên bán
Tôi muốn SAP phải nhìn lại thật nghiêm túc vì sao nghiên cứu của Wiz đã không bị chặn trước khi đạt tới quyền quản trị toàn bộ cụm
Tôi muốn biết phía SAP có nhận được cảnh báo về hoạt động này hay không, và có điều tra đúng cách không. Tôi cũng tò mò liệu SAP có chịu quy định nào buộc phải có hệ thống cảnh báo đầy đủ với hoạt động mạng đáng ngờ hay không, và liệu nghiên cứu lần này có thể là bằng chứng cho thấy họ đã không đáp ứng được điều đó hay không
Vấn đề là họ có thực sự tuân thủ hay chỉ để đó trong mấy cuốn binder trên kệ
Các chương trình bug bounty cũng thường yêu cầu những quy tắc như vậy trong phạm vi được phép. Vì nhà nghiên cứu thuộc một công ty bảo mật nên tôi đoán ở đây cũng vậy
Các nhà nghiên cứu thường viết trong bài rằng họ đã xin thêm phép ở mốc nào, nhưng không phải lúc nào cũng thế
Thật sốc khi vẫn có instance tiller đang chạy. Nó đã bị ngừng hỗ trợ từ năm 2020: https://helm.sh/blog/helm-v2-deprecation-timeline/
Ở đây là doanh nghiệp lớn và còn vướng một đợt migration hơi phức tạp để rời khỏi tiller, nhưng ngay cả khi không có những tình tiết tăng nặng như thế, phần mềm cũ vẫn rất dễ bắt gặp
Cái này thực sự rất tệ. Họ vận hành một cụm K8s duy nhất mà lại kỳ vọng có được đảm bảo đa thuê mạnh sao?
Các đám mây lớn đều dùng ranh giới máy ảo giữa khách hàng và các cụm K8s tách biệt. Microsoft vài năm trước cũng từng bị tương tự ở một sản phẩm function, nơi họ đã kỳ vọng K8s sẽ là ranh giới bảo mật chính
Ví dụ, trong bối cảnh chạy mã tùy ý như huấn luyện mô hình, tôi không rõ đa thuê K8s đóng vai trò gì
Theo tôi thấy thì vấn đề chính là đã tin tưởng toàn bộ giao tiếp mạng nội bộ một khi vào phía sau Istio, tức proxy/firewall. Dù vậy cũng có thể là tôi chưa hiểu đủ về cụm k8s
Đây là mục tiêu luôn dịch chuyển, nên kế hoạch làm nó an toàn bằng admission controller cũng không mấy ổn
Nếu muốn tính đến đa thuê mạnh với giả định có tenant đối kháng, có lẽ nên bắt đầu từ những thứ như VirtualClusters(https://github.com/kubernetes-sigs/cluster-api-provider-nest...). Mà đó còn chỉ là chuyện control plane, chưa đụng gì đến data plane
Ngay cả khi có thêm lớp đó thì tôi cũng không biết nó an toàn đến đâu. Ngay trong thế giới máy ảo cũng từng có những lỗ hổng VM escape vô lý suốt nhiều năm
Mỗi khách hàng một cụm riêng thì chi phí phi lý và cũng không tốt cho môi trường. Có thể chấp nhận nếu là sản phẩm premium đặt bảo mật lên hàng đầu, nhưng cụm riêng cho từng khách hàng về cơ bản là đang đốt tiền
Tôi cho rằng những công ty tự ý xâm nhập mạng chỉ để tìm lỗ hổng rồi làm nội dung blog thì nên bị truy tố
Bài này nghe giống một bài viết công kích được bọc mỏng dưới danh nghĩa công bố lỗ hổng. Câu “cảm ơn vì đã hợp tác” cũng nghe hơi giống tống tiền
Nhìn từ góc đó thì chẳng phải sẽ thấy khác hẳn sao?
Chỉ là thực tế pháp lý thường vận hành theo kiểu “nếu có hàng tỷ đô la thì luật không còn áp dụng nữa”
Có ai từng dùng Wiz chưa?
Đây có thể là tên lửa nhanh nhất trong số các công ty phần mềm doanh nghiệp. Chỉ sau 1,5 năm đã đạt 100 triệu USD ARR, và đến cuối năm thứ 3 thì chạm 350 triệu USD
https://www.wiz.io/blog/100m-arr-in-18-months-wiz-becomes-th...
Với tính năng đồ thị, nếu muốn thì bạn có thể truy vấn gần như bất cứ thứ gì trên toàn bộ các tài khoản
May là tôi đã thuyết phục được mọi người trong công ty cho chạy kiểm thử xâm nhập hằng năm của sản phẩm ngay trên môi trường production, và đưa toàn bộ hạ tầng production vào phạm vi kiểm thử
Trọng tâm có thể là một sản phẩm hay hệ thống cụ thể, nhưng mọi thứ đều nằm trong phạm vi. Bài kiểm thử đầu tiên đang diễn ra và chưa ai hét lên, nên hy vọng mọi chuyện ổn
Tôi cũng muốn biết có thể giới thiệu công ty pentest nào làm bài bản, vượt xa mức chỉ quét qua loa bằng Metasploit rồi thôi hay không
Nếu tôi đọc đúng, nghĩa là dữ liệu tài khoản của khách hàng bị lộ cho chính khách hàng đó xem à? Có vẻ chỉ một phần log là ngoại lệ
Nếu là nhà nghiên cứu bảo mật thì chắc cũng phải biết pixel hóa không phải là lựa chọn hay để che văn bản
https://www.bleepingcomputer.com/news/security/researcher-re...
Làm mờ hay pixel hóa có vẻ về cơ bản là không cần thiết, bất kể chúng có hiệu quả hay không. Dữ liệu bị che có vẻ là hostname cục bộ và một phần hash của image
Sửa: nhìn lại thì có vẻ chỗ thì làm mờ, chỗ khác thì pixel hóa