package.json - package-lock.json - typosquatting

Lỗi chính tả trong package.json cho phép một gói giả mạo gây ảnh hưởng đến tính toàn vẹn của gói. Pipeline

Một lỗi sai chỉ vài ký tự đã dẫn đến việc phát tán phần mềm độc hại.

Mọi chuyện bắt đầu từ một lỗi đánh máy. Trong cơn sốt cập nhật tính năng và hợp nhất yêu cầu kéo, ai đó đã gõ... @utils_core thay vì @utils-core vào package.jsonLỗi sai một ký tự đó không gây ra báo lỗi. Thay vào đó, nó âm thầm gây ra một vấn đề khác. gói phần mềm giả mạo độc hại trong lần tiếp theo CI/CD Chạy bằng cách tận dụng sự tin tưởng vào các phiên bản được ghim và tự động hóa. Chào mừng đến với thế giới của việc chiếm đoạt tên miền bằng lỗi chính tả trong mã nguồn mở.

Tấn công chiếm đoạt tên miền do lỗi chính tả: Phương thức tấn công lợi dụng lỗi của con người.

Typosquatting đúng như tên gọi của nó: các đối tượng xấu đăng ký các gói phần mềm có tên gần như giống hệt với các gói hợp pháp. Trong môi trường phát triển nhanh, điều này hiệu quả vì các nhà phát triển tin tưởng rằng... package.jsongói-lock.json Phản ánh đúng những gì họ mong đợi. Chỉ cần sai một ký tự thôi? Nó coi như không thể nhận ra trong bản so sánh yêu cầu kéo (PR diff).

NPM có lịch sử bị lợi dụng thông qua việc chiếm đoạt tên miền bằng lỗi chính tả. Các gói như crossenv thay vì xuyên môi trường or luồng sự kiện Các lỗ hổng bảo mật đã chứng minh mức độ hiệu quả của những phần mềm giả mạo này. Những gói phần mềm giả mạo này thường vượt qua các khâu kiểm duyệt đơn giản vì chúng trông giống hệt phần mềm thật và không gây ra lỗi ngay lập tức khi chạy.

Các loại bẫy thường gặp bao gồm:

  • Dấu gạch ngang so với dấu gạch dưới: lodash-core vs lodash_core
  • Số nhiều: yêu cầu vs yêu cầu
  • Các ký tự được thay thế: tốc hành thay vì thể hiện

Nơi mà package-lock.json trở thành điểm mù

Lập trình viên sửa lỗi chính tả. Hay ít nhất họ nghĩ vậy. Nhưng đến lúc này thì... gói-lock.json Hệ thống đã khóa chặt gói tin của kẻ tấn công. Và đây chính là nơi ẩn chứa rủi ro thực sự.

Không giống như package.json, được biên tập thủ công và được kiểm tra kỹ lưỡng hơn, gói-lock.json được tạo tự động bởi NPMDo đó, nó thường được coi như một thủ tục hình thức, bị bỏ qua hoặc chỉ được đề cập sơ qua. pull request các đánh giá. Không phải là hiếm khi các nhóm đánh dấu nó là "quá nhiều thông tin" hoặc tin tưởng nó một cách tuyệt đối mà không xem xét kỹ lưỡng.

Kẻ tấn công biết điều này. Chúng dựa vào nó. Một khi... gói độc hại được nhắc đến, nhờ một lỗi đánh máy trong package.json, package-lock.json ghi lại phiên bản đã được giải quyết. Ngay cả khi lỗi chính tả được sửa sau đó, mục nhập độc hại vẫn có thể tồn tại trừ khi tệp khóa được tạo lại một cách rõ ràng.

Tệ hơn nữa, việc ghim phiên bản, vốn được cho là để đảm bảo tính nhất quán, lại có thể phản tác dụng. Kẻ tấn công có thể đặt phiên bản cho gói phần mềm giả mạo của chúng giống hệt với gói phần mềm hợp pháp. Nếu... CI/CD Hệ thống tin tưởng một cách mù quáng vào các phiên bản được ghim, nó sẽ không phát hiện ra rằng nó đang cài đặt một gói có số phiên bản được biết là hợp lệ nhưng lại đến từ một nguồn khác, độc hại.

Sự kiên trì thầm lặng này chính là điều làm nên sự khác biệt. gói-lock.json Thật nguy hiểm. Nó đảm bảo quá trình biên dịch diễn ra một cách có tính xác định, đúng vậy, nhưng nó cũng đảm bảo rằng một gói phần mềm lỗi sẽ tồn tại trừ khi được phát hiện và loại bỏ thủ công.

CI/CDVị trí tấn công của phần mềm độc hại – package.json

Trong một điển hình CI/CD pipelineGói phần mềm độc hại không cần phải chờ đến khi chương trình chạy. Nó được phân giải và kích hoạt sớm hơn nhiều trong quy trình:

Độ phân giải phụ thuộc
pipeline Lấy các phiên bản phụ thuộc chính xác từ ppackage-lock.json, hiện bao gồm gói typosquatted do lỗi chính tả trong package.json.

Giai đoạn lắp đặt
Trong quá trình chạy npm ci, tất cả các thư viện phụ thuộc đều được cài đặt, bao gồm cả thư viện độc hại. Không có cảnh báo, không có nhắc nhở, chỉ là cài đặt âm thầm.

Thực thi tập lệnh sau khi cài đặt
Gói phần mềm giả mạo này bao gồm một tập lệnh chạy tự động sau khi quá trình cài đặt hoàn tất. Đây chính là điểm yếu.

Ví dụ mã giả:

if (installation_phase_active) { runHiddenPayload() }

Mô tả mã giả:
Trong giai đoạn cài đặt, nếu hook vòng đời sau cài đặt tồn tại, gói giả mạo sẽ kích hoạt logic ẩn của nó—thường là trước cả khi các bản dựng hoặc kiểm thử chạy. Điều này có thể bao gồm việc thực hiện các yêu cầu bên ngoài, chèn cửa hậu hoặc các hành động trái phép khác.

⚠️ Cảnh báo: Đoạn mã giả này chỉ mang tính chất minh họa và không được sử dụng trong môi trường thực tế.

Không có cảnh báo nào được kích hoạt. Không có gì bị lỗi. Môi trường đã bị xâm phạm, trước cả khi bạn... pipeline thậm chí còn đạt đến giai đoạn thử nghiệm.

Nhận ra sự khác biệt trước khi quá muộn

Một sai lầm thường gặp: giả định package.json Nó kể toàn bộ câu chuyện. Không phải vậy. Sức mạnh thực sự nằm ở sự kết hợp của... package.json + package-lock.json.

Đây là những gì cần tìm:

  • Liệu các gói-lock.json Bao gồm cả các gói hàng không mong đợi?
  • Liệu có bất kỳ phần phụ thuộc nào được lấy từ các registry không xác định hoặc có phạm vi bất thường không?
  • Số phiên bản có quá cụ thể hoặc không phù hợp không?

Sử dụng các công cụ dòng lệnh như:

  • kiểm toán npm để báo cáo các vấn đề đã biết
  • npm ls để xem toàn bộ cây phụ thuộc
  • khác để so sánh các phiên bản giữa package.jsongói-lock.json

Hãy củng cố... Pipeline: Các biện pháp phòng vệ hiệu quả

Để phòng chống việc chiếm đoạt tên miền bằng lỗi chính tả:

  • Áp dụng các hạn chế về phạm vi trong package.json.
  • Thêm phần trước khi hợp nhất hooks Để kiểm tra cú pháp và xác thực các phụ thuộc.
  • Sử dụng npm ci Để tránh tình trạng thay đổi phiên bản ngoài ý muốn.
  • Quét thường xuyên gói-lock.json đối với những điều bất thường.

Và quan trọng nhất: hãy xử lý các mục chưa được xác minh trong gói-lock.json như những rủi ro tiềm tàng. Mỗi commit Nên được coi như một điểm kiểm soát trong chuỗi cung ứng.

Phát hiện tự động: Các công cụ như Xygeni giúp ích như thế nào

Mặc dù không phải là giải pháp thần kỳ, nhưng các công cụ tự động như... Xygeni Đóng vai trò quan trọng trong việc giảm thiểu yếu tố lỗi do con người gây ra, điều mà các cuộc tấn công chiếm đoạt tên miền bằng lỗi chính tả thường lợi dụng. Xygeni tích hợp trực tiếp vào quy trình làm việc DevOps của bạn, bổ sung thêm một lớp bảo vệ thời gian thực chống lại việc chiếm đoạt phụ thuộc trước khi nó được thực thi.

Dưới đây là cách Xygeni giúp bạn:

  • Phát hiện tên gói đáng ngờ:
    Sử dụng thuật toán thông minh để phát hiện các mẫu chiếm đoạt tên miền do lỗi chính tả. package.jsonTìm kiếm những biến thể nhỏ trong tên các gói phần mềm quen thuộc (như thêm dấu gạch dưới, hoán vị hoặc đổi chỗ các chữ cái).
  • Xác minh mã băm không xác định:
    So sánh mã băm của mọi phần phụ thuộc trong gói-lock.json So sánh với cơ sở dữ liệu các hiện vật đã được kiểm chứng từ các kho lưu trữ đáng tin cậy. Ngay cả khi tên gói và phiên bản có vẻ ổn, sự không khớp mã băm cũng sẽ gây ra cảnh báo.
  • Chặn trước khi xây dựng:
    Chặn và ngăn chặn việc cài đặt bất kỳ gói phần mềm nào chưa được xác minh hoặc đáng ngờ trước khi chúng đến giai đoạn cài đặt hoặc sau cài đặt. CI/CD pipeline.
  • Phân tích đồ thị phụ thuộc:
    Liên tục kiểm tra toàn bộ cây phụ thuộc để phát hiện các nỗ lực chiếm đoạt tên miền gián tiếp do lỗi chính tả hoặc các phụ thuộc bắc cầu độc hại.
  • Cảnh báo và báo cáo:
    Cung cấp các cảnh báo chi tiết, có thể hành động, hiển thị những gì đã được gắn cờ, lý do và nguồn gốc của nó trong chuỗi phụ thuộc.

Khi hệ sinh thái gói phần mềm ngày càng phức tạp, các công cụ như Xygeni trở nên thiết yếu. Việc xem xét thủ công không thể đáp ứng được sự gia tăng phụ thuộc hoặc tốc độ phát triển nhanh chóng. Xygeni ra đời để tự động hóa các bước kiểm tra quan trọng trong môi trường hiện đại. pipelineđáp ứng nhu cầu thu hẹp khoảng cách giữa lòng tin và sự xác minh.

Một nhân vật. Hậu quả thực sự.

Đây không phải là một điều kỳ lạ. không ngàyĐó là lỗi đánh máy. Một ký tự bị đặt sai vị trí. package.json, được củng cố một cách âm thầm bởi gói-lock.jsonvà phần mềm độc hại đã được phát tán tự động trong quá trình hoạt động thường lệ. CI/CD chạy.

Đó chính là mối nguy hiểm thực sự của việc lợi dụng lỗi chính tả để chiếm đoạt tên miền: nó không cần sự phức tạp. Nó khai thác tốc độ, sự tin tưởng và tự động hóa. Sự thỏa hiệp này lẽ ra có thể tránh được nếu có các biện pháp kiểm soát phù hợp:

  • Quét tự động Để phát hiện các tên và phiên bản gói đáng ngờ trước khi cài đặt.
  • Kiểm toán tệp khóa để phát hiện các mục chưa được xem xét hoặc không mong muốn trong gói-lock.json.
  • Thuật toán xác thực tên Đánh dấu các gói gần giống với các gói đáng tin cậy.

Chỉ cần một ký tự thôi là đủ. Nếu kiểm tra kỹ càng thì đã có thể ngăn chặn nó trước khi nó gây hại cho bạn. pipelineChỉ tin tưởng thôi là chưa đủ. Trong DevSecOps hiện đại, bạn phải xác minh mọi thứ, nếu không sẽ mất tất cả.

sca-tools-software-composition-analysis-tools
Ưu tiên, khắc phục và bảo mật các rủi ro phần mềm của bạn
Đăng ký tài khoản miễn phí ngay.
Không cần thẻ tín dụng.

Bảo mật quá trình phát triển và phân phối phần mềm của bạn.

với bộ sản phẩm Xygeni