<?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://db.gcve.eu</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:51:26 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-52793</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-52793</link>
      <description>&lt;p&gt;Froxlor is open source server administration software. Prior to 2.3.7, the API authentication path in lib/Froxlor/Api/FroxlorRPC.php and FroxlorRPC::validateAuth accepts an API key and secret for an administrator or customer account without checking type_2fa, validating a TOTP code, or invoking FroxlorTwoFactorAuth. The web interface requires a second factor for accounts with two-factor authentication enabled, but the API grants access after validating only the API credentials, expiration, API permission, and account status. An attacker who obtains an API key and secret for a protected account can call the available API functions without supplying the configured second factor, which can expose or modify customer data, domains, email and FTP accounts, databases, DNS records, and certificate material. This issue is fixed in version 2.3.7.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Froxlor is open source server administration software. Prior to 2.3.7, the API authentication path in lib/Froxlor/Api/FroxlorRPC.php and FroxlorRPC::validateAuth accepts an API key and secret for an administrator or customer account without checking type_2fa, validating a TOTP code, or invoking FroxlorTwoFactorAuth. The web interface requires a second factor for accounts with two-factor authentication enabled, but the API grants access after validating only the API credentials, expiration, API permission, and account status. An attacker who obtains an API key and secret for a protected account can call the available API functions without supplying the configured second factor, which can expose or modify customer data, domains, email and FTP accounts, databases, DNS records, and certificate material. This issue is fixed in version 2.3.7.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-52793</guid>
    </item>
    <item>
      <title>GHSA-f9rx-7wf7-jr36 — Froxlor's API Authentication bypasses 2FA Authentication</title>
      <link>https://db.gcve.eu/vuln/ghsa-f9rx-7wf7-jr36</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: froxlor/froxlor&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Froxlor&amp;#39;s API authentication (`FroxlorRPC::validateAuth`) does not enforce Two-Factor Authentication. When a user (admin or customer) enables 2FA on their account, the web UI correctly requires a TOTP code after password verification. However, the API accepts requests authenticated with only an API key and secret — no TOTP challenge is issued, checked, or required.&lt;/p&gt;
&lt;p&gt;An attacker who obtains a leaked API key+secret for a 2FA-protected account has full access to all API operations without providing a second factor.&lt;/p&gt;
&lt;p&gt;## Affected Code&lt;/p&gt;
&lt;p&gt;**Web UI — 2FA enforced** (`index.php:82-149`):&lt;/p&gt;
&lt;p&gt;```php
if ($result[&amp;#39;type_2fa&amp;#39;] != 0) {
    // Redirects to 2FA input page
    // Calls FroxlorTwoFactorAuth::verifyCode()
    // Login is NOT completed without valid TOTP code
}
```&lt;/p&gt;
&lt;p&gt;**API — 2FA absent** (`lib/Froxlor/Api/FroxlorRPC.php:75-105`):&lt;/p&gt;
&lt;p&gt;```php
private static function validateAuth(string $key, string $secret): bool
{
    $sel_stmt = Database::prepare(&amp;#34;
        SELECT ak.*, a.api_allowed as admin_api_allowed,
               c.api_allowed as cust_api_allowed, c.deactivated
        FROM `api_keys` ak
        LEFT JOIN `panel_admins` a ON a.adminid = ak.adminid
        LEFT JOIN `panel_customers` c ON c.customerid = ak.customerid
        WHERE `apikey` = :ak AND `secret` = :as
    &amp;#34;);
    $result = Database::pexecute_first($sel_stmt, [&amp;#39;ak&amp;#39; =&amp;gt; $key, &amp;#39;as&amp;#39; =&amp;gt; $secret]);
    if ($result) {
        if ($result[&amp;#39;apikey&amp;#39;] == $key &amp;amp;&amp;amp; $result[&amp;#39;secret&amp;#39;] == $secret
            &amp;amp;&amp;amp; ($result[&amp;#39;val…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: froxlor/froxlor&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Froxlor&amp;#39;s API authentication (`FroxlorRPC::validateAuth`) does not enforce Two-Factor Authentication. When a user (admin or customer) enables 2FA on their account, the web UI correctly requires a TOTP code after password verification. However, the API accepts requests authenticated with only an API key and secret — no TOTP challenge is issued, checked, or required.&lt;/p&gt;
&lt;p&gt;An attacker who obtains a leaked API key+secret for a 2FA-protected account has full access to all API operations without providing a second factor.&lt;/p&gt;
&lt;p&gt;## Affected Code&lt;/p&gt;
&lt;p&gt;**Web UI — 2FA enforced** (`index.php:82-149`):&lt;/p&gt;
&lt;p&gt;```php
if ($result[&amp;#39;type_2fa&amp;#39;] != 0) {
    // Redirects to 2FA input page
    // Calls FroxlorTwoFactorAuth::verifyCode()
    // Login is NOT completed without valid TOTP code
}
```&lt;/p&gt;
&lt;p&gt;**API — 2FA absent** (`lib/Froxlor/Api/FroxlorRPC.php:75-105`):&lt;/p&gt;
&lt;p&gt;```php
private static function validateAuth(string $key, string $secret): bool
{
    $sel_stmt = Database::prepare(&amp;#34;
        SELECT ak.*, a.api_allowed as admin_api_allowed,
               c.api_allowed as cust_api_allowed, c.deactivated
        FROM `api_keys` ak
        LEFT JOIN `panel_admins` a ON a.adminid = ak.adminid
        LEFT JOIN `panel_customers` c ON c.customerid = ak.customerid
        WHERE `apikey` = :ak AND `secret` = :as
    &amp;#34;);
    $result = Database::pexecute_first($sel_stmt, [&amp;#39;ak&amp;#39; =&amp;gt; $key, &amp;#39;as&amp;#39; =&amp;gt; $secret]);
    if ($result) {
        if ($result[&amp;#39;apikey&amp;#39;] == $key &amp;amp;&amp;amp; $result[&amp;#39;secret&amp;#39;] == $secret
            &amp;amp;&amp;amp; ($result[&amp;#39;val…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-f9rx-7wf7-jr36</guid>
    </item>
  </channel>
</rss>
