Một lỗ hổng trong ngôn ngữ lập trình Python đã bị bỏ qua trong 15 năm giờ đây đang được chú ý trở lại khi nó có khả năng ảnh hưởng tới 350.000 repo mã nguồn mở và có thể dẫn tới thực thi code tùy ý.
Được tiết lộ vào năm 2007 và được gắn mã CVE-2007-4559, lỗ hổng bảo mật này chưa bao giờ nhận được bản vá, biện pháp giảm thiểu duy nhất được cung cấp chính là một cập nhật tài liệu cảnh báo nhà phát triển về rủi ro.
Chưa được vá kể từ năm 2007
Lỗ hổng bảo mật này nằm trong gói tarfile của Python, trong code sử dụng hàm tarfile.extract() chưa được làm sạch hoặc các giá trị mặc định tích hợp của tarfile.extractall(). Đây là một lỗi truyền qua đường dẫn cho phép hacker ghi đè các file tùy ý.
Chi tiết kỹ thuật về CVE-2007-4559 được công khai kể từ khi báo cáo đầu tiên được đăng tải vào tháng 8/2007. Mặc dù không có báo cáo nào về việc lỗ hổng này bị khai thác trong các cuộc tấn công nhưng nó thể hiện một rủi ro trong chuỗi cung ứng phần mềm.
Đầu năm nay, trong khi điều tra một vấn đề bảo mật khác, CVE-2007-4559 đã được phát hiện lại bởi một nhà nghiên cứu tại Trelix, hãng cung cấp các giải pháp phát hiện và phản hồi mở rộng (XDR) là kết quả của sự hợp nhất giữa McAfee Enterprise và FireEye.
"Việc không viết bất cứ code an toàn nào để làm sạch file thành viên trước khi gọi tarfile.extract() tarfile.extractall() dẫn đến lỗ hổng truyền tải thư mục, cho phép hacker truy cập vào hệ thống file", Charles McFarland, nhà nghiên cứu lỗ hổng thuộc Nhóm Nghiên cứu Các mối đe dọa Nang cao của Trelix cho biết.
Lỗ hổng bắt nguồn từ thực tế là code trong hàm trích xuất thuộc mô-đun tarfile của Python tin cậy tuyệt ddooiss thông tin trong đối tượng TarInfo và tham gia đường dẫn được chuyển đến hàm trích xuất và tên trong đối tượng TarInfo.
Chưa đầy một tuần sau khi được công bố lại, một thông báo trên bảng theo dõi lỗi Python cho biết bản vá lỗi sắp được cập nhật kèm theo cảnh báo rằng có thể nguy hiểm khi trích xuất các bản lưu trữ từ các nguồn không đáng tin cậy.
Ước tính có 350.000 dự án bị ảnh hưởng
Phân tích tác động, các nhà nghiên cứu của Trelix phát hiện ra rằng lỗ hổng bảo mật này hiện có mặt trong hàng nghìn dự án phần mềm, cả mã nguồn mở và mã nguồn đóng.
Các nhà nghiên cứu đã rà soát một tập hợp 257 repo nhiều khả năng bao gồm code dễ bị tấn công và kiểm tra thủ công 175 trong số đó để xem liệu chúng có bị ảnh hưởng hay không. Điều này cho thấy 61% trong số chúng dễ bị tấn công.
Khi chạy kiểm tra tự động trên phần còn lại của repo, số lượng các dự án bị ảnh hưởng đã tăng lên 65%, cho thấy rằng đây là một vấn đề phổ biến.
Tuy nhiên, tập mẫu nhỏ kể trên chỉ đóng vai trò là cơ sở để đưa ra ước tính về tất cả các repo bị ảnh hưởng trên GitHub.
"Với sự hỗ trợ của GitHub, chúng tôi có được một tập dữ liệu lớn hơn nhiều, nó cho thấy 588.840 repo có bao gồm "import tarfile" trong code Python", Charles McFarland cho biết.
Áp dụng tỷ lệ 61% được xác định theo cách thủ công trước đó, Trelix ước tính rằng có hơn 350.000 repo dễ bị tấn công, nhiều trong số đó đã sử dụng bởi các công cụ machine learning (ví dụ: GitHub Copilot) để giúp các nhà phát triển hoàn thành dự án nhanh hơn.
Các công cụ machine learning thường dựa vào code từ hàng trăm nghìn repo để cung cấp các tùy chọn tự động hoàn thành. Nếu chúng cung cấp các đoạn code không an toàn, vấn đề sẽ lây lan sang các dự án khác mà nhà phát triển không hề hay biết.
Nhìn sâu hơn vào vấn đề, Trelix nhận thấy mã nguồn mở dễ bị tấn công bởi CVE-2007-4559 trải dài trong một số lượng lớn ngành công nghiệp.
Theo dự đoán, lĩnh vực phát triển, công nghệ web và machine learning là các ngành bị ảnh hưởng nhiều nhất theo thứ tự tương ứng.
Khai thác CVE-2007-4559
Trong một bài phân tích kỹ thuật mới được đăng tải, nhà nghiên cứu lỗ hổng Trelix, Kasimir Schulz, người phát hiện lại lỗ hổng, đã mô tả các bước đơn giản đề khai thác CVE-2007-4559 trong phiên bản Windows của Spyder IDE, một môi trường phát triển tích hợp đa nền tảng mã nguồn mở.
Các nhà nghiên cứu chỉ ra rằng lỗ hổng bảo mật này cũng có thể được khai thác trên Linux. Họ đã tìm ra cách để ghi file và thực thi code trong một thử nghiệm trên dịch vụ quản lý cơ sở hạ tầng công nghệ thông tin có tên Polemarch.
Ngoài việc hướng sự chú ý đến lỗ hổng và rủi ro mà nó gây ra, Trelix còn tạo ra bản vá cho 11.000 dự án. Các bản vá sẽ có sẵn trong một nhánh của repo bị ảnh hưởng. Sau đó, chúng sẽ được thêm vào dự án chính thông qua các pull request.
Do số lượng repo bị ảnh hưởng là rất lớn, các nhà nghiên cứu hy vọng rằng hơn 70.000 dự án sẽ nhận được bản vá trong vài tuần tới. Tuy nhiên, rất khó để đạt được mốc 100% vì cần sự chấp nhận của người quản lý repo.
Hiện tại, Python Software Foundation chưa đưa ra nhận xét gì về lỗ hổng CVE-2007-4559.