Từ rà soát mã nguồn đến 10 CVE nguy hiểm trong Frappe Framework

Frappe Framework là một nền tảng Web Application Full-stack nguồn mở mạnh mẽ dựa trên Python và JavaScript. Nó được thiết kế để xây dựng các hệ thống quản lý doanh nghiệp phức tạp, tiêu biểu nhất là ERPNext – giải pháp ERP nguồn mở phổ biến toàn cầu giúp quản lý CRM, HRM, kế toán và chuỗi cung ứng.

Frappe Framework

Tuy nhiên, sức ảnh hưởng rộng lớn của hệ sinh thái này cũng đi kèm rủi ro: Một lỗ hổng trong Framework có thể trở thành cửa hậu cho tin tặc tấn công hàng nghìn doanh nghiệp đang lưu trữ dữ liệu nhạy cảm.

Phương pháp Whitebox Pentest: Sức mạnh của Source-Code Review

Thay vì kiểm thử bên ngoài (Blackbox), các chuyên gia đã áp dụng phương pháp Whitebox Pentest (Rà soát mã nguồn). Bằng cách xem xét trực tiếp logic xử lý dữ liệu, nhóm nghiên cứu đã tìm ra những điểm mù mà các công cụ quét tự động thường bỏ sót.

1. Nhận diện nguy cơ từ thiết kế Framework

Theo thiết kế an toàn của Frappe, khi lập trình viên sử dụng tham số %s, hệ thống sẽ tự động thực hiện cơ chế escape các ký tự đặc biệt để chống lại SQL Injection.

Cơ chế mất an toàn xuất hiện khi: Nhà phát triển không tuân thủ thiết kế chuẩn, thay vào đó sử dụng các phương pháp như nối chuỗi trực tiếp, f-string hoặc .format() để tạo câu lệnh SQL trước khi thực thi.

  • Ví dụ sai lầm: f"SELECT …. WHERE username = '{USER_INPUT}'".

Khi các "Raw Query" này đi qua các phương thức như frappe.db.sql() hoặc frappe.db.multisql(), lỗ hổng SQL Injection chính thức hình thành.

2. Truy tìm dòng chảy dữ liệu với CodeQL

Nhóm chuyên gia đã tận dụng CodeQL, một công cụ phân tích mã nguồn cho phép truy vấn mã như một cơ sở dữ liệu.

  • Define Source (Đầu vào): Tìm các phương thức sử dụng decorator @frappe.whitelist() – nơi tiếp nhận dữ liệu từ API người dùng.
  • Define Sink (Điểm thực thi): Tìm các hàm thực thi lệnh SQL trực tiếp như frappe.db.sql().
  • Data Flow Analysis: CodeQL giúp tìm ra con đường mà dữ liệu người dùng đi từ Source đến Sink mà không qua bất kỳ bộ lọc (Sanitization) nào.

Truy tìm dòng chảy dữ liệu với CodeQL

Kết quả đáng báo động: 10 lỗ hổng 0-day và 10 mã CVE

Sau khi CodeQL trả về các vị trí tiềm năng, các chuyên gia đã tiến hành xác minh thủ công trên môi trường Sandbox.

  • Case điển hình (CVE-2025-52048): Tại tập tin frappe/desk/doctype/tag/tag.py, phương thức add_tag() cho phép thực thi câu truy vấn SQL tùy ý thông qua tham số dt.

Tổng cộng 10 lỗ hổng SQL Injection mức độ NGUY HIỂM CAO đã được Vendor xác nhận và cấp mã ghi nhận từ CVE-2025-52039 đến CVE-2025-52044CVE-2025-52047 đến CVE-2025-52050.

Xác minh lỗ hổng

Đọc thêm: [Case study] Phát hiện 10 lỗ hổng SQL Injection qua phân tích mã nguồn

Bài học cho doanh nghiệp và lập trình viên

  • Security through Obscurity is a myth: Phần mềm nguồn mở dù được sử dụng rộng rãi nhưng mã nguồn sẵn có cũng giúp tin tặc nghiên cứu lỗ hổng dễ dàng hơn.
  • Nguyên tắc Zero Trust với Input: Developer tuyệt đối không tin tưởng dữ liệu người dùng, luôn phải sàn lọc và sử dụng cơ chế truyền tham số chuẩn của Framework.
  • Cập nhật liên tục: Các quản trị viên cần theo dõi sát sao và cập nhật bản vá ngay khi có thông báo để bảo vệ hệ thống ERP.

Đăng ký ngay để nhận trọn bộ case study

Lưu ý: Bằng việc ấn vào nút đăng ký nhận tài liệu, anh chị đồng ý cung cấp thông tin cá nhân của mình cho VietSunshine, chúng tôi cam kết tuân thủ các mục đích và phạm vi được quy định trong Quyết định 13/2023/QĐ-UBND. Chi tiết về các điều khoản, vui lòng xem TẠI ĐÂY