Họ đang đo gì
Bạn có nghĩ tới chuỗi cung ứng phần mềm không, và có phân biệt được “có trong package.json” với “thật sự chạy”.
Trả lời ngắn~30 giây
Bước đầu là xác định mức phơi nhiễm, không phải vá ngay: dịch vụ nào dùng, dùng phiên bản nào, và đường code có lỗ hổng có thật sự được gọi không. Rất nhiều CVE nghiêm trọng chỉ áp dụng cho một tính năng bạn không bật. Sau đó mới quyết định: vá ngay, hay giảm thiểu bằng cấu hình rồi vá theo lịch. Điều quyết định tốc độ là bạn đã có SBOM và quét dependency tự động từ trước hay chưa.
Giải thích sâu
Log4Shell là ví dụ đáng học vì nó cho thấy phần khó nằm ở đâu: rất nhiều đội mất nhiều ngày chỉ để trả lời câu hỏi “chúng ta có dùng log4j không”, vì nó là dependency gián tiếp qua ba tầng. Có SBOM sinh tự động lúc build biến câu hỏi đó từ nhiều ngày thành vài phút. Đó là khoản đầu tư chỉ đáng giá khi khủng hoảng xảy ra, nên nó luôn bị hoãn cho tới lần khủng hoảng đầu tiên.
Ngoài CVE còn một rủi ro khác đang tăng: gói bị chiếm quyền. Tài khoản tác giả bị lộ, một phiên bản mới có mã độc được phát hành, và mọi build chạy npm install với dải phiên bản rộng sẽ kéo về. Cách phòng thực dụng là ghim phiên bản bằng lockfile và dùng npm ci thay vì npm install trong CI, cộng với độ trễ có chủ đích trước khi nâng lên bản mới nhất — phần lớn gói độc bị phát hiện trong vòng vài giờ tới vài ngày.
Điều đáng nói ở mức senior là chính sách chứ không phải công cụ: ai được thêm dependency mới, tiêu chí là gì (số người bảo trì, tần suất phát hành, có bao nhiêu dependency gián tiếp), và bao lâu thì rà soát lại. Mỗi gói thêm vào là một bề mặt tấn công và một khoản nợ bảo trì; đội nào coi npm install là quyết định chứ không phải phản xạ sẽ có ít việc phải làm lúc 2 giờ sáng hơn nhiều.
Câu hỏi tiếp theo họ sẽ hỏi
?Nâng dependency tự động có an toàn không?
Với bản vá bảo mật thì nên tự động và merge nhanh. Với bản nâng minor/major thì nên gom theo lịch và có người xem, vì rủi ro chính lúc đó là hỏng chức năng chứ không phải bảo mật. Tách hai luồng này ra là cách cân bằng thực dụng.
Trả lời thế này là mất điểm
- Vá ngay mà không kiểm tra mức phơi nhiễm. Deploy vội lúc 2 giờ sáng cho một CVE không áp dụng là tự tạo sự cố thứ hai.
- Không biết dependency gián tiếp. Phần lớn CVE đến qua đường đó chứ không qua thứ bạn cài trực tiếp.