Lỗ hổng 22 tuổi được báo cáo trong thư viện cơ sở dữ liệu SQLite được sử dụng rộng rãi


  Một lỗ hổng nghiêm trọng cao đã được tiết lộ trong thư viện cơ sở dữ liệu SQLite, được giới thiệu như một phần của thay đổi mã có từ tháng 2000 năm XNUMX và có thể cho phép kẻ tấn công gặp sự cố hoặc kiểm soát chương trình.

Được theo dõi dưới dạng CVE-2022-35737 (điểm CVSS: 7.5), vấn đề 22 tuổi ảnh hưởng đến SQLite phiên bản 1.0.12 đến 3.39.1 và đã được giải quyết trong phiên bản 3.39.2 được phát hành vào ngày 21 tháng 7 năm 2022.

"CVE-2022-35737 có thể khai thác được trên các hệ thống 64 bit và khả năng khai thác phụ thuộc vào cách chương trình được biên dịch," nhà nghiên cứu Andreas Kellas của Trail of Bits cho biết trong một bài viết kỹ thuật được công bố hôm nay.

"Việc thực thi mã tùy ý được xác nhận khi thư viện được biên dịch mà không có stack canaries, nhưng chưa được xác nhận khi có canary ngăn xếp và từ chối dịch vụ được xác nhận trong mọi trường hợp."

Được lập trình trong C, SQLite là công cụ cơ sở dữ liệu được sử dụng rộng rãi nhất, được bao gồm theo mặc định trong Android, iOS, Windows và macOS, cũng như các trình duyệt web phổ biến như Google Chrome, Mozilla Firefox và Apple Safari.

Lỗ hổng được phát hiện bởi Trail of Bits liên quan đến lỗi tràn số nguyên xảy ra khi các đầu vào chuỗi cực lớn được truyền dưới dạng tham số để triển khai SQLite của các hàm printf, do đó, sử dụng một hàm khác để xử lý định dạng chuỗi ("sqlite3_str_vappendf").

uy nhiên, việc vũ khí hóa thành công các ngân hàng lỗ hổng trên điều kiện tiên quyết là chuỗi chứa các loại thay thế định dạng %Q, % q hoặc % w, có khả năng dẫn đến sự cố chương trình khi dữ liệu do người dùng kiểm soát được ghi vượt quá giới hạn của bộ đệm được phân bổ theo ngăn xếp.

"Nếu chuỗi định dạng chứa ký tự đặc biệt '!' để cho phép quét ký tự unicode, thì có thể đạt được thực thi mã tùy ý trong trường hợp xấu nhất hoặc khiến chương trình bị treo và lặp lại (gần như) vô thời hạn," Kellas giải thích.

Lỗ hổng bảo mật cũng là một ví dụ về một kịch bản từng được coi là không thực tế cách đây nhiều thập kỷ - phân bổ chuỗi 1GB làm đầu vào - trở nên khả thi với sự ra đời của các hệ thống máy tính 64 bit.

Kellas nói: "Đó là một lỗi có thể không giống như một lỗi vào thời điểm nó được viết (có từ năm 2000 trong mã nguồn SQLite) khi các hệ thống chủ yếu là kiến trúc 32 bit. "

Mới hơn Cũ hơn