CVE-2023-3218 (PHP, published 2023-06-13T11:15Z)
Description: value: Race Condition within a Thread in GitHub repository it-novum/openitcockpit prior to 4.6.5.
Severity: nan (CVSS v3 base score: 4.4)
Weakness: CWE-366 \u2014 Race Condition within a Thread
If two threads of execution use a resource simultaneously, there exists the possibility that resources may be used while invalid, in turn making the state of execution undefined.
Repository: https://github.com/it-novum/openitcockpit
Files changed:
config/Migrations/20230606131052_UniqueIndexForIsUnique.php
plugins/GrafanaModule/config/Migrations/20230606131738_UniqueIndexForIsUnique.php
Commit message: ITC-3014 Add unique index to MySQL tables to avoid race condition #1517


Vulnerable code:

Fixed code:
<?php
// Copyright (C) <2015>  <it-novum GmbH>
//
// This file is dual licensed
//
// 1.
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, version 3 of the License.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
// 2.
//  If you purchased an openITCOCKPIT Enterprise Edition you can use this file
//  under the terms of the openITCOCKPIT Enterprise Edition license agreement.
//  License agreement and license key will be shipped with the order
//  confirmation.

declare(strict_types=1);

use Migrations\AbstractMigration;

/**
 * Class UniqueIndexForIsUnique
 *
 * Created via:
 * oitc migrations create UniqueIndexForIsUnique
 *
 * Run migration:
 * oitc migrations migrate
 *
 */
class UniqueIndexForIsUnique extends AbstractMigration {
    /**
     * Change Method.
     *
     * More information on this method is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     * @return void
     */
    public function change(): void {

        if ($this->hasTable('agentchecks')) {
            $this->table('agentchecks')
                ->addIndex(
                    [
                        'name',
                    ],
                    ['unique' => true]
                )
                ->update();
        }

        if ($this->hasTable('macros')) {
            $this->table('macros')
                ->addIndex(
                    [
                        'name',
                    ],
                    ['unique' => true]
                )
                ->update();
        }

        if ($this->hasTable('users')) {
            $this->table('users')
                ->addIndex(
                    [
                        'email',
                    ],
                    ['unique' => true]
                )
                ->addIndex(
                    [
                        'email',
                        'ldap_dn'
                    ],
                    ['unique' => true]
                )
                ->update();
        }

    }
}
<?php
// Copyright (C) <2015>  <it-novum GmbH>
//
// This file is dual licensed
//
// 1.
//	This program is free software: you can redistribute it and/or modify
//	it under the terms of the GNU General Public License as published by
//	the Free Software Foundation, version 3 of the License.
//
//	This program is distributed in the hope that it will be useful,
//	but WITHOUT ANY WARRANTY; without even the implied warranty of
//	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//	GNU General Public License for more details.
//
//	You should have received a copy of the GNU General Public License
//	along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

// 2.
//	If you purchased an openITCOCKPIT Enterprise Edition you can use this file
//	under the terms of the openITCOCKPIT Enterprise Edition license agreement.
//	License agreement and license key will be shipped with the order
//	confirmation.

declare(strict_types=1);

use Migrations\AbstractMigration;

/**
 * Class UniqueIndexForIsUnique
 *
 * Created via:
 * oitc migrations create -p GrafanaModule UniqueIndexForIsUnique
 *
 * Run migration:
 * oitc migrations migrate -p GrafanaModule
 *
 */
class UniqueIndexForIsUnique extends AbstractMigration {
    /**
     * Change Method.
     *
     * More information on this method is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     * @return void
     */
    public function change(): void {
        if ($this->hasTable('grafana_userdashboards')) {
            $this->table('grafana_userdashboards')
                ->addIndex(
                    [
                        'name',
                    ],
                    ['unique' => true]
                )
                ->update();
        }
    }
}