在此向漏洞提供者 Net4ky 表示感谢,也希望更多的安全人员加入到维护Discuz! X程序安全的工作中来。

此Bug来源于WooYun平台,地址为:http://www.wooyun.org/bugs/wooyun-2014-062388
镜像地址为:https://wooyun.x10sec.org/static/bugs/wooyun-2014-062388.html https://web.archive.org/web/20151121150539/http://www.wooyun.org/bugs/wooyun-2014-062388

怀着忐忑的心情提交了这个漏洞,依旧相信wooyun是一个良好的平台 赌上了作为一个白帽子的节操,不要在让他碎一地
条件一:需要UC管理员权限。
条件二:前台可上传带有PHP代码的可控文件。
漏洞函数 onping 在文件 uc_server\control\admin\app.php

function onping() {
	$ip = getgpc('ip');
	$url = getgpc('url');
	$appid = intval(getgpc('appid'));
	$app = $_ENV['app']->get_app_by_appid($appid);
	$status = '';
	if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) {
		$uc_note = new uc_note();
		$status = $uc_note->test($note['getdata'], $note['postdata']);
	} else {
		$this->load('note');
		$url = $_ENV['note']->get_url_code('test', '', $appid);
		$status = $_ENV['app']->test_api($url, $ip);
	}
	if($status == '1') {
		echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/correct.gif\' border=\'0\' class=\'statimg\' \/><span class=\'green\'>'.$this->lang['app_connent_ok'].'</span>";testlink();';
	} else {
		echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/error.gif\' border=\'0\' class=\'statimg\' \/><span class=\'red\'>'.$this->lang['app_connent_false'].'</span>";testlink();';
	}
}

其中的变量$app['extra']['apppath']和$app['apifilename']是从这两栏读过来的 修改其中的值就可以了

漏洞证明

修复方案
对值过滤

本PR根据漏洞提供者建议,对此类情况下的值进行了过滤,规避了相关安全隐患。

本PR已在公开前联系 @oldhuhu 并进行了预测试,感谢官方为本修复方案提供的建议以及详尽的测试工作。