Công bố các lỗ hổng chưa được vá trong hệ thống tệp tin tích hợp trên hàng triệu thiết bị nhúng

Công ty bảo mật runZero đã tiết lộ 7 lỗ hổng trong FatFs, một thư viện hệ thống tệp tin nhỏ cho phép thiết bị đọc và ghi các định dạng FAT và exFAT trên ổ USB và thẻ SD. Các lỗi này rất quan trọng vì FatFs có mặt ở khắp mọi nơi, từ camera an ninh, drone cho đến các thiết bị điều khiển công nghiệp và ví tiền điện tử phần cứng. Bất kỳ ai có quyền truy cập vật lý vào thiết bị đều có thể tận dụng các lỗi này để thực thi mã độc.
Minh họa lỗ hổng FatFs

Công ty bảo mật runZero vừa tiết lộ 7 lỗ hổng bảo mật trong FatFs, một thư viện hệ thống tệp tin nhỏ gọn cho phép thiết bị đọc và ghi các định dạng FAT và exFAT được sử dụng trên ổ USB và thẻ SD.

Các lỗ hổng này rất đáng quan ngại vì FatFs có mặt ở khắp mọi nơi. Nó được tích hợp bên trong firmware của camera an ninh, drone (thiết bị bay không người lái), bộ điều khiển công nghiệp, ví tiền điện tử phần cứng và các thiết bị khác chạy trên hệ điều hành thời gian thực (RTOS).

Trên những hệ thống bị ảnh hưởng nghiêm trọng nhất, kẻ tấn công khi sử dụng một ổ USB, thẻ SD hoặc tệp cập nhật "gài bẫy" có thể làm hỏng bộ nhớ của thiết bị và thực thi mã độc của riêng chúng.

"Bất kỳ sự tiếp cận vật lý nào cũng có thể dẫn đến một vụ jailbreak."

Nhiều thiết bị nhúng thiếu các cơ chế bảo vệ bộ nhớ thường thấy trên điện thoại và máy tính để bàn, đó là lý do runZero cho rằng quyền truy cập vật lý có thể dẫn đến kiểm soát hoàn toàn. Một ki-ốt công cộng, camera có khe cắm thẻ SD, máy ATM hoặc máy bỏ phiếu có cổng USB không nên để bị chiếm quyền kiểm soát hoàn toàn chỉ sau vài giây tiếp cận vật lý, nhưng với lỗi này, điều đó là hoàn toàn có thể.

Cả 7 lỗi đều hoạt động theo cùng một cơ chế cơ bản: Thiết bị cố gắng đọc một phân vùng lưu trữ hoặc hình ảnh firmware đã bị cố tình làm sai lệch, và FatFs xử lý sai các dữ liệu độc hại đó. runZero xếp hạng các lỗi này từ CVSS Medium đến High, không có lỗi nào ở mức Critical.

Lỗ hổng nổi bật nhất là CVE-2026-6682 (CVSS 7.6), một lỗi integer overflow trong mã nguồn thực hiện mount (gắn) phân vùng FAT32. Các phép tính sai sót có thể tạo ra kích thước tệp giả, khiến đoạn mã sau đó coi là độ dài đọc thực tế. Trên phần cứng thực tế, điều này có thể dẫn đến memory corruption và thực thi mã (code execution).

Danh sách 7 lỗ hổng theo xếp hạng của runZero:

  • CVE-2026-6682 (7.6, High): Lỗi integer overflow khi mount FAT32 dẫn đến memory corruption và có khả năng thực thi mã. Có thể bị khai thác thông qua một số bản cập nhật firmware, không chỉ qua phương tiện vật lý.
  • CVE-2026-6687 (7.6, High): Một trường volume-label của exFAT gây tràn một bộ đệm (buffer) nhỏ, tạo điểm tựa cho kẻ tấn công gây memory corruption.
  • CVE-2026-6688 (7.6, High): Tên tệp dài (long filenames) gây tràn mã bao quanh (wrapper code) mà nhiều dự án sử dụng cho FatFs, ví dụ như hàm strcpy của fno.fname vào một bộ đệm cố định. Lỗi này rất khó khắc phục nếu chỉ tác động bên trong FatFs.
  • CVE-2026-6685 (6.1, Medium): Lỗi math wrap trong việc xử lý bộ nhớ đệm (cache) trên các phân vùng bị phân mảnh, có thể âm thầm làm hỏng dữ liệu.
  • CVE-2026-6683 (4.6, Medium): Lỗi chia cho 0 (divide-by-zero) trong exFAT gây treo thiết bị. Trong quá trình cập nhật, nó có thể làm hỏng phần cứng (brick). Cũng có thể bị khai thác qua cập nhật firmware.
  • CVE-2026-6686 (4.6, Medium): Một tệp được mở rộng quá giới hạn kết thúc có thể làm rò rỉ dữ liệu còn sót lại từ các tệp đã xóa trước đó.
  • CVE-2026-6684 (4.6, Medium): Bảng phân vùng GPT bị lỗi có thể làm treo thiết bị trong quá trình mount. Đây là lỗi duy nhất trong số 7 lỗi đã được khắc phục ở bản gốc FatFs R0.16.

Vấn đề khó khăn nằm ở chỗ FatFs được duy trì bởi một nhà phát triển duy nhất. runZero cho biết họ đã cố gắng liên hệ nhiều lần với người duy trì này và thông qua trung tâm điều phối JPCERT/CC của Nhật Bản nhưng không nhận được phản hồi.

Theo runZero, hiện không có bản vá chính thức từ nguồn (upstream) cho các lỗi memory corruption, không có danh sách gửi thư bảo mật và không có cách nào để nhiều sản phẩm đang sử dụng FatFs biết rằng họ bị ảnh hưởng. Việc cập nhật chỉ giúp khắc phục lỗi treo GPT, còn lại các nhà cung cấp hạ nguồn phải tự mình vá lỗi.

runZero đã liệt kê các nền tảng bị ảnh hưởng, bao gồm Espressif ESP-IDF, STMicroelectronics STM32Cube, Zephyr, MicroPython, ArduPilot, RT-Thread, Mbed, Samsung TizenRT và SWUpdate. Điều này đẩy vấn đề xuống cho các thiết bị IoT tiêu dùng, thiết bị công nghiệp, drone và ví tiền điện tử.

Lời khuyên trực tiếp cho những người xây dựng firmware có sử dụng định dạng FAT hoặc exFAT: Hãy tìm bản sao FatFs trong sản phẩm của bạn, kiểm tra kỹ mã bao quanh (wrapper code), xem xét cách xử lý tên tệp và kích thước tệp, và lên kế hoạch vá lỗi ngay lập tức.

Tại sao điều này tiếp tục xảy ra

runZero lần đầu tiên kiểm tra FatFs thủ công vào năm 2017 và thấy ít vấn đề đáng báo cáo. Quay trở lại vào tháng 3 năm 2026, nhóm nghiên cứu đã sử dụng một quy trình hiện đại: Visual Studio Code, GitHub Copilot ở chế độ "auto" và một vài câu lệnh (prompts) đơn giản.

Công cụ AI (LLM) đã xây dựng một fuzzer – công cụ tự động đưa dữ liệu sai lệch vào mã nguồn cho đến khi nó bị lỗi. Điều này đã giúp phát hiện ra các lỗi mà việc kiểm tra thủ công trước đây đã bỏ lỡ và xác nhận rằng chúng có thể bị khai thác.

Điều này phù hợp với một xu hướng đang gia tăng. Vào cuối năm 2024, tác nhân Big Sleep của Google đã tìm thấy một lỗi bộ nhớ có thể khai thác thực tế trong SQLite mà các phương pháp fuzzing thông thường không tìm thấy.

Tháng trước, một tác nhân AI tự hành cũng đã phát hiện 21 lỗi an toàn bộ nhớ trong FFmpeg. runZero nhấn mạnh rằng: Nếu một quy trình AI thông thường có thể tìm thấy những lỗi này, thì bất kỳ ai cũng có thể làm được, vì vậy việc giữ im lặng sẽ không bảo vệ được ai.