GitHub dùng tác nhân AI mở tìm ra 24 lỗ hổng Android

Kevin Stubbings, nhà nghiên cứu tại GitHub Security Lab, đăng bài ngày 28 tháng 9 kể lại cách nhóm dùng chính tác nhân AI bảo mật mã nguồn mở của GitHub để kiểm toán các ứng dụng Android, qua đó phát hiện và báo cáo tổng cộng 24 lỗ hổng. Công cụ được dùng có tên seclab-taskflow-agent, cốt lõi là một loạt "luồng tác vụ" (taskflow) viết bằng YAML, dẫn dắt mô hình ngôn ngữ lớn từng bước đọc mã nguồn, phân loại điểm vào, tìm lỗi rồi viết mã kiểm chứng.

Bộ luồng tác vụ này trước đây đã được dùng để kiểm toán mã nguồn nói chung, lần này được tùy biến riêng cho di động, bổ sung hai tệp mới là gather_mobile_entry_point_info.yaml và classify_application_local.yaml, lần lượt đảm nhận việc tổng hợp các điểm vào của ứng dụng và phân loại lỗ hổng.

Cách vận hành

Theo quy trình bài viết mô tả, người dùng chạy một script kiểm toán trong GitHub Codespaces, đợi vài phút để môi trường khởi tạo, rồi để tác nhân tự chạy. Với một kho mã cỡ trung bình, quá trình này mất khoảng một đến hai giờ. Kết quả được ghi vào một cơ sở dữ liệu SQLite; mở bảng audit_results và lọc ra các dòng có cột has_vulnerability được đánh dấu chính là những vị trí tác nhân cho là có vấn đề.

Các loại lỗ hổng mà luồng tác vụ bao quát xoay quanh những vấn đề kinh niên của Android: proxy nhầm lẫn (confused deputy) và broadcast không an toàn liên quan đến Intent, script chạy xuyên ứng dụng trong WebView, cầu nối JavaScript lộ ra cho trang web, path traversal, lỗi logic khi phân giải deep link, và rò rỉ cookie cùng token đăng nhập. Bài viết cho biết danh mục phân loại bao gồm tổng cộng 12 nhóm CWE.

Hai trường hợp được trình bày chi tiết

OsmAnd, ứng dụng bản đồ và điều hướng mã nguồn mở với hơn 10 triệu lượt tải. Tác nhân tìm thấy 3 vấn đề trong quy trình nhập cài đặt của ứng dụng, trong đó một lỗi cho phép một ứng dụng độc hại khác trên cùng điện thoại, không cần xin bất kỳ quyền nào, âm thầm nhập cấu hình thông qua tham số đính kèm trong Intent, từ đó theo dõi vị trí và lộ trình di chuyển của người dùng.

Ứng dụng Android của Wikipedia. Tác nhân phát hiện logic phân giải deep link có lỗ hổng: kẻ tấn công dựng một liên kết độc hại để đưa người dùng đến trang giả mạo, từ đó lấy được cookie, cuối cùng chiếm quyền tài khoản và có được token đăng nhập có hiệu lực dài hạn.

Stubbings viết trong bài rằng nhóm không ngờ mô hình lại hiểu chính xác đến vậy hành vi của các API liên quan đến bảo mật ở nhiều ngôn ngữ lập trình khác nhau, kể cả khi không được cung cấp mã nguồn của chính ngôn ngữ đó; mã minh chứng khái niệm (proof-of-concept) do tác nhân viết ra cũng chỉ cần chỉnh sửa rất ít là dùng được.

"LLMs are good at finding vulnerabilities but struggle at estimating severity."

Các mô hình ngôn ngữ lớn giỏi tìm lỗ hổng, nhưng lại kém trong việc ước lượng mức độ nghiêm trọng.

Những gì nó chưa làm được

Bài viết nói thẳng về các hạn chế. Mô hình thường xuyên báo cáo các vấn đề mức độ thấp dù prompt đã yêu cầu rõ không báo cáo loại này; với những lỗ hổng đã có biện pháp giảm thiểu, nó đánh giá sai mức độ nguy hại thực tế; các vấn đề ưu tiên luồng dữ liệu phức tạp thì nó không nhận ra được; để có một proof-of-concept đáng tin cậy, thường phải chạy lại nhiều lần, đôi khi còn phải gắn thêm debugger hoặc bổ sung prompt. Kết luận là mọi phát hiện đều cần được nhà nghiên cứu am hiểu bảo mật di động rà soát lại thủ công.

Về chi phí, việc chạy công cụ này cần có giấy phép GitHub Copilot, sử dụng hạn mức yêu cầu mô hình cao cấp. Bài viết lưu ý rằng các kho mã lớn sẽ tạo ra rất nhiều lệnh gọi công cụ, tiêu tốn không ít token, nhưng không nói rõ cụ thể dùng mô hình nào.

Đối với các nhà phát triển ở Trung Quốc

Luồng tác vụ và script đều được mở mã nguồn trên GitHub, các nhóm phát triển trong nước Trung Quốc có thể lấy về chỉnh sửa để kiểm toán ứng dụng Android của riêng mình, rào cản nằm ở giấy phép Copilot và việc gọi các mô hình ở nước ngoài. Bản thân luồng tác vụ chỉ là prompt và cách sắp xếp các bước viết bằng YAML, nên về lý thuyết có thể thay bằng mô hình nội địa, còn hiệu quả ra sao thì hiện chưa có dữ liệu đối chứng công khai.

Sự phân mảnh của hệ sinh thái Android khiến loại công cụ này càng hữu ích hơn ở thị trường Trung Quốc. WebView và cầu nối JavaScript trong các kho ứng dụng, nền tảng mini-app và các "siêu ứng dụng" (super app) của những hãng điện thoại khác nhau lại đúng là những nơi rơi vào các loại lỗ hổng mà danh mục này bao quát. GitHub cho biết bước tiếp theo là mở rộng luồng tác vụ sang ứng dụng web và desktop, đồng thời mở cho cộng đồng đóng góp.

Nguồn tham khảo: blog chính thức của GitHub, CocoLoop, kho mã nguồn mở của GitHub Security Lab; số lượng lỗ hổng, lượt tải OsmAnd và thời lượng mỗi lần kiểm toán đều lấy theo số liệu blog GitHub công bố.