Đã tìm thấy lỗ hổng trong thư viện mạng Rust và Go ngăn chặn việc xác thực IP

Gần đây thông tin về lỗ hổng bảo mật đã được phát hành được tìm thấy trong các thư viện tiêu chuẩn của các ngôn ngữ Rust and Go, đó là liên quan đến xử lý sai địa chỉ IP với các chữ số bát phân trong các hàm phân tích địa chỉ.

Nó được đề cập rằng eNhững lỗ hổng này cho phép bạn tránh kiểm tra địa chỉ hợp lệ vàn ứng dụng, ví dụ, để tổ chức truy cập vào các địa chỉ giao diện lặp lại hoặc mạng con mạng nội bộ khi các cuộc tấn công giả mạo yêu cầu phía máy chủ được thực hiện.

Các lỗ hổng trong hai ngôn ngữ này Chuỗi địa chỉ IP có sự hiện thực hóa trong đặc điểm kỹ thuật dựa trên số không, vì bạn là về lý thuyết, chúng phải được hiểu là số bát phân, nhưng vấn đề gây ra những trục trặc này là nhiều thư viện bỏ qua điều này và chỉ loại bỏ số XNUMX, vì vậy cuối cùng họ coi giá trị là một số thập phân.

Ví dụ: để hiểu cách địa chỉ IP được diễn giải trong những lỗi này, số 0177 trong hệ bát phân là 127 trong hệ thập phân và kẻ tấn công có thể yêu cầu một tài nguyên chỉ định giá trị "0177.0.0.1", vì nó không được sử dụng dưới dạng bát phân, ký hiệu thập phân cho điều này là "127.0.0.1".

Đó là lý do tại sao trong trường hợp sử dụng một trong những thư viện có vấn đề, ứng dụng sẽ không phát hiện sự xuất hiện của địa chỉ 0177.0.0.1 trong mạng con 127.0.0.1, nhưng trên thực tế, khi gửi yêu cầu, địa chỉ "0177.0.0.1" có thể được gọi là do hiểu sai, các chức năng mạng sẽ xử lý điều này là 127.0.0.1. Tương tự, việc truy cập vào các địa chỉ mạng nội bộ có thể bị lừa và xác minh bằng cách chỉ định các giá trị khác nhau, mà kẻ tấn công sẽ đánh giá để có thể khai thác.

Về phía Rust, vấn đề được tìm thấy là do thư viện tiêu chuẩn "std :: net" và đã được xếp vào danh mục "CVE-2021-29922". Nó mô tả rằng trình phân tích cú pháp địa chỉ IP của thư viện này loại bỏ số XNUMX ở phía trước các giá trị của địa chỉ, nhưng chỉ khi không có nhiều hơn ba chữ số được chỉ định, ví dụ: "0177.0.0.1" sẽ được hiểu là giá trị không hợp lệ và kết quả không chính xác sẽ được trả về.

Xác thực đầu vào chuỗi bát phân không chính xác trong thư viện "net" tiêu chuẩn gỉ-lang cho phép những kẻ tấn công từ xa chưa được xác thực thực hiện các cuộc tấn công SSRF, RFI và LFI không xác định trên nhiều chương trình phụ thuộc vào gỉ-lang std :: net. Các octet của địa chỉ IP bị loại bỏ thay vì được đánh giá là địa chỉ IP hợp lệ.

Nó cũng được đề cập rằng các ứng dụng sử dụng thư viện std :: net :: IpAddr khi phân tích cú pháp các địa chỉ được chỉ định bởi người dùng có khả năng dễ bị tấn công SSRF (giả mạo yêu cầu phía máy chủ), RFI (bao gồm tệp từ xa) và BIA (bao gồm các tệp cục bộ). Tương tự, kẻ tấn công có thể nhập 127.0.026.1, thực tế là 127.0.22

Ví dụ: kẻ tấn công gửi địa chỉ IP đến một ứng dụng web dựa trên std :: net :: IpAddr có thể gây ra SSRF bằng cách nhập dữ liệu đầu vào bát phân; Kẻ tấn công có thể gửi địa chỉ IP có thể khai thác nếu octet có 3 chữ số, với octet có thể khai thác tối thiểu 08 dẫn đến từ chối dịch vụ và octet có thể khai thác tối đa 099 cũng dẫn đến từ chối dịch vụ. 

Nếu bạn muốn biết thêm về lỗ hổng này trong Rust, bạn có thể kiểm tra chi tiết Trong liên kết sau đây. Nó cũng được đề cập rằng lỗ hổng bảo mật đã được sửa trong nhánh Rust 1.53.0.

Càng sớm càng đến vấn đề ảnh hưởng đến để Go, nó được đề cập rằng điều này là tùy thuộc vào thư viện tiêu chuẩn «net» và nó đã được liệt kê theo CVE-2021-29923. Trong mô tả có đề cập rằng cho phép những kẻ tấn công từ xa chưa được xác thực thực hiện các cuộc tấn công SSRF, RFI và LFI không xác định trong nhiều chương trình phụ thuộc vào hàm net.ParseCIDR tích hợp của golang. Các octet IP CIDR riêng lẻ bị loại bỏ thay vì đánh giá chúng là các octet IP hợp lệ.

Ví dụ: kẻ tấn công có thể chuyển giá trị 00000177.0.0.1, khi được kiểm tra trong hàm net.ParseCIDR, sẽ được phân tích cú pháp là 177.0.0.1/24, không phải 127.0.0.1/24. Vấn đề cũng thể hiện trên nền tảng Kubernetes. Lỗ hổng bảo mật đã được sửa trong phiên bản Go 1.16.3 và phiên bản beta 1.17.

Bạn có thể tìm hiểu thêm về nó về lỗ hổng này Trong liên kết sau đây.


Nội dung bài viết tuân thủ các nguyên tắc của chúng tôi về đạo đức biên tập. Để báo lỗi, hãy nhấp vào đây.

Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.