SQL injection qua simple query mode không được hỗ trợ trong AWS Amazon JDBC Driver for Redshift

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2024-32888 là gì?

Lỗ hổng CVE-2024-32888 là lỗ hổng Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') ảnh hưởng tới amazon-redshift-jdbc-driver (phiên bản bị ảnh hưởng: < 2.1.0.28). Lỗ hổng này được xếp hạng ở mức Nghiêm trọng, với điểm CVSS 10. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Amazon JDBC Driver for Redshift là một JDBC Type 4 driver cung cấp khả năng kết nối cơ sở dữ liệu thông qua các application program interface (API) JDBC tiêu chuẩn có trong Java Platform, Enterprise Editions. Trước phiên bản 2.1.0.28, SQL injection có thể xảy ra khi sử dụng thuộc tính kết nối không mặc định preferQueryMode=simple kết hợp với mã ứng dụng có câu SQL dễ bị ảnh hưởng, trong đó giá trị của một tham số bị phủ định. Driver không có lỗ hổng khi sử dụng extended query mode mặc định. Lưu ý rằng preferQueryMode không phải là tham số được hỗ trợ trong Redshift JDBC driver và là code kế thừa từ Postgres JDBC driver. Người dùng không ghi đè thiết lập mặc định để sử dụng query mode không được hỗ trợ này sẽ không bị ảnh hưởng. Vấn đề được vá trong driver version 2.1.0.28. Workaround là không sử dụng thuộc tính kết nối preferQueryMode=simple. (LƯU Ý: Những người không chỉ định rõ query mode sẽ sử dụng extended query mode mặc định và không bị ảnh hưởng bởi vấn đề này.)

Sản phẩm và phạm vi ảnh hưởng

  • Bản ghi chuẩn hóa xác định AWS Amazon Redshift JDBC Driver với phạm vi bị ảnh hưởng là < 2.1.0.28.
  • Advisory của vendor xác định package Maven com.amazon.redshift:redshift-jdbc42 với các bản <= 2.1.0.26 là bị ảnh hưởng và xác định 2.1.0.28 là bản đã vá.
  • Changelog của vendor ghi nhận 2.1.0.27 được phát hành lên Maven do nhầm lẫn và không được khuyến nghị sử dụng. Trạng thái riêng của bản này đối với lỗ hổng không được xác nhận độc lập trong các dữ kiện hiện có, vì vậy không nên xem đây là bản khắc phục đã được kiểm chứng.
  • Các nhánh phát hành song song hoặc bản phát hành về sau không được tự động coi là an toàn nếu chưa đối chiếu với advisory hoặc thông tin phát hành tương ứng.

Chi tiết kỹ thuật

AWS Amazon JDBC Driver for Redshift là JDBC Type 4 driver cho các ứng dụng Java. Lỗi thuộc nhóm CWE-89 và nằm trong quá trình driver xử lý, tuần tự hóa tham số thành câu lệnh SQL khi sử dụng chế độ truy vấn đơn giản không mặc định.

Theo cơ chế line-comment liên quan, chuỗi điều kiện rủi ro gồm:

  1. Ứng dụng chủ động đặt thuộc tính kết nối preferQueryMode=simple.
  2. Câu lệnh SQL có một placeholder cho giá trị số đứng ngay sau dấu trừ, tiếp theo là placeholder cho chuỗi trên cùng một dòng, và cả hai giá trị đều do người dùng kiểm soát.
  3. Ở simple query mode, driver nội suy giá trị tham số vào câu lệnh SQL thay vì gửi chúng tách biệt.
  4. Giá trị số âm có thể tạo chuỗi --, khiến phần còn lại của dòng bị diễn giải như SQL line comment. Nếu tham số chuỗi tiếp theo chứa newline, nội dung sau đó có thể đi vào câu lệnh SQL theo cách không được escape.

Kết quả có thể là SQL injection và thực thi các câu lệnh ngoài ý định. Chế độ extended query mặc định gửi tham số tách biệt và không bị ảnh hưởng theo advisory của vendor. Bản ghi không xác định tên hàm triển khai cụ thể của Redshift driver hoặc quyền cơ sở dữ liệu mà từng ứng dụng cấp cho connection.

Khả năng khai thác

Lỗi có thể bị khai thác từ xa thông qua ứng dụng sử dụng driver, với điều kiện ứng dụng cho phép đầu vào của kẻ tấn công đi tới câu lệnh SQL dễ bị ảnh hưởng và ứng dụng đã bật preferQueryMode=simple. Các chỉ dấu trong bản ghi mô tả việc khai thác không cần đặc quyền hoặc tương tác người dùng ở tầng lỗ hổng, nhưng việc tiếp cận thực tế vẫn phụ thuộc vào đường đi của dữ liệu trong ứng dụng và quyền của tài khoản cơ sở dữ liệu.

Bản ghi được cung cấp không xác định exploit công khai và không thiết lập liệu lỗ hổng đã bị khai thác trong thực tế hay chưa. Không có chiến dịch, nạn nhân hoặc sự cố cụ thể nào được nêu.

Tác động kỹ thuật

Lỗi có thể làm thay đổi cú pháp của câu lệnh SQL được thực thi, dù ứng dụng sử dụng prepared statement, khi driver chạy ở simple query mode. Hậu quả kỹ thuật có thể gồm thực thi truy vấn ngoài dự kiến và mở rộng từ quá trình dựng câu lệnh trong driver tới các tài nguyên cơ sở dữ liệu mà application account được phép truy cập.

Nếu tài khoản kết nối có quyền phù hợp, tác động có thể bao gồm mất tính bí mật do đọc dữ liệu, mất tính toàn vẹn do sửa hoặc xóa dữ liệu, và ảnh hưởng tính sẵn sàng do thực hiện thao tác gây tải hoặc làm gián đoạn dịch vụ. Đây là các hậu quả có thể xảy ra, không phải bằng chứng rằng một hệ thống cụ thể đã bị xâm phạm. Việc không bật preferQueryMode=simple hoặc sử dụng extended query mode mặc định loại bỏ điều kiện khai thác được vendor mô tả.

Tác động đến tổ chức

Kẻ tấn công có thể cung cấp giá trị cho một câu lệnh dễ bị ảnh hưởng và khiến cơ sở dữ liệu diễn giải SQL khác với ý định của ứng dụng. Tùy thuộc vào quyền của database identity và ngữ cảnh câu lệnh, hậu quả có thể gồm đọc dữ liệu trái phép, sửa dữ liệu hoặc thực hiện thao tác làm gián đoạn dịch vụ.

Bản ghi không chứng minh dữ liệu nào đã bị truy cập, thay đổi hoặc mất mát, đồng thời không nêu nạn nhân hay chiến dịch cụ thể. Phạm vi phơi nhiễm hẹp hơn một lỗi SQL injection tổng quát vì phải đồng thời có cấu hình simple query mode không mặc định và mẫu SQL dễ bị ảnh hưởng.

Cách khắc phục

  1. Nâng package com.amazon.redshift:redshift-jdbc42 lên đúng bản 2.1.0.28, là bản được advisory của vendor xác định đã vá. Xác minh artifact được nạp thực tế trên từng dịch vụ sau khi triển khai.
  2. Nếu chưa thể nâng cấp ngay, xóa cấu hình preferQueryMode=simple khỏi JDBC URL, connection properties, connection pool và các cấu hình môi trường. Không chỉ định query mode sẽ sử dụng extended query mode mặc định theo advisory.
  3. Không sử dụng 2.1.0.27, vì changelog của vendor ghi nhận bản này được phát hành lên Maven do nhầm lẫn và không khuyến nghị sử dụng.
  4. Rà soát các prepared statement nhận dữ liệu bên ngoài, đặc biệt các câu lệnh có giá trị số bị phủ định và tham số chuỗi tiếp theo. Sửa logic ứng dụng để không tạo mẫu SQL dễ bị ảnh hưởng và giới hạn quyền của database identity theo nguyên tắc tối thiểu.
  5. Đối với các nhánh phát hành khác ngoài phạm vi đã nêu, xác minh riêng trạng thái hỗ trợ và bản vá với nguồn vendor trước khi đóng việc xử lý.

Cách phát hiện

  1. Kiểm kê các ứng dụng Java và dependency Maven có sử dụng com.amazon.redshift:redshift-jdbc42; kiểm tra cả artifact thực sự được nạp lúc chạy, không chỉ khai báo trong source hoặc lockfile.
  2. Rà soát JDBC URL, connection pool, biến môi trường và secret để tìm thuộc tính preferQueryMode=simple. Việc không chỉ định query mode sử dụng extended query mode mặc định theo advisory.
  3. Tìm các prepared statement có dấu trừ ngay trước placeholder số, có placeholder chuỗi tiếp theo trên cùng dòng, và nhận dữ liệu từ người dùng. Ưu tiên các đường đi cho phép newline trong giá trị chuỗi.
  4. Kiểm tra audit log và query log của Redshift để tìm câu lệnh có cấu trúc bất thường, phần điều kiện bị cắt bởi comment, hoặc thao tác đọc, sửa và xóa không phù hợp với hành vi ứng dụng. Đây là biện pháp giám sát phòng ngừa, không phải indicator đã được vendor xác nhận.
  5. Sau khi xử lý, xác minh lại dependency và cấu hình runtime trên từng dịch vụ. Việc không thấy sự kiện bất thường trong log không chứng minh rằng hệ thống an toàn.
Nguồn (17)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.