51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

LearnPress中修补的高严重性漏洞

2020年3月16日,LearnPress -- WordPress LMS插件(一个具有80,000多个安装的WordPress插件)修复了一个严重性漏洞,该漏洞使订户级用户可以将其权限提升为" LP Instructor"(具有功能的自定义角色)的权限与WordPress的"作者"角色相似,包括能够上传文件和创建包含未过滤HTML的帖子,这两种功能都可以用作允许站点接管的漏洞利用链的一部分。

我们的威胁情报团队分析了该漏洞,以创建防火墙规则来保护Wordfence客户。在此过程中,我们发现了另外两个漏洞。这些漏洞之一与原始漏洞的后果几乎相同,因为它允许攻击者将任何用户的权限提升为" LP Instructor"。另一个允许具有最小权限的登录用户(例如订户)在网站上创建具有任意标题的新页面,并更改任何现有帖子或页面的状态。

我们于2020年3月17日第二天向插件作者私下披露了这些漏洞,并迅速收到了回复。但是,不幸的是,超过一个月没有发布任何补丁。我们在2020年4月16日跟进了该插件的作者,在未收到任何回复后,与WordPress插件团队联系。几个小时后,插件开发者重新联系并通知我们补丁正在开发中。经过充分修补的版本最终于2020年4月22日发布。

我们强烈建议立即更新到3.2.6.9版,因为这些安全问题已在该版本中得到了全面修补。

Wordfence Premium用户于2020年3月16日收到一条新的防火墙规则,以防止针对原始漏洞和新发现的漏洞的攻击。免费Wordfence用户于2020年4月15日收到此规则。


说明
受影响的 特权升级插件:LearnPress
插件插件 :学习的
受影响版本 :<3.2.6.9
CVE ID :CVE-2020-11511
CVSS VectoCVSS:3.0 / AV:N / AC:L / PR:N / UI:N / S:U / C:H / I:L / A:L / E:P / RL:O / RC:C
CVSS得分 :8.6(高)补丁
版本 :3.2.6.9

LearnPress是一个WordPress插件,允许站点所有者创建一个在线学习门户,其中包括将用户分配为能够向站点添加自己的课程资料的" LP讲师"的功能。每当用户请求成为一名讲师时,该插件的一项功能便会向管理员发送电子邮件,从而允许该管理员通过单击链接批准请求。处理此请求的功能会在插件加载后自动运行,因此始终会"监听"特定参数:

function learn_press_accept_become_a_teacher() {
   $action  = ! empty( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
   $user_id = ! empty( $_REQUEST['user_id'] ) ? $_REQUEST['user_id'] : '';
   if ( ! $action || ! $user_id || ( $action != 'accept-to-be-teacher' ) ) {
       return;
   }

   if ( ! learn_press_user_maybe_is_a_teacher( $user_id ) ) {
       $be_teacher = new WP_User( $user_id );
       $be_teacher->set_role( LP_TEACHER_ROLE );
       delete_transient( 'learn_press_become_teacher_sent_' . $user_id );
       do_action( 'learn_press_user_become_a_teacher', $user_id );
       $redirect = add_query_arg( 'become-a-teacher-accepted', 'yes' );
       $redirect = remove_query_arg( 'action', $redirect );
       wp_redirect( $redirect );
   }
}

add_action( 'plugins_loaded', 'learn_press_accept_become_a_teacher' );

由于添加了此功能的方式,攻击者可能会将action参数设置为accept-to-be-teacher,将user_id参数设置为用户的ID的请求发送到wp-admin中的任何有效位置,以授予教师特权。这意味着即使未经身份验证的攻击者也可以发送wp-admin/admin-post.php包含这些参数的请求,并提升他们选择的用户的权限,尽管他们需要自己的用户ID才能充分利用此漏洞。

授予用户LP Instructor角色后,他们就可以创建新的帖子,课程,课程和测验。此外,LP Instructor还授予用户通常仅保留给编辑者和管理员的unfiltered_html功能:该功能允许他们将自定义代码插入他们创建的任何页面中。借助此功能,攻击者可以轻松地将恶意JavaScript插入他们创建的任何帖子中,然后如果登录的管理员查看了其中一个帖子,则可以将其用于将访客重定向到恶意网站,甚至可以用于站点接管。


说明
认证的页面创建和状态修改受影响的插件:LearnPress
插件插件 :learningpress
受影响的版本 :<3.2.6.9
CVE ID :CVE-2020-11510
CVSS矢量CVSS:3.0 / AV:N / AC:L / PR:L / UI:N / S:U / C:N / I:L / A:H / E:F / RL:U / RC:C
CVSS评分 :7.1(高)
修补版本 :3.2.6.9

LearnPress插件还通过AJAX操作处理了多个任务,这些任务缺少随机数检查和功能检查。它会循环注册AJAX动作,尽管其中许多功能至少使用了功能检查:

			$ajaxEvents = array(
				'create_page'             => false,
				'plugin_action'           => false,
				'modal_search_items'      => false,
				'dismiss_notice'          => false,
				'search_users'            => false,
				'load_chart'              => false,
				'search_course_category'  => false,
				/////////////
				//'be_teacher'              => false,
				'custom_stats'            => false,
				'ignore_setting_up'       => false,
				'get_page_permalink'      => false,
				'dummy_image'             => false,
				'update_add_on_status'    => false,
				//'plugin_install'          => false,
				'bundle_activate_add_ons' => false,
				'install_sample_data'     => false,

				// Remove Notice
				'remove_notice_popup'     => false,
				// Update order status
				'update_order_status'     => false,
			);
			foreach ( $ajaxEvents as $ajaxEvent => $nopriv ) {
				add_action( 'wp_ajax_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );

一种操作update_order_status旨在允许管理员将LearnPress订单标记为已付款或已退款。不幸的是,该功能接受了任何帖子ID和任何状态,甚至不存在任何ID。因此,它是可能的攻击者将请求发送到wp-admin/admin-ajax.php与所述action参数集learnpress_update_order_status,所述order_id集到邮政ID来修改,并且value参数设置为所期望的后状态。这将使攻击者可以发布或删除任何现有的帖子或页面,甚至将其设置为不存在的状态,此时,该帖子或页面将不再出现在网站上,也无法通过wp-admin访问,并且只能通过修改它在数据库中的状态。

       public static function update_order_status() {

           $order_id = learn_press_get_request( 'order_id' );
           $value    = learn_press_get_request( 'value' );

           $order = array(
               'ID'          => $order_id,
               'post_status' => $value,
           );

           wp_update_post( $order ) ? $response['success'] = true : $response['success'] = false;

           learn_press_send_json( $response );

           die();
       }

另一个易受攻击的操作称为函数,create_page该函数旨在在设置向导中使用,以便创建LearnPress需要起作用的默认页面。这意味着攻击者可以发送请求wp-admin/admin-ajax.phpaction参数集learnpress_create_pagepage_name参数设置为自己选择的值。

		public static function create_page() {
			$page_name = ! empty( $_REQUEST['page_name'] ) ? $_REQUEST['page_name'] : '';
			$response  = array();
			if ( $page_name ) {

				if ( $page_id = LP_Helper::create_page( $page_name ) ) {
					$response['page'] = get_post( $page_id );
					$html             = learn_press_pages_dropdown( '', '', array( 'echo' => false ) );
					preg_match_all( '!value=\"([0-9]+)\"!', $html, $matches );
					$response['positions'] = $matches[1];
					$response['html']      = '<a href="' . get_edit_post_link( $page_id ) . '" target="_blank">' . __( 'Edit Page', 'learnpress' ) . '</a>&nbsp;';
					$response['html']      .= '<a href="' . get_permalink( $page_id ) . '" target="_blank">' . __( 'View Page', 'learnpress' ) . '</a>';
				} else {
					$response['error'] = __( 'Error! Page creation failed. Please try again.', 'learnpress' );
				}
			} else {
				$response['error'] = __( 'Empty page name!', 'learnpress' );
			}
			learn_press_send_json( $response );
		}

尽管不那么严重,但此漏洞仍将允许攻击者发布标题中带有垃圾邮件链接的页面,并将其用作恶意SEO活动的一部分。

披露时间表

20203月16日 -- Wordfence威胁情报在分析最近修补的漏洞时,在LearnPress插件中发现了未修补的漏洞。为Wordfence Premium用户发布的防火墙规则。最初与插件开发人员联系。
20203月17日 --插件开发人员确认适当的收件箱以进行讨论。已发送漏洞的完整披露。
20204月15日 --免费Wordfence用户可以使用防火墙规则。
20204月16日 --插件开发者的后续行动(尚未解决的问题)。
20204月20日 --我们就此问题与WordPress插件小组联系,并在不久后收到了插件开发人员的回复。
2020年4月22日 --已发布足够补丁的版本。

结论

在本文中,我们详细介绍了LearnPress插件中的两个漏洞,其中包括特权提升漏洞以及帖子创建和修改漏洞。这些缺陷已在3.2.6.9版中完全修复,我们敦促用户尽快更新到最新的可用版本。自2020年3月16日起,运行Wordfence Premium的网站已受到保护,免受这些漏洞的侵害;自2020年4月15日以来,仍处于免费版本的Wordfence中的网站已受到保护。如果您当前以学生身份使用运行LearnPress的网站,请转发此信息向网站管理员咨询。

赞(0)
未经允许不得转载:工具盒子 » LearnPress中修补的高严重性漏洞