CVE-2026-28507
Idno: Remote Code Execution via Chained Import File Write and Template Path Traversal
Idno is a social publishing platform. Prior to version 1.6.4, there is a remote code execution vulnerability via chained import file write and template path traversal. This issue has been patched in version 1.6.4.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.6
Idno: Remote Code Execution via Chained Import File Write and Template Path Traversal
Idno is a social publishing platform. Prior to version 1.6.4, there is a remote code execution vulnerability via chained import file write and template path traversal. This issue has been patched in version 1.6.4.
- Record
CVE-2026-28507- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N - Weakness
- CWE-78
- Updated
- 2026-11-02
EUVDEUVD-2026-9983
8.6
Idno is a social publishing platform. Prior to version 1.6.4, there is a remote code execution vulnerability via chained import file write and template path traversal. This issue has been patched in version 1.6.4.
- Record
EUVD-2026-9983- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-37j7-56xc-c468
8.6
Idno Vulnerable to Remote Code Execution via Chained Import File Write and Template Path Traversal
Affected Versions: Tested on current dev branch (build fingerprint 505[...]7bd86)
CVSS v4 Score: 8.6 (CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
Privileges Required: Web application admin account (for file write), any authenticated user (for RCE trigger)
Summary
Two separate vulnerabilities in Idno can be chained to achieve RCE from a web application admin account. A web application admin can cause the server to fetch an attacker-controlled URL during WordPress import processing, writing a PHP file to the server's temp directory. The admin or a separate, lower-privileged authenticated user can then trigger inclusion of that file via an unsanitized template name parameter, executing arbitrary operating system commands as the web server user.
Vulnerability 1: Arbitrary PHP File Write via WordPress Import (SSRF + File Write)
Location
Idno/Core/Migration.php — importImagesFromBodyHTML()
Required Privilege
Web application admin (any user with the admin flag set in the database, accessible via the Idno admin UI).
Description
When a web application admin imports a WordPress eXtended RSS (WXR) XML file via POST /admin/import/, the application processes <img> tags in post body content and attempts to re-host images locally. The functionimportImagesFromBodyHTML() fetches each image URL using fopen() and writes the response body to a temp file whose name is derived from the URL.
The filename is constructed as:
$name = md5($src);
$newname = $dir . $name . basename($src);
Where $src is the full image URL from the XML and basename($src) is the filename component of that URL. Because basename() is applied to the URL string rather than a sanitized path, an attacker who controls the URL can make basename() return any filename — including one ending in .tpl.php.
The URL filter is:
if (substr_count($src, $src_url)) {
Where $src_url is the hardcoded string 'wordpress.com'. This check uses substr_count rather than comparing the URL's hostname, so it passes for any URL that contains the string wordpress.com anywhere — including in a path component such as http://attacker.com/wordpress.com/shell.tpl.php.
The file write itself is:
if (@file_put_contents($newname, fopen($src, 'r'))) {
fopen($src, 'r') opens the attacker URL as a stream. file_put_contents reads from the stream in chunks and writes to disk. Because the attacker controls the HTTP server, they can hold the TCP connection open after sending the PHP payload — causing file_put_contents to block while the file sits on disk with its full content. The file is only deleted after file_put_contents returns:
if ($file = File::createFromFile($newname, basename($src), $mime, true)) {
$newsrc = ...;
@unlink($newname); // only runs after file_put_contents returns
}
By holding the connection open, the attacker controls how long the file exists on disk, creating an exploitable window.
The import endpoint itself adds an additional timing buffer:
// Idno/Pages/Admin/Import.php
session_write_close();
$this->forward(...); // HTTP response sent to browser here
ignore_user_abort(true);
sleep(10); // 10 second delay before import runs
set_time_limit(0);
Migration::importWordPressXML($xml);
The browser receives a redirect response immediately, and the actual import runs in the background after 10 seconds.
The resulting file is written to PHP's temp directory (typically /tmp from the PHP process's perspective, which on systemd-managed Apache is a private mount at /tmp/systemd-private-{id}-apache2.service-{id}/tmp/). The filename is predictable: md5($full_url) . basename($url).
Prerequisites
- Text plugin must be enabled (the import function returns early without it) (this…
- Record
GHSA-37j7-56xc-c468- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N - Weakness
- CWE-78
- Updated
- 2026-11-02
NVD
8.6
Idno is a social publishing platform. Prior to version 1.6.4, there is a remote code execution vulnerability via chained import file write and template path traversal. This issue has been patched in version 1.6.4.
- Record
CVE-2026-28507- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 7.2 High
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSV
8.6
Idno: Remote Code Execution via Chained Import File Write and Template Path Traversal
Idno is a social publishing platform. Prior to version 1.6.4, there is a remote code execution vulnerability via chained import file write and template path traversal. This issue has been patched in version 1.6.4.
- Record
CVE-2026-28507- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N - Weakness
- CWE-78
- Updated
- 2026-11-02
OSVGHSA-37j7-56xc-c468
8.6
Idno Vulnerable to Remote Code Execution via Chained Import File Write and Template Path Traversal
Affected Versions: Tested on current dev branch (build fingerprint 505[...]7bd86)
CVSS v4 Score: 8.6 (CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
Privileges Required: Web application admin account (for file write), any authenticated user (for RCE trigger)
Summary
Two separate vulnerabilities in Idno can be chained to achieve RCE from a web application admin account. A web application admin can cause the server to fetch an attacker-controlled URL during WordPress import processing, writing a PHP file to the server's temp directory. The admin or a separate, lower-privileged authenticated user can then trigger inclusion of that file via an unsanitized template name parameter, executing arbitrary operating system commands as the web server user.
Vulnerability 1: Arbitrary PHP File Write via WordPress Import (SSRF + File Write)
Location
Idno/Core/Migration.php — importImagesFromBodyHTML()
Required Privilege
Web application admin (any user with the admin flag set in the database, accessible via the Idno admin UI).
Description
When a web application admin imports a WordPress eXtended RSS (WXR) XML file via POST /admin/import/, the application processes <img> tags in post body content and attempts to re-host images locally. The functionimportImagesFromBodyHTML() fetches each image URL using fopen() and writes the response body to a temp file whose name is derived from the URL.
The filename is constructed as:
$name = md5($src);
$newname = $dir . $name . basename($src);
Where $src is the full image URL from the XML and basename($src) is the filename component of that URL. Because basename() is applied to the URL string rather than a sanitized path, an attacker who controls the URL can make basename() return any filename — including one ending in .tpl.php.
The URL filter is:
if (substr_count($src, $src_url)) {
Where $src_url is the hardcoded string 'wordpress.com'. This check uses substr_count rather than comparing the URL's hostname, so it passes for any URL that contains the string wordpress.com anywhere — including in a path component such as http://attacker.com/wordpress.com/shell.tpl.php.
The file write itself is:
if (@file_put_contents($newname, fopen($src, 'r'))) {
fopen($src, 'r') opens the attacker URL as a stream. file_put_contents reads from the stream in chunks and writes to disk. Because the attacker controls the HTTP server, they can hold the TCP connection open after sending the PHP payload — causing file_put_contents to block while the file sits on disk with its full content. The file is only deleted after file_put_contents returns:
if ($file = File::createFromFile($newname, basename($src), $mime, true)) {
$newsrc = ...;
@unlink($newname); // only runs after file_put_contents returns
}
By holding the connection open, the attacker controls how long the file exists on disk, creating an exploitable window.
The import endpoint itself adds an additional timing buffer:
// Idno/Pages/Admin/Import.php
session_write_close();
$this->forward(...); // HTTP response sent to browser here
ignore_user_abort(true);
sleep(10); // 10 second delay before import runs
set_time_limit(0);
Migration::importWordPressXML($xml);
The browser receives a redirect response immediately, and the actual import runs in the background after 10 seconds.
The resulting file is written to PHP's temp directory (typically /tmp from the PHP process's perspective, which on systemd-managed Apache is a private mount at /tmp/systemd-private-{id}-apache2.service-{id}/tmp/). The filename is predictable: md5($full_url) . basename($url).
Prerequisites
- Text plugin must be enabled (the import function returns early without it) (this…
- Record
GHSA-37j7-56xc-c468- CVSS 4.0
- 8.6 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N - Weakness
- CWE-78
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
idno/knownPackagist |
before 1.6.4 | 1.6.4 |
idno/knownPackagist |
before 1.6.4, plus listed versions 1.0.01.0.0-rc.11.0.0-rc.31.2.21.51.6.21.6.3 |
1.6.4 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-28507 is a high vulnerability (CVSS 8.6) in Idno, published March 2, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.77%, the 55th percentile. Fixed in idno/known 1.6.4.
References
Left out here: the rest of 2 source descriptions. The JSON record has them.