Logo Zephyrnet

Sử dụng WinRAR? Hãy nhớ vá các lỗi thực thi mã này…

Ngày:

Chương trình RAR đáng kính, viết tắt của Kho lưu trữ của Roshal theo tên người tạo ban đầu, nó đã phổ biến trong giới chia sẻ tệp và phân phối phần mềm trong nhiều thập kỷ, đặc biệt là nhờ các tính năng phục hồi lỗi và tái tạo tệp được tích hợp sẵn.

Những người dùng Internet thời kỳ đầu sẽ nhớ lại, với một chút thích thú, những ngày mà các tập tin lớn được chuyển đi dưới dạng các kho lưu trữ nén được chia thành nhiều đĩa mềm hoặc được tải lên các diễn đàn trực tuyến có giới hạn về kích thước dưới dạng một loạt các khối có kích thước khiêm tốn được nén lần đầu tiên để lưu lại. khoảng trống và sau đó được mở rộng thành dạng mã hóa văn bản chỉ ASCII.

Nếu một đĩa mềm bị thất lạc hoặc không thể đọc lại chính xác hoặc nếu một đoạn trong kho lưu trữ 12 phần tải lên bị xóa nhầm khỏi máy chủ thì bạn đã không gặp may.

RAR, hay WinRAR ở dạng Windows hiện đại, đã giúp giải quyết vấn đề này bằng cách cung cấp cái gọi là khối lượng phục hồi.

Những dữ liệu sửa lỗi được lưu trữ này sao cho các kho lưu trữ nhiều phần có thể được khôi phục tự động và hoàn toàn ngay cả khi toàn bộ một đoạn (hoặc nhiều hơn, tùy thuộc vào lượng thông tin khôi phục được lưu giữ) bị mất hoặc không thể khôi phục được.

Giữ một bánh xe dự phòng trong cốp xe/ cốp xe

Rõ ràng, các kho lưu trữ RAR lên tới và bao gồm cả phiên bản 4 được sử dụng cái gọi là hiệu chỉnh chẵn lẻ; các phiên bản mới hơn sử dụng hệ thống sửa lỗi phức tạp hơn nhưng mạnh mẽ hơn về mặt tính toán được gọi là Mã Reed-Solomon.

Hiệu chỉnh dựa trên tính chẵn lẻ phụ thuộc vào phép toán XOR mà chúng ta sẽ biểu thị ở đây bằng ký hiệu ⊕ (dấu cộng bên trong vòng tròn).

XOR là viết tắt của độc quyền HOẶC, biểu thị “X đúng hoặc Y đúng, nhưng không phải cả hai cùng một lúc”, do đó tuân theo điều này bảng sự thật, mà chúng ta xây dựng bằng cách giả sử rằng X và Y chỉ có thể có các giá trị 0 (sai) hoặc 1 (đúng):

Nếu X=0 và Y=0 thì X ⊕ Y = 0 (hai cái sai thành một sai) Nếu X=1 và Y=0 thì X ⊕ Y = 1 (một cái có thể đúng, nhưng không thể cả hai) Nếu X=0 và Y=1 thì X ⊕ Y = 1 (một cái có thể đúng, nhưng không phải cả hai) Nếu X=1 và Y=1 thì X ⊕ Y = 0 (phải là cái này hoặc cái kia)

Hàm XOR hoạt động hơi giống câu hỏi “Bạn muốn cà phê hay trà?”

Nếu bạn nói “có”, thì bạn phải chọn riêng cà phê hoặc chọn trà một mình, vì bạn không thể uống mỗi thứ một tách.

Như bạn có thể tính ra từ bảng chân lý ở trên, XOR có các đặc điểm tiện lợi X ⊕ 0 = XX ⊕ X = 0.

Bây giờ hãy tưởng tượng rằng bạn có ba khối dữ liệu được gắn nhãn A, B và C và bạn tính toán khối thứ tư P bằng cách XOR A, B và C cùng nhau, sao cho P = (A ⊕ B ⊕ C).

Với bảng chân lý ở trên và cho rằng XOR được gọi là giao hoán, nghĩa là thứ tự của các giá trị trong phép tính có thể được hoán đổi nếu bạn muốn, do đó X ⊕ Y = Y ⊕ Z, hoặc là A ⊕ B ⊕ C = C ⊕ B ⊕ A = B ⊕ C ⊕ A vân vân, chúng ta có thể thấy rằng:

A ⊕ B ⊕ C ⊕ P = A ⊕ B ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ (C⊕C) = 0 ⊕ 0 ⊕ 0 = 0

Bây giờ hãy xem điều gì sẽ xảy ra nếu bất kỳ một trong số A, B hoặc C bị mất:

A ⊕ B ⊕ P = A ⊕ B ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ C = 0 ⊕ 0 ⊕ C = C <-phần bị thiếu sẽ quay trở lại! A ⊕ C ⊕ P = A ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (C⊕C) ⊕ B = 0 ⊕ 0 ⊕ B = B <-phần bị thiếu sẽ quay trở lại! B ⊕ C ⊕ P = B ⊕ C ⊕ (A ⊕ B ⊕ C) = (B⊕B) ⊕ (C⊕C) ⊕ A = 0 ⊕ 0 ⊕ A = A <-phần bị thiếu sẽ quay trở lại!

Ngoài ra, nếu P bị mất, chúng ta có thể bỏ qua nó vì chúng ta có thể tính A ⊕ B ⊕ C dù sao.

Nói một cách đơn giản, việc có đoạn dữ liệu chẵn lẻ P có nghĩa là chúng ta luôn có thể xây dựng lại bất kỳ đoạn bị thiếu nào, bất kể đó là đoạn nào.

Lỗi khôi phục lỗi

Chà, sau những gì chúng tôi cho là đã không được chú ý trong nhiều năm, một lỗi hiện được đặt tên là CVE-2023-40477 đã nổi lên trong WinRAR.

Lỗi này có thể được kích hoạt (trớ trêu thay, có lẽ vậy) khi sản phẩm sử dụng hệ thống khôi phục dữ liệu này.

Theo những gì chúng ta có thể thấy, một đoạn dữ liệu chẵn lẻ bị bẫy được chèn vào kho lưu trữ có thể đánh lừa mã WinRAR ghi dữ liệu bên ngoài vùng bộ nhớ được phân bổ cho nó.

Điều này dẫn đến khả năng khai thác được tràn bộ nhớ dễ bị tổn thương.

Dữ liệu được ghi ở nơi không thuộc về nó cuối cùng sẽ được coi là mã chương trình được thực thi, thay vì là dữ liệu cũ đơn giản được sử dụng trong quy trình phân tách.

Lỗi này không đạt điểm nghiêm trọng 10/10 trên “thang nguy hiểm” CVSS, đạt điểm 7.8/10 với lý do không thể khai thác lỗ hổng nếu không có sự trợ giúp nào đó từ người dùng đang bị nhắm mục tiêu.

Lỗi thứ hai

Điều thú vị là một lỗi bảo mật thứ hai đã được vá trong bản phát hành WinRAR mới nhất và mặc dù lỗi này nghe có vẻ ít rắc rối hơn lỗ hổng CVE-2023-40477 được đề cập ở trên, nhưng TechCrunch gợi ý rằng nó đã bị khai thác trong đời thực thông qua các kho lưu trữ bị mắc bẫy “được đăng trên ít nhất tám diễn đàn công cộng [bao gồm] nhiều chủ đề liên quan đến giao dịch, đầu tư và tiền điện tử.”

Chúng tôi không thể tìm thấy số CVE cho số này, nhưng WinRAR mô tả nó đơn giản như sau:

 WinRAR có thể khởi động một tệp sai sau khi người dùng nhấp đúp vào một mục trong kho lưu trữ được chế tạo đặc biệt.

Nói cách khác, người dùng đã mở một kho lưu trữ và quyết định xem một tệp có vẻ vô hại bên trong nó (ví dụ: tệp văn bản README hoặc một hình ảnh trông vô hại) có thể bất ngờ khởi chạy một số tệp khác từ kho lưu trữ, chẳng hạn như dưới dạng tập lệnh hoặc chương trình thực thi.

Điều đó giống như việc nhận được một email chứa tệp đính kèm có vẻ an toàn cùng với một tệp có vẻ nguy hiểm, quyết định bắt đầu bằng cách chỉ điều tra tệp có vẻ an toàn nhưng thay vào đó lại vô tình kích hoạt tệp rủi ro.

Từ những gì chúng tôi có thể biết, và một điều trớ trêu khác, lỗi này tồn tại trong mã giải nén tệp ZIP của WinRAR, chứ không phải trong mã xử lý định dạng tệp RAR của chính nó.

Các tệp ZIP hai mặt đã là một vấn đề an ninh mạng trong nhiều năm, vì chỉ mục của các tệp và thư mục trong bất kỳ kho lưu trữ ZIP nào xuất hiện hai lần, một lần trong một chuỗi các khối dữ liệu xen kẽ trong toàn bộ tệp và sau đó lại xuất hiện trong một đoạn dữ liệu duy nhất tại kết thúc. Mã xác minh các tệp dựa trên một chỉ mục nhưng trích xuất và sử dụng chúng dựa trên chỉ mục kia mà không kiểm tra xem hai chỉ mục có nhất quán hay không, đã dẫn đến nhiều lỗ hổng có thể bị khai thác trong nhiều năm. Chúng tôi không biết liệu sự cố chỉ mục kép này có phải là nguyên nhân gốc rễ của lỗi WinRAR gần đây hay không, nhưng xin nhắc nhở rằng việc giải nén các tệp lưu trữ có thể là một quá trình phức tạp và dễ xảy ra lỗi, cần được chú ý cẩn thận đến vấn đề bảo mật, thậm chí phải trả giá bằng xử lý thêm và giảm hiệu suất.

Phải làm gì?

Nếu bạn là người dùng WinRAR, hãy chắc chắn rằng bạn đang ở trên phiên bản mới nhất, là 6.23 tại thời điểm viết bài [2023-08-23T16:30Z]

Hình như phần mềm WinRAR không có hệ thống cập nhật tự động nên bạn cần tải bộ cài mới về và tự chạy để thay thế bản cũ.

Nếu bạn là một lập trình viên, hãy nhớ xem lại mã cũ vẫn còn trong phần mềm của bạn nhưng được coi là "đã ngừng hoạt động" hoặc "không còn được khuyến nghị cho người dùng mới".

Theo những gì chúng tôi có thể thấy, WinRAR không còn tạo dữ liệu khôi phục kiểu cũ nữa và đã sử dụng các thuật toán sửa lỗi thông minh hơn kể từ phiên bản 5, nhưng vì lý do tương thích ngược, vẫn xử lý các tệp kiểu cũ nếu chúng được hiển thị.

Hãy nhớ rằng khi kẻ tấn công tạo các tệp bị bẫy với hy vọng phá hỏng phần mềm của bạn, thì nhìn chung, chúng không sử dụng phần mềm của bạn để tạo các tệp đó, vì vậy việc chỉ kiểm tra quy trình nhập của riêng bạn đối với các tệp mà quy trình đầu ra của chính bạn đã tạo ban đầu là không bao giờ đủ.

Nếu bạn chưa xem xét làm mờ, một thuật ngữ biệt ngữ đề cập đến một kỹ thuật kiểm tra trong đó hàng triệu đầu vào bị hoán vị, không đúng định dạng và cố tình không chính xác được đưa vào phần mềm của bạn trong khi theo dõi hành vi sai trái của nó…

…thì bây giờ có lẽ là lúc để suy nghĩ về điều đó.

Những bộ làm mờ tốt không chỉ chạy đi chạy lại mã của bạn mà còn cố gắng điều chỉnh các chỉnh sửa, hack và sửa đổi mà họ thực hiện đối với dữ liệu đầu vào giả mạo của mình để càng nhiều mã của bạn được dùng thử càng tốt.

Điều này giúp bạn có được những gì được coi là tốt mã số bảo hiểm trong quá trình thử nghiệm, bao gồm cả việc buộc chương trình của bạn sử dụng các đường dẫn mã hiếm và bất thường mà hiếm khi được kích hoạt khi sử dụng thường xuyên và nơi các lỗ hổng chưa được khám phá có thể đã ẩn giấu trong nhiều năm.


tại chỗ_img

Tin tức mới nhất

tại chỗ_img