/

CVE-2026-63152

Severity:

HIGH RISK

(8.1)

Second-Order SQL Injection (CWE-89) in Agora Project

CVE-2026-63152

Deferred

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Unauthorized Database Access or Manipulation

Severity:

HIGH RISK

(8.1)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Omnispace Agora Project contains a second-order SQL injection flaw in the _idCategoryFilter parameter, where attacker-controlled input is stored in a session and later incorporated into a SQL statement without parameterization. An authenticated attacker who can submit and persist a filter value may trigger unauthorized database access or manipulation when the stored filter is subsequently processed.

Omnispace Agora Project contains a second-order SQL injection flaw in the _idCategoryFilter parameter, where attacker-controlled input is stored in a session and later incorporated into a SQL statement without parameterization. An authenticated attacker who can submit and persist a filter value may trigger unauthorized database access or manipulation when the stored filter is subsequently processed.

Affected context

The vulnerability occurs in category filtering logic involving _idCategoryFilter and app/Common/MdlCategory.php. It becomes risky when authenticated users can influence a filter value, the value is persisted in session state, and later application processing concatenates that value into a SQL query rather than binding it as data.

The vulnerability occurs in category filtering logic involving _idCategoryFilter and app/Common/MdlCategory.php. It becomes risky when authenticated users can influence a filter value, the value is persisted in session state, and later application processing concatenates that value into a SQL query rather than binding it as data.

Exploit preconditions

  • Attack surface: Authenticated application functionality that accepts category filter input
  • Required access: Valid user authentication and permission to submit or persist the relevant filter value
  • Trigger point: Later application processing that applies the stored session filter
  • Why exploitation is possible: Persisted input is reused in a SQL statement through string concatenation without parameterized query binding
  • Attack surface: Authenticated application functionality that accepts category filter input
  • Required access: Valid user authentication and permission to submit or persist the relevant filter value
  • Trigger point: Later application processing that applies the stored session filter
  • Why exploitation is possible: Persisted input is reused in a SQL statement through string concatenation without parameterized query binding

Why this happens

The underlying bug is a second-order SQL injection pattern. Input is accepted and stored without being treated as permanently untrusted, then later reaches SQL construction where it is concatenated into a statement instead of passed through a parameterized interface. This maps to CWE-89: Improper Neutralization of Special Elements used in an SQL Command, because data supplied through an earlier application flow can alter the meaning of a later database query.

The underlying bug is a second-order SQL injection pattern. Input is accepted and stored without being treated as permanently untrusted, then later reaches SQL construction where it is concatenated into a statement instead of passed through a parameterized interface. This maps to CWE-89: Improper Neutralization of Special Elements used in an SQL Command, because data supplied through an earlier application flow can alter the meaning of a later database query.

Potential impact

  • An attacker may read unauthorized database records
  • An attacker could alter or delete data permitted by the database account
  • Application data integrity may be compromised
  • Sensitive information could be exposed through query results or error behavior
  • Database availability may be affected by malicious query manipulation
  • An attacker may read unauthorized database records
  • An attacker could alter or delete data permitted by the database account
  • Application data integrity may be compromised
  • Sensitive information could be exposed through query results or error behavior
  • Database availability may be affected by malicious query manipulation

General mitigation guidance

Mitigation generally focuses on making SQL data boundaries explicit throughout the full lifecycle of user-controlled values.

Common defensive patterns include:

  • Use parameterized queries or prepared statements for every database operation
  • Treat session-persisted values as untrusted input when they are read back
  • Apply allowlist validation for category identifiers and filter formats
  • Use typed query-building abstractions that separate data from SQL syntax
  • Restrict database accounts to the minimum required read and write privileges
  • Avoid exposing detailed database errors to users
  • Enforce secure defaults for filters and reject unexpected values before query execution

Mitigation generally focuses on making SQL data boundaries explicit throughout the full lifecycle of user-controlled values.

Common defensive patterns include:

  • Use parameterized queries or prepared statements for every database operation
  • Treat session-persisted values as untrusted input when they are read back
  • Apply allowlist validation for category identifiers and filter formats
  • Use typed query-building abstractions that separate data from SQL syntax
  • Restrict database accounts to the minimum required read and write privileges
  • Avoid exposing detailed database errors to users
  • Enforce secure defaults for filters and reject unexpected values before query execution

How teams detect issues like this

Detection can combine static analysis, code review, and runtime monitoring:

  • Search for string concatenation, interpolation, or formatting used to construct SQL statements
  • Trace request and session values through storage and later query execution
  • Review category filtering code for missing parameter binding and weak allowlist validation
  • Add policy checks that require approved database access APIs for application queries
  • Monitor unusual filter activity, database errors, and access patterns involving authenticated accounts
  • Use automated security analysis tools to identify data flows from request or session state into SQL construction

Detection can combine static analysis, code review, and runtime monitoring:

  • Search for string concatenation, interpolation, or formatting used to construct SQL statements
  • Trace request and session values through storage and later query execution
  • Review category filtering code for missing parameter binding and weak allowlist validation
  • Add policy checks that require approved database access APIs for application queries
  • Monitor unusual filter activity, database errors, and access patterns involving authenticated accounts
  • Use automated security analysis tools to identify data flows from request or session state into SQL construction

Sources

SourceLink
github.comgithub.com/xech/agora-project/releases/tag/26.10
agora-project.netagora-project.net/
vulncheck.comvulncheck.com/advisories/omnispace-agora-project-second-order-sql-injection-via-idcategoryfilter

Frequently asked

questions

It may be exploitable through the application's authenticated interface when a user can submit a filter value that is persisted and later reused in database processing.

The attacker generally needs valid authentication and sufficient application access to set or influence the affected category filter.

Use parameterized queries or prepared statements for all SQL operations, including queries built from values retrieved from sessions or other persistent state.

Treat stored input as untrusted, enforce allowlist validation, use query APIs that separate data from SQL syntax, and apply least-privilege database permissions.

It may be exploitable through the application's authenticated interface when a user can submit a filter value that is persisted and later reused in database processing.

The attacker generally needs valid authentication and sufficient application access to set or influence the affected category filter.

Use parameterized queries or prepared statements for all SQL operations, including queries built from values retrieved from sessions or other persistent state.

Treat stored input as untrusted, enforce allowlist validation, use query APIs that separate data from SQL syntax, and apply least-privilege database permissions.

Find out what's already
exploitable in your codebase.