FFmpeg là thư viện xử lý video và âm thanh mã nguồn mở phổ biến nhất thế giới, được sử dụng trong YouTube, VLC, Chrome và hàng ngàn sản phẩm phần mềm. Mới đây, một nhà nghiên cứu an ninh mạng đã phát hiện lỗi logic nghiêm trọng Division by Zero trong bộ giải mã luồng đa phương tiện của FFmpeg thông qua công cụ Fuzzing do AI hỗ trợ.

🔍 Tổng Quan Về Lỗ Hổng:

  • Loại lỗi: Integer Division by Zero (CWE-369) dẫn đến Crash dịch vụ (Denial of Service).
  • Vị trí phát hiện: Module tính toán tỷ lệ khung hình và độ phân giải mẫu trong parser định dạng video tùy biến.
  • Phương pháp phát hiện: AI-Guided Fuzzing (Sử dụng LLM để sinh các file mẫu video dị biệt vượt qua vòng kiểm tra header hợp lệ).

1. Vì sao Fuzzing truyền thống bỏ sót lỗi này?

Các fuzzer truyền thống dựa trên độ phủ mã (Coverage-guided fuzzers như AFL++, libFuzzer) thường đột biến byte ngẫu nhiên. Khi xử lý các định dạng tệp đa phương tiện phức tạp (như MP4, MKV, FLAC), hầu hết các đột biến ngẫu nhiên đều bị parser từ chối ngay ở các bước kiểm tra Magic Bytes hoặc Checksum ban đầu.

Kỹ thuật AI-Guided Fuzzing giải quyết triệt để vấn đề này:

  1. Mô hình AI phân tích đặc tả kỹ thuật (RFC/Spec) của định dạng và mã nguồn bộ giải mã C/C++.
  2. AI sinh ra các tệp video có cấu trúc header hoàn toàn hợp lệ nhưng chứa các giá trị biên đặc biệt (ví dụ: sample_aspect_ratio.den = 0).
  3. Payload vượt qua được tất cả các hàm kiểm tra sơ bộ và kích hoạt trực tiếp phép chia trong hàm tính toán sâu bên trong thư viện.

2. Phân tích đoạn mã nguồn bị lỗi

// Đoạn mã tính toán tỉ lệ hiển thị trong FFmpeg trước khi vá:
static int decode_video_header(AVCodecContext *avctx, GetBitContext *gb) {
    int width_sar = get_bits(gb, 16);
    int height_sar = get_bits(gb, 16); // Giá trị có thể là 0 nếu tệp bị chế tác
    // Phép chia trực tiếp không có kiểm tra height_sar != 0
    int display_aspect = (width_sar * avctx->width) / height_sar; // Kích hoạt SIGFPE crash!
    return 0;
}

3. Tầm quan trọng của Fuzzing trong nghiên cứu bảo mật

Lỗ hổng này chứng minh rằng việc kết hợp AI vào quy trình rà soát mã nguồn tự động giúp mở rộng đáng kể phạm vi tìm kiếm lỗi logic phức tạp mà các công cụ tĩnh (SAST) hay Fuzzer truyền thống khó tiếp cận. Các nhà phát triển phần mềm C/C++ cần thường xuyên tích hợp Fuzzing liên tục (Continuous Fuzzing) vào pipeline CI/CD.