Nỗ lực cải thiện bảo mật chuỗi cung ứng của một nhà phát triển cho một trong những gói JavaScript phổ biến nhất đã gây ra tranh luận về thực tiễn đóng góp mã nguồn mở và phản ứng của người duy trì dự án. Sự việc này làm nổi bật căng thẳng ngày càng tăng giữa những người đóng góp tập trung vào bảo mật và những người duy trì dự án phải đối phó với làn sóng đóng góp tự động và chất lượng thấp.
Cải tiến bảo mật phản tác dụng
Nhà phát triển đã cố gắng thêm tính năng provenance gói vào lodash, một thư viện tiện ích JavaScript được sử dụng rộng rãi với hàng chục triệu lượt tải xuống mỗi tuần. Package provenance tạo ra các tuyên bố đã ký trong quá trình xây dựng, giúp phát hiện các gói độc hại bỏ qua quy trình CI/CD thích hợp. Mặc dù lodash rất phổ biến, nhưng nó đã không được cập nhật trong hơn năm năm và thiếu tính năng bảo mật cơ bản này.
Người đóng góp đã dành nhiều giờ để reverse-engineer quy trình xây dựng của lodash và thành công tạo ra một workflow GitHub Actions hoạt động được. Tuy nhiên, sau khi mở và nhanh chóng đóng một pull request chưa hoàn thiện, họ thấy mình bị chặn hoàn toàn khỏi repository - không thể tạo issue, theo dõi repo, hoặc đóng góp bằng bất kỳ cách nào.
Package provenance: Một tính năng bảo mật tạo ra bằng chứng mật mã về cách thức và nơi một gói phần mềm được xây dựng, giúp người dùng xác minh tính xác thực của nó.
Tình trạng dự án Lodash
- Không có bản phát hành mới nào trong hơn 5 năm
- Được tải xuống hàng chục triệu lần mỗi tuần
- Nhánh chính: không có commit nào trong 9 tháng
- Không có quy trình CI/CD hiện tại để xuất bản
- Nằm trong top 10 gói npm không có nguồn gốc xác thực
Cộng đồng chia rẽ về quyết định chặn
Việc chặn này đã chia rẽ cộng đồng mã nguồn mở. Một số người coi đây là phản ứng thái quá với nỗ lực cải thiện bảo mật chính đáng. Những người khác cho rằng việc nhảy thẳng vào thay đổi quy trình xây dựng quan trọng mà không thảo luận trước đó gây ra cảnh báo đỏ, đặc biệt là trong bối cảnh gần đây có sự gia tăng các đóng góp do AI tạo ra nhắm vào các repository phổ biến.
Ai đó mà tôi không biết, không có lịch sử đóng góp cho dự án của tôi, ngay lập tức nhảy vào packaging, distribution, provenance thực sự khiến tôi nghi ngờ về ý định của họ.
Thời điểm diễn ra trong Hacktoberfest - một sự kiện kéo dài một tháng khuyến khích đóng góp mã nguồn mở - có thể đã góp phần vào sự cảnh giác của người duy trì về các đóng góp tự động hoặc hời hợt.
Việc Áp Dụng Package Provenance
- Chỉ có 2 trong số 10 gói npm phổ biến nhất sử dụng provenance
- Gói TypeScript thiếu provenance mặc dù rất phổ biến
- Việc triển khai chỉ cần các cờ npm publish đơn giản:
--provenance --access public - Giúp phát hiện các gói bỏ qua kiểm tra bảo mật CI/CD
Thách thức rộng lớn hơn của việc duy trì mã nguồn mở
Sự việc này phản ánh một vấn đề lớn hơn mà các dự án mã nguồn mở phổ biến đang đối mặt. Những người duy trì phải đấu tranh để cân bằng việc chào đón những người đóng góp chính đáng trong khi lọc ra các submission chất lượng thấp, spam do AI tạo ra, và những thay đổi có khả năng độc hại. Người duy trì lodash trước đó đã tuyên bố phá sản issue vào năm 2023, đóng nhiều issue mở để bắt đầu lại từ đầu.
Việc thiếu giao tiếp làm trầm trọng thêm vấn đề. Không có lời giải thích cho việc chặn, những người đóng góp không thể học hỏi từ sai lầm hoặc làm rõ ý định. Điều này tạo ra một chu kỳ mà các nhà phát triển có ý tốt trở nên nản lòng trong khi những người duy trì cảm thấy choáng ngợp bởi sự chú ý không mong muốn.
Nhà phát triển đã điều chỉnh cách tiếp cận của mình, lên kế hoạch mở các issue thảo luận trước khi gửi thay đổi code để đánh giá sự quan tâm của người duy trì. Mặc dù mục tiêu cải thiện bảo mật vẫn hợp lệ, kinh nghiệm này chứng minh rằng ngay cả những đóng góp có lợi cũng cần được giới thiệu cẩn thận trong bối cảnh mã nguồn mở phức tạp ngày nay.
Tham khảo: On Being Blocked From Contributing to lodash
