CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Advisories

SQL Injection và Improper Access Control trong Joomla REST API

CyStack image

vnth4nhnt

security engineer, offensive security enthusiast, always chasing the next exploit.|April 13, 2026
Reading Time: 5 minutes

Đọc bài viết tiếng Anh tại đây (Read the English version here)

SQL Injection và Improper Access Control trong Joomla's REST API

Giới thiệu

Joomla CMS là một trong những hệ quản trị nội dung mã nguồn mở phổ biến nhất, hiện đang vận hành hàng triệu website trên toàn cầu. Kể từ phiên bản 4.0, Joomla đã bổ sung một lớp REST API native, cho phép các ứng dụng bên ngoài – từ headless frontend, mobile backend đến các tích hợp bên thứ ba – tương tác trực tiếp với dữ liệu của hệ thống mà không cần thông qua giao diện quản trị.

Lớp REST API này chia sẻ cùng hệ MVC với giao diện quản trị, song được thiết kế với bộ controller, dispatcher và cơ chế phân quyền độc lập. Sự tách biệt đó dễ tạo ra bất đối xứng về mức độ bảo vệ: cùng một resource được kiểm soát chặt chẽ ở giao diện quản trị nhưng lại bị bỏ sót ở lớp API. Cả hai lỗ hổng mà CyStack phát hiện đều là biểu hiện của mô hình này.

Tóm tắt

Trong quá trình nghiên cứu REST API của Joomla CMS, CyStack đã phát hiện hai lỗ hổng độc lập ở các webservice endpoint. Cả hai đã được báo cáo cho Joomla Security Strike Team và được vá trong Joomla 5.4.4 và 6.0.4, phát hành ngày 31/03/2026.

CVE Loại hình lỗ hổng Phạm vi Phiên bản bị ảnh hưởng Phiên bản vá
CVE-2026-21630 SQL Injection (CWE-89) com_content articles endpoint 4.0.0 – 5.4.3
6.0.0 – 6.0.3
5.4.4, 6.0.4
CVE-2026-23899 Improper Access Control (CWE-284) com_config endpoints 4.0.0 – 5.4.3
6.0.0 – 6.0.3
5.4.4, 6.0.4

 

Chuyên gia từ CyStack khuyến nghị quản trị viên đang vận hành Joomla nâng cấp sớm nhất có thể.

CVE-2026-21630 – SQL Injection trong com_content API

Tổng quan

Endpoint GET /api/index.php/v1/content/articles nhận hai parameter list[ordering] và list[direction] từ client nhưng không kiểm tra giá trị theo whitelist của model. Các giá trị này sau đó được đưa vào mệnh đề ORDER BY của query qua một hàm escape chỉ an toàn với quoted string literal – không an toàn khi dùng cho identifier hoặc expression như trong ORDER BY.

Bất kỳ người dùng nào có quyền gọi API đều có thể chèn SQL expression tùy ý vào query để truy xuất dữ liệu từ database – bao gồm password hash của tài khoản admin và active session token. CyStack đã xác nhận khai thác bằng cả time-based và boolean-based blind injection trên instance Joomla 6.0.3.

Lỗ hổng là regression của CVE-2025-22207 – cùng pattern đã được vá ở một component khác, nhưng bản vá khi đó chưa được mở rộng sang toàn bộ API surface. Đây cũng là lý do Joomla đưa bản vá CVE-2026-21630 vào base controller của API (ApiController) thay vì chỉ sửa riêng com_content.

Tác động

  • Quyền đọc toàn bộ database nhờ SQL injection: Khai thác blind SQL injection qua com_content API để truy xuất toàn bộ dữ liệu từ database Joomla, bao gồm các bảng #__users#__session, configuration và dữ liệu của mọi extension dùng chung database.
  • Trích xuất password hash của Admin: bcrypt hash của tài khoản Super User bị trích xuất và có thể crack offline để chiếm quyền quản trị Joomla.
  • Chiếm quyền của các phiên đăng nhập đang hoạt động: các session token đang hoạt động trong bảng #__session có thể lấy trực tiếp, cho phép chiếm phiên administrator mà không cần crack password.
  • Leo thang quyền lên Super User: chuỗi khai thác từ tài khoản API cấp thấp (chỉ cần quyền core.login.api) dẫn tới full site takeover.
  • Lộ lọt dữ liệu nhạy cảm: toàn bộ nội dung website, thông tin người dùng (PII) và các secret lưu trong database đều bị phơi bày, đáp ứng tiêu chí data breach theo GDPR và các quy định bảo mật tương đương.

Credit: Antonio Morales (GitHub Security Lab Taskflow Agent) và vnth4nhnt (CyStack).

CVE-2026-23899 – Improper Access Check trong com_config API

Tổng quan

Controller API của com_config không check authorization core.admin trước khi trả về hoặc cho phép sửa đổi global configuration. Trong khi giao diện administrator yêu cầu permission này ở cả hai tầng dispatcher và controller, lớp API chỉ kế thừa check core.edit mặc định từ base controller.

Hệ quả là bất kỳ người dùng nào có quyền truy cập API đều có thể đọc toàn bộ configuration của Joomla – bao gồm database credentials, secret key phục vụ session và token integrity, SMTP credentials, và các component-level token như update token của com_joomlaupdate. Endpoint cập nhật configuration cũng chỉ yêu cầu core.edit, cho phép người dùng từ nhóm Editor trở lên sửa đổi global configuration.

Mặc định, Joomla chỉ cấp quyền core.login.api cho nhóm Super User, nên attack surface ban đầu khá hạn chế. Tuy nhiên, các deployment thực tế thường mở quyền API cho user group cấp thấp hơn để phục vụ headless CMS, mobile backend và third-party integration – trong những môi trường này, lỗ hổng cho phép rò rỉ toàn bộ thông tin nhạy cảm từ một tài khoản không có đặc quyền administrator.

Tác động

  • Lỗ hổng tiết lộ thông tin Joomla configuration: Bất kỳ tài khoản API nào cũng đọc được toàn bộ global configuration của Joomla, bao gồm các khóa bí mật và credentials hạ tầng phía sau.
  • Lộ lọt site secret key: Khóa HMAC dùng cho session và authentication token bị lộ, cho phép attacker forge API bearer token hợp lệ cho bất kỳ tài khoản nào có Joomla Token được cấu hình, kể cả Super User.
  • Lộ lọt database credentials: Thông tin đăng nhập MySQL/MariaDB/PostgreSQL bị lộ, cho phép truy cập trực tiếp database nếu cổng tiếp cận được từ mạng ngoài.
  • Lộ lọt SMTP credentials: Thông tin mail server bị lộ, có thể dùng để gửi phishing email từ domain tin cậy của hệ thống nạn nhân.
  • Configuration tampering bởi người dùng có quyền hạn chế: Người dùng từ nhóm Editor trở lên có thể sửa đổi global configuration, bao gồm đổi sendmail path (dẫn đến Remote Code Execution khi chain với vector khác), bật debug mode làm lộ stack trace, hoặc chỉnh sửa CORS/session settings.
  • Lộ lọt Update token: Token bí mật của com_joomlaupdate bị lộ, có khả năng thao túng quy trình tự cập nhật Joomla (auto-update endpoint).

Credit: vnth4nhnt (CyStack).

Khuyến nghị

  1. Nâng cấp Joomla lên phiên bản 5.4.4 hoặc 6.0.4.
  2. Sau khi nâng cấp, rotate secret key, database credentials và SMTP credentials.
  3. Rà soát API access log và các thay đổi configuration trước thời điểm vá để phát hiện dấu hiệu khai thác.
  4. Thu hẹp danh sách user group được cấp quyền core.login.api về mức tối thiểu cần thiết.

Timeline

Ngày Sự kiện
05/03/2026 Lỗ hổng SQL Injection được báo cáo bởi Antonio Morales (GitHub Security Lab Taskflow Agent)
09/03/2026 Lỗ hổng SQL Injection được báo cáo độc lập bởi vnth4nhnt (CyStack)
09/03/2026 Lỗ hổng Improper Access Check được báo cáo bởi vnth4nhnt (CyStack)
31/03/2026 Joomla 5.4.4 và 6.0.4 phát hành, vá cả hai lỗ hổng. Advisory được công bố.

Tham khảo

Bài viết liên quan

CVE-2025-59837 Analysis: How I Bypassed an Astro Security Patch

Reading Time: 2 minutes  CyStack Advisory ID CSA-2025-01 CVE IDs CVE-2025-59837 Severity High CVSS v3 Base 7.2   Recently, I analyzed a security […]

Stored XSS leads to account takeover in Flarum

Reading Time: 2 minutesCyStack Advisory ID CSA-2022-01 CVE IDs CVE-2022-41938 Severity Critical CVSS v3 Base 9.0 Synopsis CyStack’s researchers recently discovered a Stored […]

Cyclos < 4.14.15 – Remote code execution

Reading Time: 3 minutesCyStack Advisory ID CSA-2021-01 CVE IDs CVE-2021-44832 Severity Critical CVSS v3 Base 10.0 Synopsis Cyclos is a payment software created […]