So beheben Sie die Sicherheitslücke beim Löschen willkürlicher Dateien im WordPress-Plugin WooCommerce

WBOY
Freigeben: 2023-05-13 18:16:06
nach vorne
1576 Leute haben es durchsucht

Technische Details

Der Berechtigungsverarbeitungsmechanismus von WordPress wird hauptsächlich durch die Bereitstellung verschiedener Funktionen für verschiedene Rollen implementiert. Wenn die Store-Administratorrolle definiert ist, werden edit_users dieser Rollenfunktion zugewiesen, damit sie dies tun können Verwalten Sie die Kundenkonten des Shops direkt. Der gesamte Berechtigungszuweisungsprozess findet während des Installationsprozesses des Plug-Ins statt. woocommerce/includes/class-wc-install.php:

//Shop manager role.add_role(       'shop_manager',      // Internal name of the new role       'Shop manager',      // The label for displaying       array(               // Capabilities                ⋮              'read_private_posts'     => true,              'edit_users'             => true,              'edit_posts'             => true,                ⋮       ));
Nach dem Login kopieren

Die Rollenberechtigungsinformationen werden in der Datenbank als WordPress-Kerneinstellungen gespeichert, was bedeutet, dass die Benutzerrolle jetzt sogar unabhängig vom Plugin ist Wenn das Plugin nicht aktiviert ist, hat es keine Auswirkungen auf die zugehörigen Rollenberechtigungen.

Wenn ein authentifizierter Benutzer versucht, andere Benutzerinformationen zu ändern, wird die Funktion current_user_can() aufgerufen und stellt dann sicher, dass nur privilegierte Benutzer diesen Vorgang ausführen können. Beispiel für einen Funktionsaufruf Current_user_can():

$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) {    edit_user($target_user_id);}
Nach dem Login kopieren

Die Verifizierungslogik des Aufrufs lautet wie folgt: Dieser Benutzer möchte die ID $target_user_id verwenden, um einen bestimmten Benutzer zu ändern. Hat er die Berechtigung zur Ausführung?

In der Standardkonfiguration ermöglicht die Funktion edit_users Benutzern mit Berechtigungen (z. B. Shop-Administratoren), andere Benutzer, sogar Administratorbenutzer, zu bearbeiten und dann Vorgänge wie Kennwortaktualisierungen durchzuführen. Aus Sicherheitsgründen muss WooCommerce angeben, ob der Shop-Administrator Benutzer bearbeiten kann, daher muss das Plug-in Meta-Berechtigungen hinzufügen. Metafunktionen können von current_user_can() aufgerufen werden. Der von der Funktion im Standardverhalten zurückgegebene Wert ist wahr, aber der von der Meta-Berechtigungsfunktion zurückgegebene Wert kann bestimmen, ob der aktuelle Benutzer einen solchen Vorgang ausführen kann. Unten ist der abstrakte Funktionscode des WooCommerce-Meta-Berechtigungsfilters aufgeführt:

function disallow_editing_of_admins( $capability, $target_user_id ) {       // If the user is an admin return false anddisallow the action    if($capability == "edit_user"&& user_is_admin($target_user_id)) {        return false;    } else {        return true;    }}add_filter('map_meta_cap', 'disallow_editing_of_admins');
Nach dem Login kopieren

Wenn beispielsweise current_user_can('edit_user', 1) aufgerufen wird, ermittelt der Filter, dass die ID 1 ist ($ target_user_id ) ist ein Administrator und bestimmt anhand des Ergebnisses, ob dem Benutzer die Bedienung gestattet werden soll.

Store-Administrator deaktiviert Plug-Ins

Standardmäßig können nur Administratoren Plug-Ins deaktivieren. Diese Sicherheitslücke ermöglicht es dem Shop-Administrator jedoch, jede beschreibbare Datei auf dem Server zu löschen, sodass wir verhindern können, dass WordPress das Plug-in lädt, indem wir die Hauptdatei von WooCommerce, woocommerce.php, löschen.

Diese Sicherheitslücke beim Löschen von Dateien besteht in der Protokollierungsfunktion von WooCommerce. Die Protokolle werden im wp-content-Verzeichnis in Form von .log-Dateien gespeichert. Wenn der Store-Administrator eine Protokolldatei löschen möchte, muss er den Dateinamen als GET-Parameter übergeben. Der unten gezeigte Codeausschnitt ist der anfällige Teil:

woocommerce/includes/admin/class-wc-admin-status.php

class WC_Admin_Status{    public static function remove_log()    {    ⋮        $log_handler = newWC_Log_Handler_File();       $log_handler->remove(wp_unslash($_REQUEST['handle']));}
Nach dem Login kopieren

woocommerce/includes/log-handlers / class-wc-log-handler-file.php

class WC_Log_Handler_File extends WC_Log_Handler{    public function remove($handle)    {    ⋮        $file = trailingslashit(WC_LOG_DIR) .$handle;    ⋮unlink($file);
Nach dem Login kopieren

Das Problem hierbei ist, dass der Dateiname ($handle) zum Protokollverzeichnis (wp-content/wc-logs/) hinzugefügt wird. und dann an die Funktion unlink() übergeben. Beim Festlegen von „$handle../../plugins/woocommerce-3.4.5/woocommerce.php“ wird die Datei wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce php wird entfernt und führt zur Deaktivierung von WooCommerce.

Das obige ist der detaillierte Inhalt vonSo beheben Sie die Sicherheitslücke beim Löschen willkürlicher Dateien im WordPress-Plugin WooCommerce. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!