Wellicht dat je gister deze e-mail van Elementor hebt ontvangen omtrent een kritieke beveiligingskwetsbaarheid die is ontdekt in Elementor Pro versies 3.11.6? Deze kwetsbaarheid kan worden misbruikt als WooCommerce ook is geïnstalleerd op uw website. hierin was het volgende bericht te lezen:
E-mailbericht van Elementor
Onderstaand het bericht vertaald vanuit het Engels naar het Nederlands.
Beste klant,
We willen u graag informeren over een kritieke beveiligingskwetsbaarheid die is ontdekt in Elementor Pro versies 3.11.6 en eerdere versies. Deze kwetsbaarheid kan worden misbruikt als WooCommerce ook is geïnstalleerd op uw website.
Om uw website te beschermen en de veiligheid te waarborgen, raden wij u ten zeerste aan om uw Elementor Pro-plugin onmiddellijk bij te werken naar de nieuwste versie. Volg deze eenvoudige stappen om de update te voltooien:
- Log in op uw WordPress Admin Dashboard.
- Ga naar ‘Plugins’ in het linker menu.
- Zoek Elementor Pro of PRO Elements in de lijst met geïnstalleerde plugins.
- Klik op de knop ‘Nu bijwerken’ om het updateproces te starten.
Zodra de update is voltooid, is uw website beschermd tegen de beveiligingskwetsbaarheid en kunt u doorgaan met het gebruik van Elementor Pro met vertrouwen. Als u tijdens het updateproces problemen ondervindt of vragen heeft, neem dan gerust contact op met ons ondersteuningsteam. We staan klaar om u te helpen en ervoor te zorgen dat uw website veilig blijft.
Onze excuses voor het eventuele ongemak dat dit kan veroorzaken en we waarderen uw prompte aandacht voor deze kwestie. Het veilig houden van uw website is onze topprioriteit en we blijven hard werken om eventuele beveiligingsproblemen aan te pakken en u op de hoogte te houden.
Dank u voor het kiezen van onze diensten en voor uw medewerking bij het behouden van een veilige online omgeving.
Met vriendelijke groet, Dream-Theme team.
Wat houdt deze kwetsbaarheid in?
Wanneer Elementor Pro wordt geïnstalleerd op een site waarop WooCommerce is geactiveerd, wordt de component “elementor-pro/modules/woocommerce/module.php” geladen, die een aantal AJAX-acties registreert:
/**
* Register Ajax Actions.
*
* Registers ajax action used by the Editor js.
*
* @since 3.5.0
*
* @param Ajax $ajax
*/
public function register_ajax_actions( Ajax $ajax ) {
// `woocommerce_update_page_option` is called in the editor save-show-modal.js.
$ajax->register_ajax_action( 'pro_woocommerce_update_page_option', [ $this, 'update_page_option' ] );
$ajax->register_ajax_action( 'pro_woocommerce_mock_notices', [ $this, 'woocommerce_mock_notices' ] );
}
Een daarvan is pro_woocommerce_update_page_option, die wordt gebruikt door de ingebouwde editor van Elementor. Het roept update_option aan, een functie die gebruikt kan worden om WordPress-opties in de database te wijzigen, met twee door de gebruiker ingevoerde gegevens:
/**
* Update Page Option.
*
* Ajax action can be used to update any WooCommerce option.
*
* @since 3.5.0
*
* @param array $data
*/
public function update_page_option( $data ) {
update_option( $data['option_name'], $data['editor_post_id'] );
}
Deze functie is bedoeld om de beheerder of de shopmanager in staat te stellen een aantal specifieke WooCommercerce-opties bij te werken, maar de gebruikersinvoer wordt niet gevalideerd en de functie ontbeert een capaciteitscontrole om de toegang te beperken tot een bevoorrechte gebruiker.
Elementor gebruikt zijn eigen AJAX handler om de meeste van zijn AJAX acties te beheren, inclusief pro_woocommerce_update_page_option, met de globale elementor_ajax actie. Deze bevindt zich in het “elementor/core/common/modules/ajax/module.php” script van de gratis versie (die nodig is om Elementor Pro te draaien) :
/**
* Handle ajax request.
*
* Verify ajax nonce, and run all the registered actions for this request.
*
* Fired by `wp_ajax_elementor_ajax` action.
*
* @since 2.0.0
* @access public
*/
public function handle_ajax_request() {
if ( ! $this->verify_request_nonce() ) {
$this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) )
->send_error( Exceptions::UNAUTHORIZED );
}
...
We kunnen zien dat het een nonce-controle bevat die mogelijk zou kunnen voorkomen dat slechte actoren de kwetsbaarheid uitbuiten. Maar de nonce en alle JS-code die ermee samenhangt wordt geladen via de admin_enqueue_scripts hook in “elementor/core/common/app.php”:
add_action( 'admin_enqueue_scripts', [ $this, 'register_scripts' ] );
Het lekt dus in de bron van de pagina naar alle ingelogde gebruikers:
Een geauthenticeerde aanvaller kan de kwetsbaarheid benutten om een beheerdersaccount aan te maken door registratie (users_can_register) in te schakelen en de standaardrol (default_role) in te stellen op “beheerder”, het e-mailadres van de beheerder (admin_email) te wijzigen of, zoals hieronder getoond, al het verkeer om te leiden naar een externe kwaadaardige website door onder andere de siteurl te wijzigen:
MariaDB [example]> SELECT * FROM `wp_options` WHERE `option_name`='siteurl'; +-----------+-------------+------------------+----------+ | option_id | option_name | option_value | autoload | +-----------+-------------+------------------+----------+ | 1 | siteurl | https://slechteurl.nl| yes | +-----------+-------------+------------------+----------+ 1 row in set (0.001 sec)
Omdat de kwetsbare component vereist dat WooCommerce is geïnstalleerd, kan een niet-geauthenticeerde gebruiker een WooCommerce klantaccount aanmaken, inloggen en de kwetsbaarheid ook uitbuiten (WooCommerce klanten kunnen toegang krijgen tot de back-end door wc-ajax=1 toe te voegen aan de query, bijvoorbeeld https://example.com/wp-admin/?wc-ajax=1).
De kwetsbaarheid werd ontdekt en gemeld aan de auteurs op 18 maart 2023, en een nieuwe versie 3.11.7 werd uitgebracht op 22 maart 2023.
Oplossing voor de WP Provider
Je hoeft niets te doen als je gebruik maakt van Managed Hosting via WP Provider, jouw Elementor Pro versie 3.11.6 is bijgewerkt naar de nieuwste versie.
Oplossing voor niet WP Provider gebruikers
De oplossing is om zo snel mogelijk te updaten naar de nieuwere Elementor Pro versie 3.11.7. Controleer altijd goed of nieuwere versies compatible zijn met de gebruikte plugins en thema’s.
Host je nu meerdere WordPress websites en doe je dit niet via ons dan kun je gebruik maken van een van onze WordPress bash scripts welke op onze Github pagina staan.
Gebruik bijvoorbeeld ons bash script om te zien welke websites nog op 3.11.6 draaien: https://github.com/wpprovider/bash-scripts/blob/main/check-elementor-pro-version.sh
En om het nog wat makkelijker te maken het volgende bash script om deze websites ook bij te werken naar 3.11.7: https://github.com/wpprovider/bash-scripts/blob/main/update-specific-elementor-pro-version.sh
Meer informatie over deze kwetsbaarheid rechtstreeks via de bron.