REDAXO: Unwhitelisted ORDER BY Column in rex_list Allows Authenticated Column Enumeration
Summary
The rex_list component reads the SQL sort column directly from the sort GET parameter without validating it against the set of columns declared sortable via setColumnSortable(). Although the value is wrapped in backticks via escapeIdentifier() (preventing classical SQL injection), this still allows any authenticated backend user to ORDER BY any column in the query's FROM tables, including unselected sensitive columns such as password from the rex_user table, and perform error-based column enumeration.
Details
File: redaxo/src/core/lib/list.php:976-982 — getSortColumn() returns the raw request parameter without whitelist check:
public function getSortColumn($default = null)
{
if (rex_request('list', 'string') == $this->getName()) {
return rex_request('sort', 'string', $default); // NO validation against sortable columns
}
return $default;
}
File: redaxo/src/core/lib/list.php:899-911 — prepareQuery() uses it directly in the ORDER BY clause:
protected function prepareQuery($query, array $defaultSort = [])
{
$sortColumn = $this->getSortColumn();
if ('' != $sortColumn) {
$sql = rex_sql::factory($this->db);
$sortColumn = $sql->escapeIdentifier($sortColumn); // backtick-wraps, but no whitelist
if ($defaultSort || false === stripos($query, ' ORDER BY ')) {
$query .= ' ORDER BY ' . $sortColumn . ' ' . $sortType;
}
}
The users list queries rex_user which contains password, previous_passwords, password_change_required — not in the SELECT. Specifying a non-existent column name produces a MySQL Unknown column exception whose message is propagated to the user, confirming or denying column existence.
PoC
Column enumeration (error-based):
GET /redaxo/index.php?page=users&list=<list_name>&sort=nonexistent_col&sorttype=asc
Response will contain: Unknown column 'nonexistent_col' in 'order clause'
Sort by password hash (data ordering leak):
GET /redaxo/index.php?page=users&list=<list_name>&sort=password&sorttype=asc
Users are silently reordered by their Argon2 password hash.
Impact
Authenticated backend users (non-admin) can enumerate database column names of internal tables via error messages and manipulate query ordering to include sensitive unselected columns. While this does not allow arbitrary SQL execution due to backtick escaping, it constitutes an information disclosure vulnerability enabling targeted further attacks.
Fix
Validate the sort request parameter against the whitelist of columns registered with setColumnSortable() before use in the query:
public function getSortColumn($default = null)
{
if (rex_request('list', 'string') == $this->getName()) {
$requested = rex_request('sort', 'string', $default);
if ($requested !== null && $this->hasColumnOption($requested, REX_LIST_OPT_SORT)) {
return $requested;
}
}
return $default;
}
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de Composer | redaxo/source | < 5.21.2 | 5.21.2 |
Referencias
- https://github.com/redaxo/core/security/advisories/GHSA-4f5f-j737-pm58
- https://nvd.nist.gov/vuln/detail/CVE-2026-62998
- https://github.com/redaxo/core/pull/6580
- https://github.com/redaxo/core/commit/c44ba5206a28427984100c994010f2aaa6703efd
- https://github.com/redaxo/core
- https://github.com/redaxo/core/releases/tag/5.21.2
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N- Debilidad (CWE)
CWE-20, CWE-200- Plataforma
- Composer
- Paquete
redaxo/source- Publicada
- 24.09.2026
- Actualizado
- 11.10.2026 10:22
Fuentes y licencias
OSV / GitHub Advisory Database - GHSA-4f5f-j737-pm58 - CC BY 4.0
Historial de vulnerabilidades: redaxo/source
Todas las vulnerabilidades publicadas de este paquete (Paquete de Composer), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 18
- Primera → última
- 02.2024 09.2026
- Sin corrección
- 3
- Explotada en ataques
- 0
Distribución por gravedad
- Alta 4
- Media 11
- Baja 3
Divulgaciones por año
- 2024: 3
- 2025: 7
- 2026: 8
-
REDAXO: Unwhitelisted ORDER BY Column in rex_list Allows Authenticated Column Enumeration esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.