<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 12:10:52 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-55578</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-55578</link>
      <description>&lt;p&gt;Pheditor is a single-file editor and file manager written in PHP. From version 2.0.1 to before version 2.0.6, the terminal feature in Pheditor uses an incomplete character blocklist to sanitize user-supplied commands before passing them to shell_exec(). After the fix for GHSA-9643-6xjp-vx57 (which added $ to the blocklist), the characters | (single pipe), ` (backtick), and the newline byte (0x0A) remain unblocked. An authenticated user with the terminal permission (enabled by default) can leverage any of these to bypass the TERMINAL_COMMANDS allowlist and execute arbitrary OS commands as the web server user. This issue has been patched in version 2.0.6.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Pheditor is a single-file editor and file manager written in PHP. From version 2.0.1 to before version 2.0.6, the terminal feature in Pheditor uses an incomplete character blocklist to sanitize user-supplied commands before passing them to shell_exec(). After the fix for GHSA-9643-6xjp-vx57 (which added $ to the blocklist), the characters | (single pipe), ` (backtick), and the newline byte (0x0A) remain unblocked. An authenticated user with the terminal permission (enabled by default) can leverage any of these to bypass the TERMINAL_COMMANDS allowlist and execute arbitrary OS commands as the web server user. This issue has been patched in version 2.0.6.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-55578</guid>
    </item>
    <item>
      <title>GHSA-wg4w-wr5q-6vjc — Pheditor: Incomplete command sanitization in terminal feature allows RCE via pipe operator, backtick substitution, and…</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-wg4w-wr5q-6vjc</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: pheditor/pheditor&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The terminal feature in Pheditor uses an incomplete character blocklist to sanitize user-supplied commands before passing them to `shell_exec()`. After the fix for GHSA-9643-6xjp-vx57 (which added `$` to the blocklist), the characters `|` (single pipe), `` ` `` (backtick), and the newline byte (`0x0A`) remain unblocked. An authenticated user with the `terminal` permission (enabled by default) can leverage any of these to bypass the `TERMINAL_COMMANDS` allowlist and execute arbitrary OS commands as the web server user.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Tested repository: https://github.com/pheditor/pheditor&lt;/p&gt;
&lt;p&gt;Tested commit: `e538f05b6faec99e5b23726bc9c17d6b57774297` (current HEAD on `main`)&lt;/p&gt;
&lt;p&gt;Affected version: Pheditor 2.0.1+&lt;/p&gt;
&lt;p&gt;The terminal handler receives `$_POST[&amp;#39;command&amp;#39;]` and passes it to `shell_exec()` at `pheditor.php:586`:&lt;/p&gt;
&lt;p&gt;```php
$output = shell_exec((empty($dir) ? null : &amp;#39;cd &amp;#39; . escapeshellarg($dir) . &amp;#39; &amp;amp;&amp;amp; &amp;#39;) . $command . &amp;#39; &amp;amp;&amp;amp; echo \ ; pwd&amp;#39;);
```&lt;/p&gt;
&lt;p&gt;The blocklist at `pheditor.php:557` checks for `&amp;amp;`, `;`, `||`, and `$`, but does not block `|`, `` ` ``, or newline (`0x0A`):&lt;/p&gt;
&lt;p&gt;```php
if (strpos($command, &amp;#39;&amp;amp;&amp;#39;) !== false || strpos($command, &amp;#39;;&amp;#39;) !== false || strpos($command, &amp;#39;||&amp;#39;) !== false || strpos($command, &amp;#39;$&amp;#39;) !== false) {
    echo json_error(&amp;#34;Illegal character(s) in command (&amp;amp; ; ||)\n&amp;#34;);
    exit;
}
```&lt;/p&gt;
&lt;p&gt;The `TERMINAL_COMMANDS` prefix check at `pheditor.php:566-573` only validates that the command starts with an allowed name. All three bypasses start with a whitelisted command…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: pheditor/pheditor&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The terminal feature in Pheditor uses an incomplete character blocklist to sanitize user-supplied commands before passing them to `shell_exec()`. After the fix for GHSA-9643-6xjp-vx57 (which added `$` to the blocklist), the characters `|` (single pipe), `` ` `` (backtick), and the newline byte (`0x0A`) remain unblocked. An authenticated user with the `terminal` permission (enabled by default) can leverage any of these to bypass the `TERMINAL_COMMANDS` allowlist and execute arbitrary OS commands as the web server user.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Tested repository: https://github.com/pheditor/pheditor&lt;/p&gt;
&lt;p&gt;Tested commit: `e538f05b6faec99e5b23726bc9c17d6b57774297` (current HEAD on `main`)&lt;/p&gt;
&lt;p&gt;Affected version: Pheditor 2.0.1+&lt;/p&gt;
&lt;p&gt;The terminal handler receives `$_POST[&amp;#39;command&amp;#39;]` and passes it to `shell_exec()` at `pheditor.php:586`:&lt;/p&gt;
&lt;p&gt;```php
$output = shell_exec((empty($dir) ? null : &amp;#39;cd &amp;#39; . escapeshellarg($dir) . &amp;#39; &amp;amp;&amp;amp; &amp;#39;) . $command . &amp;#39; &amp;amp;&amp;amp; echo \ ; pwd&amp;#39;);
```&lt;/p&gt;
&lt;p&gt;The blocklist at `pheditor.php:557` checks for `&amp;amp;`, `;`, `||`, and `$`, but does not block `|`, `` ` ``, or newline (`0x0A`):&lt;/p&gt;
&lt;p&gt;```php
if (strpos($command, &amp;#39;&amp;amp;&amp;#39;) !== false || strpos($command, &amp;#39;;&amp;#39;) !== false || strpos($command, &amp;#39;||&amp;#39;) !== false || strpos($command, &amp;#39;$&amp;#39;) !== false) {
    echo json_error(&amp;#34;Illegal character(s) in command (&amp;amp; ; ||)\n&amp;#34;);
    exit;
}
```&lt;/p&gt;
&lt;p&gt;The `TERMINAL_COMMANDS` prefix check at `pheditor.php:566-573` only validates that the command starts with an allowed name. All three bypasses start with a whitelisted command…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-wg4w-wr5q-6vjc</guid>
    </item>
  </channel>
</rss>
