
Google mất hai tháng để vá một lỗ hổng thực thi mã từ xa không cần xác thực trong hạ tầng tài liệu dành cho nhà phát triển. Theo The New Stack, DevSite dùng lại một bí mật máy khách OAuth để ký phiên làm việc. Người lấy được bí mật này có thể tạo cookie hợp lệ và khiến máy chủ thực thi mã Python.
Simon Köck, kỹ sư phần mềm tại Otark GmbH, phát hiện lỗ hổng trong DevSite. Đây là nền tảng dùng chung phía sau developers.google.com và một số trang tài liệu liên quan. Köck cho biết cùng một khóa ký có hiệu lực trên bảy tên miền của Google. Tuy nhiên, phần công bố của ông chỉ chứng minh khả năng thực thi mã trên developers.google.com.
Google xếp lỗ hổng ở mức S0, mức cao nhất trong thang đánh giá của công ty, và trả cho Köck 90.000 USD. Theo The New Stack, mức thưởng cơ bản là 75.000 USD cho lỗi thực thi mã từ xa S0 ở tầng ứng dụng thông thường. Chất lượng báo cáo giúp khoản thưởng được nhân hệ số 1,2.
Một bí mật OAuth được dùng cho hai nhiệm vụ
DevSite dùng bí mật máy khách OAuth vừa làm thông tin bí mật trong quy trình xác thực, vừa làm khóa ký phiên Flask. Sau khi tái tạo chữ ký cookie ngoại tuyến, Köck có thể tạo các phiên mà máy chủ chấp nhận là hợp lệ.
Cookie chứa một đối tượng OAuth2WebServerFlow đã được tuần tự hóa từ thư viện oauth2client của Google. Google đã ngừng khuyến nghị thư viện này và chuyển sang google-auth. Köck thay đối tượng đó bằng một tải trọng pickle độc hại, ký cookie giả rồi gửi nó tới luồng gọi lại OAuth. Máy chủ thực thi tải trọng khi giải tuần tự dữ liệu phiên.
Chuỗi khai thác cần ba điều kiện. Bí mật OAuth bị lộ trong cookie, cùng bí mật được dùng để ký cookie, còn dữ liệu bên trong được xử lý bằng cơ chế có thể thực thi mã. Loại bỏ bất kỳ mắt xích nào trong ba điều kiện này cũng có thể ngăn chuỗi tấn công hoàn tất.
Pickle biến cookie giả thành khả năng thực thi mã

Pickle của Python là cơ chế tuần tự hóa đối tượng và có thể thực thi mã khi giải tuần tự một tải trọng được tạo cho mục đích độc hại.
Trong DevSite, cookie mang đối tượng luồng OAuth đã tuần tự hóa. Google đồng thời dùng chính bí mật máy khách để ký cookie. Köck lấy bí mật, tạo cookie có chữ ký hợp lệ rồi đặt tải trọng pickle vào dữ liệu phiên. Tải trọng chạy khi luồng gọi lại OAuth xử lý cookie.
Köck xác nhận khả năng thực thi mã từ xa bằng hàm time.sleep() của Python và đo độ trễ phản hồi. Theo bản công bố kỹ thuật của Simon Köck, thời gian phản hồi khớp với độ trễ mà tải trọng yêu cầu. Ông không chạy lệnh hệ vỏ hoặc trích xuất dữ liệu nhạy cảm.

Quyền truy cập nội dung vẫn chưa rõ
Phương pháp xác minh này chứng minh mã đã chạy nhưng không cho biết tiến trình DevSite có những quyền nào. Köck cũng không thử sửa tài liệu, thay lệnh cài đặt hoặc đổi liên kết tải xuống. Google chưa công bố quyền của tiến trình hoặc khả năng truy cập các hệ thống phía sau, nên phạm vi thiệt hại tiềm tàng chưa được xác định.
The New Stack nêu khả năng kẻ tấn công có thể giành quyền sửa tài liệu dành cho nhà phát triển. Khi đó, tài liệu có thể phát tán lệnh hoặc tệp độc hại. Köck không kiểm chứng kịch bản này. Các hệ thống tự động có thể xử lý mã và dữ liệu nhạy cảm. Câu hỏi AI nên được cấp bao nhiêu quyền trong trung tâm vận hành an ninh phản ánh cùng một nguyên tắc: quyền truy cập quyết định mức độ thiệt hại khi một thành phần bị xâm phạm.
Google mất hai tháng để triển khai bản vá
Köck báo cáo lỗ hổng ngày 6 tháng 8. Google chấp nhận báo cáo vào ngày hôm sau. Công ty phê duyệt tiền thưởng ngày 27 tháng 8 nhưng đến ngày 7 tháng 10 mới triển khai bản sửa, theo The New Stack và bản công bố của Köck.
Google chưa giải thích vì sao quá trình khắc phục kéo dài hai tháng hoặc có áp dụng biện pháp giảm thiểu tạm thời hay không. Khoảng thời gian từ lúc nhận báo cáo đến khi triển khai bản vá kéo dài hai tháng. Trong thời gian đó, Google xếp lỗi ở mức S0 và phê duyệt khoản thưởng 90.000 USD.
Phạm vi xử lý sau bản vá cũng chưa rõ. Köck nói bảy tên miền bị ảnh hưởng nhưng chỉ công khai năm tên miền. Khuyến nghị của ông đề cập hai bí mật máy khách OAuth bị lộ, trong khi Google chưa xác nhận cả hai đã được thay hoặc các phiên hiện có đã bị vô hiệu hóa.
Google cũng chưa cho biết có phát hiện dấu hiệu khai thác nào trước ngày 7 tháng 10 hay không. Tại thời điểm bài gốc được xuất bản, cả Google và Köck đều chưa phản hồi yêu cầu bình luận của The New Stack.
Bài học từ một chuỗi lỗi có thể bị cắt ở ba điểm
Lỗ hổng DevSite hình thành từ ba quyết định kết hợp với nhau: đặt bí mật OAuth trong cookie, dùng cùng bí mật làm khóa ký phiên và giải tuần tự dữ liệu phiên bằng pickle. Việc tách riêng khóa ký, không để lộ bí mật trong cookie hoặc không dùng pickle với dữ liệu phiên đều có thể cắt đứt chuỗi khai thác.
Vụ việc cũng cho thấy mức thưởng cao không bảo đảm bản vá được triển khai nhanh. Google xếp lỗi ở mức nghiêm trọng nhất và phê duyệt 90.000 USD, nhưng vẫn mất hai tháng để đưa bản sửa vào hoạt động. Với các đội phải xử lý nhiều cảnh báo, bối cảnh giúp đội bảo mật xác định ưu tiên và tập trung vào những lỗ hổng có khả năng thực thi mã.
Hãy theo dõi Sine để cập nhật những vụ việc an ninh mạng đáng chú ý và tác động thực tế của chúng đối với đội ngũ công nghệ.


