חור אבטחה באלמנטור פרו מאפשר השתלטות על חנויות ווקומרס

וורדפרס
פורסם לראשונה: 31 מרץ, 2023
קטגוריה: אבטחת מידע

אם אתם עושים שימוש בתוסף אלמנטור פרו (גרסת התשלום של התוסף הפופולרי אלמנטור) והחנות האינטרנטית שלכם עושה שימוש בפלאגין WooCommerce המאפשר ליצור חנות וירטואלית – רוצו לעדכן את גרסת האלמנטור שלכם לפני שתמשיכו לקרוא את המאמר.

 

מהי הסכנה?

התגלה חור אבטחה משמעותי מאוד (בגרסאות הקטנות או שוות ל-3.11.6) המאפשר לתוקף להשתלט באופן מוחלט על האתר שלכם. עד כמה מוחלט? אתן 2 דוגמאות: התוקף יכול למשל להחליט שכל מי שנכנס לאתר שלכם יופנה לאתר אחר לחלוטין או בעצם לאפשר לכל מי שנרשם לאתר להפוך למנהל-על עם הרשאות מלאות בדיוק כמוכם.

 

אז מה בעצם היה שם?

ובכן, ברגע שהאתר שלכם עושה שימוש בתוסף ווקומרס, אלמנטור פרו טוען מודול שמטפל בקומפוננטות של ווקומרס בעזרת הקובץ:

elementor-pro/modules/woocommerce/module.php.

הקובץ הזה מכיל הגדרות רבות ובניהן, הוא רושם 2 פקודות 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' ] );
}

על העבודה עם AJAX בוורדפרס כתבנו בהרחבה בעבר כאן

כפי שניתן לראות, קריאה ל-action הבא: pro_woocommerce_update_page_option
מפעילה את הפונקציה update_page_option:

public function update_page_option( $data ) {
	update_option( $data['option_name'], $data['editor_post_id'] );
}

הפונקציה עושה שימוש ב-update_option שמאפשרת לעדכן רשומות בטבלה wp_options המאחסנת מגוון רחב של הגדרות הוורדפרס שלכם, בניהן- כתובת האתר הראשית, האם לאפשר למשתמשים חדשים להירשם? ואף להגדיר תפקיד ליוזרים חדשים שנרשמים (כאשר ברירת המחדל הינה subscriber) ועוד מגוון רחב של הגדרות משמעותיות באתר שלכם.

 

אוקי, הבנו את הלוגיקה- איפה הבעיה?

ובכן, הפונקציה אמורה לאפשר למנהל האתר ו/או לעורך החנות לערוך הגדרות שקשורות לווקומרס בלבד.

ישנם 2 כשלים שיוצרים יחד חור אבטחה משמעותי למדי: 

  1. לא מתבצעת בדיקה מי המשתמש שפונה אל הפונקציה והאם הוא רשאי (כמנהל האתר או כעורך החנות בלבד) להשתמש בה.
    מה שמאפשר בסופו של דבר לכל משתמש באתר לפנות אליה.
  2. לא הוגדרה רשימת ערכים מורשים עבור option_name על בסיס רשומות ששייכות לווקומרס בלבד או לקומפוננטות המתאימות.
    המשמעות היא שניתן לעדכן כל ערך בטבלה wp_options ומכאן, השמיים הם הגבול: תוקף זדוני יכול לשנות את כתובת האתר ולגרום לכך שכל כניסה לאתר שלכם תעביר לאתר זדוני למשל.

אלמנטור מעבירה את מרבית בקשות ה-AJAX שלה דרך AJAX Handler שמגיע כחלק מהגרסה החינמית של התוסף (שחייבת להיות פעילה באתר שלכם כדי להשתמש בגרסת הפרו) ובעצם מאמתת, כמתבקש, בקשות AJAX בעזרת nonce (עליו וחשיבתו ניתן לקרוא בהרחבה כאן ואם יהיה ביקוש, אכתוב עליו בעברית)

זה קורה במתודה handle_ajax_request:

elementor/core/common/modules/ajax/module.php:

public function handle_ajax_request() {
	if ( ! $this->verify_request_nonce() ) {
		$this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) )
			->send_error( Exceptions::UNAUTHORIZED );
	}
	[...............]
}

מי שמעוניין לעבור על הפונקציה בהרחבה, יכול למצוא אותה בגיטהאב

אממה, את ערכו של nonce כל משתמש פשוט יכול להשיג, וכשאני אומר משתמש אני מתכוון אפילו למי שנרשם כלקוח כחלק מהאפשרויות הבסיסיות של ווקומרס.

איך משיגים אותו? פשוט וקל

אלמנטור טוענת אותו בממשק הניהול יחד עם ה-JS שלה, ללא תלות בעמוד שבו היוזר נמצא וללא בדיקה האם יש צורך בכך!
כלומר, ברגע שמשתמש מסוג לקוח מנסה לגשת לממשק הניהול, ההתנהגות הדיפולטיבית של ווקומרס & וורדפרס תעביר אותו מהכתובת:

domain.com/wp-admin > domain.com/my-account

אממה, אם יוסיף התוקף לכתובת את הפרמטר wc-ajax=1, לא תתבצע הפנייה לאזור האישי בווקומרס והוא ישאר בממשק הניהול ללא אפשרויות גישה מעבר ליכולות החשבון שלו כמובן, אולם יחד עם גישה לאובייקט elementorCommon שמחזיק בתוכו את nonce ויאפשר את ניצול הפירצה.

איך עושים זאת ? פשוט ניגשים אל:

elementorCommon.ajax.getSettings("nonce")

 

מדהים! הצלחתי להשיג את nonce דרך משתמש שאינו מורשה, איך מנצלים את חור האבטחה?

אל תגזימו, אף על פי שחור האבטחה כבר תוקן בגרסה החדשה:

* Tweak: Improved code security enforcement in WooCommerce components

חשפנו כאן המון מידע קריטי שעשוי להשפיע על מאות אלפי חנויות ווקומרס מבוססות אלמנטור pro שלצערי, סביר שחלק ניכר מהן לא עידכנו את הפלאגין ועל כן לא אוכל לחשוף את אופן מימוש חור האבטחה.

המאמר נכתב ע"י ניב אסרף, מפתח וחוקר אבטחת מידע. מוזמנים לעקוב אחרי בלינקדאין

תגובות לחור אבטחה באלמנטור פרו מאפשר השתלטות על חנויות ווקומרס

אל תישארו מאחור…

צור קשר
/ זמינות מיידית